After restore on startup timer in rule not running

Tags: #<Tag:0x00007f616e46c270> #<Tag:0x00007f616e46c180>

Hello

its regarding item Gartenhaus_Lampe_Timer_Dauer
Item:

Number  Gartenhaus_Lampe_Timer_Dauer    "Timer Dauer [%d Min.]"  

After restore on startup the item has the value 3.0, that means is float

Log on restart:

2020-07-05 12:36:31.603 [vent.ItemStateChangedEvent] - Gartenhaus_Lampe_Timer_Dauer changed from NULL to 3.0

Log on Error:

2020-07-05 12:44:02.988 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Gartenlicht Timer Schaltung': For input string: "3.0"

mysql.persist:

Gartenhaus_Lampe_Timer_Dauer, Gartenhaus_Lampe_Timer : strategy = everyChange, restoreOnStartup

mariadb:

MariaDB [openhab]> show fields from Item18;
+-------+-------------+------+-----+---------------------+-------+
| Field | Type        | Null | Key | Default             | Extra |
+-------+-------------+------+-----+---------------------+-------+
| Time  | datetime    | NO   | PRI | 0000-00-00 00:00:00 |       |
| Value | smallint(6) | NO   |     | NULL                |       |
+-------+-------------+------+-----+---------------------+-------+
2 rows in set (0.00 sec)

MariaDB [openhab]> select * from Item18;
±--------------------±------+
| Time | Value |
±--------------------±------+
| 2020-06-14 23:31:43 | 5 |
| 2020-06-14 23:31:44 | 3 |
| 2020-07-05 11:21:05 | 4 |
| 2020-07-05 11:21:07 | 3 |
±--------------------±------+

Rule:

var Timer gartenlicht_timer = null // AT THE TOP OF THE RULE FILE
// ------------------------------------------------------------------------------------------------------------
rule "Gartenlicht Timer Schaltung"
when
    Item Door_01_Status changed to OPEN  // Terassentür wird geöffnet
then
    if( Gartenhaus_Lampe_Timer.state == ON ) {              // Timer in Sitemap eingeschaltet?
        if( Seagard_State.state == OFF) {                   // Ist das Gartenlicht aus?
            if( Sonne_ist.state == OFF ) {                  // Ist die Sonne unter gegangen?
                if (gartenlicht_timer === null) {           // Ist ein vorheriger Gartenlicht Timer abgelaufen?
                 Seagard_CMD.sendCommand(ON)                // Gartenlicht einschalten
                 // Timer starten, Dauer wird eingestellt über Sitemap
                 gartenlicht_timer = createTimer(now.plusMinutes(Integer::parseInt(Gartenhaus_Lampe_Timer_Dauer.state.toString)), [ |  
                 logInfo("rules", "Gartenlicht Timer abgelaufen")         // Timer ist abgelaufen
                 Seagard_CMD.sendCommand(OFF)              // Gartenlicht ausschalten
                 gartenlicht_timer = null 
                 ])
                 }
             }
         }
     }
end

Yes that is something to know.

1 Like