Thing update jede Nacht 02.22 Uhr

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Thing update jede Nacht 02.22 Uhr

Beitrag 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
Zuletzt geändert von Mclupo am 8. Okt 2020 17:12, insgesamt 2-mal geändert.
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Re: Thing update jede Nacht 02.22 Uhr

Beitrag von Mclupo »

Sehe gerade auch aus dem Nachbar Thema, dass „system started“ nicht system start bedeutet.
Zuletzt geändert von Mclupo am 8. Okt 2020 17:12, insgesamt 2-mal geändert.
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Think update jede Nacht 02.22 Uhr

Beitrag 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.
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Re: Thing update jede Nacht 02.22 Uhr

Beitrag 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 °
Zuletzt geändert von Mclupo am 8. Okt 2020 17:12, insgesamt 2-mal geändert.
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Think update jede Nacht 02.22 Uhr

Beitrag 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?
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Re: Thing update jede Nacht 02.22 Uhr

Beitrag 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.
Zuletzt geändert von Mclupo am 8. Okt 2020 17:13, insgesamt 1-mal geändert.
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Think update jede Nacht 02.22 Uhr

Beitrag 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).
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Mclupo
Beiträge: 178
Registriert: 6. Jun 2020 20:55
Answers: 2
Wohnort: Kirchheim Teck

Re: Thing update jede Nacht 02.22 Uhr

Beitrag 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
Zuletzt geändert von Mclupo am 8. Okt 2020 17:13, insgesamt 1-mal geändert.
OH 3.4.2 auf Raspi 4 mit Aeotec z-wave Stick gen 5+ und zigbee conbee II

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Think update jede Nacht 02.22 Uhr

Beitrag 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
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Think update jede Nacht 02.22 Uhr

Beitrag 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.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten