Seite 1 von 4

Thing update jede Nacht 02.22 Uhr

Verfasst: 7. Okt 2020 17:23
von Mclupo
Openhab 2.5 auf Syn. NAS

Jede Nacht gegen 2.20 uhr führt openhab ein thingUpdatedEvent durch und triggert dadurch auch meine rule „system start“ , in der nicht verbundene items mit Werten gesetzt werden, die eigentlich nur nach dem Hochfahren von openhab gesetzt werden sollen.
Wer veranlässt diese Prozedur und wie kann man die unterbinden.
Gruss
Wolf

Re: Thing update jede Nacht 02.22 Uhr

Verfasst: 7. Okt 2020 17:29
von Mclupo
Sehe gerade auch aus dem Nachbar Thema, dass „system started“ nicht system start bedeutet.

Re: Think update jede Nacht 02.22 Uhr

Verfasst: 7. Okt 2020 17:51
von Tokamak
Bitte tue uns den Gefallen und hänge das Logging als Code ein, nicht als Screen-Shot.

Ich sehe im Log, dass es ThingUpdateEvents gibt. Mit diesen hängen allerdings keine Item-Updates zusammen, alleine schon zeitlich: Letzter Change Event eines Items 02:25:14, erster Thing Update um 02:25:25, letzter Thing Update um 02:25:34, nächster Change Event 02:25:42 => kein Zusammenhang.

Wenn es zu einem System Started - Ereignis kam, ist das im Log nicht zu erkennen. Einen OH-Restart gab es offensichtlich auch nicht, sonst sähe das Logging anders aus.

Re: Thing update jede Nacht 02.22 Uhr

Verfasst: 7. Okt 2020 18:08
von Mclupo
Jetzt hab ich auch den richtigen Button gefunden

Code: Alles auswählen

2020-10-04 02:15:14.674 [vent.ItemStateChangedEvent] - SD_02_Spannung changed from 238.06 to 238.15
2020-10-04 02:16:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 20.931902776838115 ° to 22.60409371544162 °
2020-10-04 02:16:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_HHenwinkel changed from -43.85617567482513 ° to -43.55114804042426 °
2020-10-04 02:21:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 22.60409371544162 ° to 24.25954617558733 °
2020-10-04 02:21:21.145 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_HHenwinkel changed from -43.55114804042426 ° to -43.22397053359155 °
2020-10-04 02:25:14.676 [vent.ItemStateChangedEvent] - SD_02_Spannung changed from 238.15 to 238.24
2020-10-04 02:25:25.560 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node38' has been updated.
2020-10-04 02:25:25.567 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node4' has been updated.
2020-10-04 02:25:28.526 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node38' has been updated.
2020-10-04 02:25:29.417 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node4' has been updated.
2020-10-04 02:25:29.421 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node12' has been updated.
2020-10-04 02:25:29.428 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node11' has been updated.
2020-10-04 02:25:32.742 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node12' has been updated.
2020-10-04 02:25:33.642 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node11' has been updated.
2020-10-04 02:25:33.655 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node10' has been updated.
2020-10-04 02:25:34.201 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node26' has been updated.
2020-10-04 02:25:34.504 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:c1f5cb4f:node10' has been updated.
2020-10-04 02:25:42.233 [vent.ItemStateChangedEvent] - LueftungFeuchtObergrenze changed from 45 to 50.0
2020-10-04 02:26:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 24.25954617558733 ° to 25.897499277486077 °
2020-10-04 02:26:21.145 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_HHenwinkel changed from -43.22397053359155 ° to -42.87514330869329 °
2020-10-04 02:31:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 25.897499277486077 ° to 27.517284113167932 °
2020-10-04 02:31:21.145 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_HHenwinkel changed from -42.87514330869329 ° to -42.50518507595822 °
2020-10-04 02:35:20.122 [vent.ItemStateChangedEvent] - SD_02_Spannung changed from 238.24 to 238.195
2020-10-04 02:36:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 27.517284113167932 ° to 29.118324373386173 °
2020-10-04 02:36:21.145 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_HHenwinkel changed from -42.50518507595822 ° to -42.11462983600112 °
2020-10-04 02:37:35.832 [vent.ItemStateChangedEvent] - RS_01_SensorTemperature changed from 26.7 °C to 26.8 °C
2020-10-04 02:38:35.854 [vent.ItemStateChangedEvent] - RS_01_SensorTemperature changed from 26.8 °C to 26.7 °C
2020-10-04 02:41:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 29.118324373386173 ° to 30.70013391919605 °
2020-10-04 02:41:21.145 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_HHenwinkel changed from -42.11462983600112 ° to -41.70402415312057 °
2020-10-04 02:45:14.785 [vent.ItemStateChangedEvent] - SD_02_Spannung changed from 238.195 to 237.701
2020-10-04 02:46:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 30.70013391919605 ° to 32.26231366362498 °
2020-10-04 02:46:21.145 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_HHenwinkel changed from -41.70402415312057 ° to -41.273924594360516 °
2020-10-04 02:51:12.997 [vent.ItemStateChangedEvent] - LS_02_SensorTemperature changed from 7.8 °C to 8.8 °C
2020-10-04 02:51:13.055 [vent.ItemStateChangedEvent] - KleineBalkonTemperaturwechsel changed from 2020-10-04T01:20:15.900+0200 to 2020-10-04T02:51:13.054+0200
2020-10-04 02:51:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 32.26231366362498 ° to 33.80454992509195 °
2020-10-04 02:51:21.143 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_HHenwinkel changed from -41.273924594360516 ° to -40.82489473742602 °
2020-10-04 02:55:14.782 [vent.ItemStateChangedEvent] - SD_02_Spannung changed from 237.701 to 237.88
2020-10-04 02:56:21.142 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 33.80454992509195 ° to 35.32660910029364 °
2020-10-04 02:56:21.144 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_HHenwinkel changed from -40.82489473742602 ° to -40.357503187950336 °
2020-10-04 03:01:21.142 [vent.ItemStateChangedEvent] - LokaleSonnendaten_Position_Azimut changed from 35.32660910029364 ° to 36.82833524959443 °

Re: Think update jede Nacht 02.22 Uhr

Verfasst: 8. Okt 2020 08:15
von Tokamak
So war das nicht gemeint, ich meinte "zukünftig...". Abgesehen davon bitte Logs in Code-Tags einpacken (das ist das Symbol </> in der Leiste).

Das Logging ist letztlich unauffällig, wie ich schon schrieb. Wie kommst du darauf, dass die Thing Updates irgendwelche "System Started" Rules triggern?

Re: Thing update jede Nacht 02.22 Uhr

Verfasst: 8. Okt 2020 09:32
von Mclupo
in der seit drei Tagen laufenden Rule "System started" setze ich das Item "BadAutoBelüftung" auf EIN und Temperatur bzw Feuchtigkeitsober-und Untergrenzen auf entsprechende Werte, da diese Items nur über die sitemap bedient werden und beim Systemstart sonst auf NULL steht. Das Item "BadAutoBelüftung" aktiviert den gesamten Ablauf der Badbelüftung. Sobald dieses Item über die Sitemap gesetzt oder gelöscht wird, bekomme ich eine Pushnachricht über den Zustand des Items. Jeden Tag kommt zwischen 2.20 Uhr und 2.25 Uhr eine Pushnachricht über das Einschalten der "BadAutoBelüftung" .
Erst seitdem die Rule " System started" läuft, habe ich dieses Phänomen bemerkt.

Re: Think update jede Nacht 02.22 Uhr

Verfasst: 8. Okt 2020 10:34
von Tokamak
Das einzige, was zu sehen ist, ist diese Zeile

Code: Alles auswählen

2020-10-04 02:25:42.233 [vent.ItemStateChangedEvent] - LueftungFeuchtObergrenze changed from 45 to 50.0
Wird das Item LueftungFeuchtObergrenze in der besagten Rule verändert? Von BadAutoBelüftung ist nichts zu sehen.

Bitte stelle hier deine Rule und den zeitgleichen Auszug aus openhab.log ein (bitte die Code-Tags </> nicht vergessen).

Re: Thing update jede Nacht 02.22 Uhr

Verfasst: 8. Okt 2020 13:57
von Mclupo
Das ist die Start Rule

Code: Alles auswählen

rule "system Start"
when 
    System started
then 
    BadLueftung_AutoAktiv.postUpdate(ON)
    LueftungTempObergrenze.postUpdate(26.0)
    LueftungTempUntergrenze.postUpdate(25.0)
    LueftungFeuchtObergrenze.postUpdate(50.0)
    LueftungFeuchtUntergrenze.postUpdate(40.0)
end

Das ist die Bad Lüftungsrule

Code: Alles auswählen

var Timer Lueftung_Laufzeit = null  
var Timer Lueftung_Pausezeit = null 

var Number   BadLueftung_PausenzeitEnde = 1
var Number   BadLueftung_LaufzeitEnde = 0
var Number   BadLueftung_PausenzeitAktiv = 0
var Number   BadLueftung_LaufzeitAktiv = 0

rule "Auto Badlueftung abschalten"
when 
    Item BadLueftung_AutoAktiv received update OFF
then 
    RS_02_Schalter.sendCommand(OFF) 
    BadLueftung_PausenzeitEnde = 1
    BadLueftung_LaufzeitEnde = 0
    BadLueftung_PausenzeitAktiv = 0
    BadLueftung_LaufzeitAktiv = 0
    if ( Lueftung_Laufzeit!== null )  { Lueftung_Laufzeit.cancel() Lueftung_Laufzeit = null}
    if ( Lueftung_Pausezeit!== null ) { Lueftung_Pausezeit.cancel() Lueftung_Pausezeit = null}
    BadLueftung_Ausschaltzeit.postUpdate(now.toString)  
    sendPushoverMessage(pushoverBuilder("Badlüftung Automatik abgeschaltet"))
end  

rule "Auto Badlueftung einschalten"
when 
    Item BadLueftung_AutoAktiv received update ON
then 
    sendPushoverMessage(pushoverBuilder("Badlüftung Automatik eingeschaltet"))
end 


rule "Lüftung EIN / AUS"                                // Badlüftung automatisch aktiviert
when 
    Item RS_01_SensorTemperature changed or             // Temperaturwechsel oder
    Item RS_01_SensorRelativeHumidity changed           // Feuchtigkeitswechsel
then
    if  ( BadLueftung_AutoAktiv.state == OFF )  
        {
            return;
        }
               
    if  (                                                // Bedingungen für Einschalten
        (RS_01_SensorTemperature.state as Number).floatValue      >= (LueftungTempObergrenze.state as Number).floatValue  &&
        (RS_01_SensorRelativeHumidity.state as Number).floatValue >= (LueftungFeuchtObergrenze.state as Number).floatValue  &&
         BadLueftung_PausenzeitEnde == 1 &&
         RS_02_Schalter.state == OFF           
        )
        {   
            RS_02_Schalter.sendCommand(ON)                  //Lüfter einschalten
            BadLueftung_PausenzeitEnde = 0
            BadLueftung_LaufzeitEnde = 0
            BadLueftung_LaufzeitAktiv = 1
            if ( Lueftung_Laufzeit!== null )  { Lueftung_Laufzeit.cancel() Lueftung_Laufzeit = null }
             if ( Lueftung_Pausezeit!== null ) { Lueftung_Pausezeit.cancel() Lueftung_Pausezeit = null }
            BadLueftung_Einschaltzeit.postUpdate(now.toString)
            sendPushoverMessage(pushoverBuilder("Bad Lüftung automatisch EIN"))
            Lueftung_Laufzeit = createTimer( now.plusHours(4),
                [ | BadLueftung_LaufzeitEnde = 1
                    Lueftung_Laufzeit = null ])
        }   

    if  (                                               // Bedingungen für Ausschalten
        (
        (RS_01_SensorTemperature.state as Number).floatValue      <= (LueftungTempUntergrenze.state as Number).floatValue ||
        (RS_01_SensorRelativeHumidity.state as Number).floatValue  <= (LueftungFeuchtUntergrenze.state as Number).floatValue
        ) &&
        RS_02_Schalter.state == ON 
        ) 
        {
            RS_02_Schalter.sendCommand(OFF)                 //Lüfter ausschalten
            BadLueftung_PausenzeitEnde = 1
            BadLueftung_LaufzeitEnde = 0
            BadLueftung_LaufzeitAktiv = 0
            if ( Lueftung_Laufzeit!== null )  { Lueftung_Laufzeit.cancel()  Lueftung_Laufzeit = null }
            if ( Lueftung_Pausezeit!== null ) { Lueftung_Pausezeit.cancel() Lueftung_Pausezeit = null }
            BadLueftung_Ausschaltzeit.postUpdate(now.toString)
            sendPushoverMessage(pushoverBuilder("Bad Lüftung nach Wert automatisch AUS"))
        }
end

rule "Lüftung Aus nach Zeit"                            // Bad Lüftung nach Zeit ausschalten
when 
    Item BadLueftung_LaufzeitEnde changed to 1

then 
    RS_02_Schalter.sendCommand(OFF)                 //Lüfter ausschalten
    BadLueftung_PausenzeitEnde = 0    
    BadLueftung_LaufzeitEnde = 0
    BadLueftung_PausenzeitAktiv = 1
    BadLueftung_LaufzeitAktiv = 0
     if ( Lueftung_Laufzeit!== null )  { Lueftung_Laufzeit.cancel() Lueftung_Laufzeit = null }
    if ( Lueftung_Pausezeit!== null ) { Lueftung_Pausezeit.cancel() Lueftung_Pausezeit = null }
    BadLueftung_Ausschaltzeit.postUpdate(now.toString)
    Lueftung_Pausezeit= createTimer(now.plusHours(2),
        [ | BadLueftung_PausenzeitEnde = 1
                BadLueftung_PausenzeitAktiv = 0
                Lueftung_Pausezeit = null ])  //Timer für Pausenzeit
    sendPushoverMessage(pushoverBuilder("Bad Lüftung nach Zeit automatisch AUS"))
end
Morgen gibt es dann das log File und die Pushover Nachricht

Re: Think update jede Nacht 02.22 Uhr

Verfasst: 8. Okt 2020 16:23
von udo1toni
Also, gewöhnlich sollte System started nicht auf Zeit ausgelöst werden.

Punkt 1: Baue bitte mal eine Zeile logInfo(“sstarted“,“Rule getriggert“) direkt nach dem then der Rule ein (Achtung! Ich schreibe per iPad, die Anführungszeichen sind verkehrt)
Immer wenn die Rule getriggert wird, gibt es nun in openhab.log eine eigene Meldung zu der Rule. Nur, um sicherzustellen, dass tatsächlich diese Rule verantwortlich ist...

Punkt 2: Um beim Systemstart die Items auf bestimmte Werte zu setzen, gibt es elegantere Wege. Zum Einen kannst Du vorher testen, ob das Item keine gültige Zahl enthält (!(Item.state instanceof Number)) und nur dann den Wert über die Rule setzen lassen. Zum Anderen könntest Du die betreffenden Items einfach per mapdb Persistence speichern und per restoreOnStartup laden lassen, dann „überleben“ die Items auch den Neustart.


Gesendet von iPad mit Tapatalk

Re: Think update jede Nacht 02.22 Uhr

Verfasst: 8. Okt 2020 17:16
von udo1toni
Punkt 3: Deine Rules sind unnötig kompliziert. Hier nach einer ersten Runde Optimierung:

Code: Alles auswählen

var Timer tBathVentOn = null  
var Timer tBathVentOff = null 

rule "Auto Badlueftung abschalten"
when
    Item BadLueftung_AutoAktiv changed to OFF
then 
    if(BadLueftung_AutoAktiv.state == OFF) {
        RS_02_Schalter.sendCommand(OFF)
        tBathVentOn?.cancel
        tBathVentOff?.cancel
        tBathVentOff = null
        BadLueftung_Ausschaltzeit.postUpdate(now.toString)
    }
    sendPushoverMessage(pushoverBuilder("Badlüftung Automatik "+if(BadLueftung_AutoAktiv.state != ON) "aus" else "ein" + "geschaltet"))
end  

rule "Lüftung EIN / AUS"                                // Badlüftung automatisch aktiviert
when 
    Item RS_01_SensorTemperature changed or             // Temperaturwechsel oder
    Item RS_01_SensorRelativeHumidity changed           // Feuchtigkeitswechsel
then
    if(BadLueftung_AutoAktiv.state == OFF) return;
    val Number nSensTemp = if(RS_01_SensorTemperature.state instanceof Number)      (RS_01_SensorTemperature.state as Number).floatValue      else 0
    val Number nSensHum  = if(RS_01_SensorRelativeHumidity.state instanceof Number) (RS_01_SensorRelativeHumidity.state as Number).floatValue else 0
    val Number nLowTemp  = if(LueftungTempUntergrenze.state instanceof Number)      (LueftungTempUntergrenze.state as Number).floatValue      else 0
    val Number nLowHum   = if(LueftungFeuchtUntergrenze.state instanceof Number)    (LueftungFeuchtUntergrenze.state as Number).floatValue    else 0
    val Number nHighTemp = if(LueftungTempObergrenze.state instanceof Number)       (LueftungTempObergrenze.state as Number).floatValue       else 0
    val Number nHighHum  = if(LueftungFeuchtObergrenze.state instanceof Number)     (LueftungFeuchtObergrenze.state as Number).floatValue     else 0

    if(nSensTemp >= nHighTemp && nSensHum >= nHighHum && tBathVentOff === null && RS_02_Schalter.state != ON) {   // Bedingungen für Einschalten
        RS_02_Schalter.sendCommand(ON)
        tBathVentOn?.cancel
        BadLueftung_Einschaltzeit.postUpdate(now.toString)
        sendPushoverMessage(pushoverBuilder("Bad Lüftung automatisch EIN"))
        tBathVentOn = createTimer(now.plusHours(4),[ |
            RS_02_Schalter.sendCommand(OFF)
            BadLueftung_Ausschaltzeit.postUpdate(now.toString)
            sendPushoverMessage(pushoverBuilder("Bad Lüftung nach Zeit automatisch AUS"))
            tBathVentOff = createTimer(now.plusHours(2),[ |
                tBathVentOff = null
            ])  //Timer für Pausenzeit
        ])
    }
    if((nSensTemp <= nLowTemp || nSensHum <= nLowHum) && RS_02_Schalter.state == ON) { // Bedingungen für Ausschalten
        RS_02_Schalter.sendCommand(OFF)
        tBathVentOn?.cancel
        tBathVentOff?.cancel
        tBathVentOff = null
        BadLueftung_Ausschaltzeit.postUpdate(now.toString)
        sendPushoverMessage(pushoverBuilder("Bad Lüftung nach Wert automatisch AUS"))
    }
end
Die ganzen Zustände, ob ein Timer gerade aktiv ist oder nicht, nutzt Du ja nicht. Dort, wo Du sie nutzt, steht die Information schon in anderer Form zur Verfügung. Der ausgelagerte Code zum stoppen auf Zeit kann nicht funktionieren, da Du die Rule durch eine Variable triggern willst. Alternativ hast Du eine Variable exakt gleich benannt wie ein Item, was dann genauso schief geht.

der Code lässt sich vermutlich noch weiter optimieren.