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.