Timer in einer Rule mit Gruppen

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Absinthe
Beiträge: 78
Registriert: 16. Jan 2022 13:30

Re: Timer in einer Rule mit Gruppen

Beitrag von Absinthe »

@udi1toni Grazie mille!!!!

Ich sehe schon, dass ich an der Art, wie ich meine Regeln aufbaue noch einiges zu lernen habe! Vielen Dank!

Leider behebt dies nicht die "Fehlermeldung" im Log

Ich bin mittlerweile Komplett verwirrt... egal ob mit Update oder Change im Trigger kommt diese Fehlermeldung.
2022-09-05 11:55:14.071 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Test_9' failed: cannot invoke method public abstract org.openhab.core.types.State org.openhab.core.items.Item.getState() on null
Im Log sind nun auch die Meldungen aus der Rule mit angelegt...
2022-09-06 08:43:34.632 [WARN ] [.openhab.core.model.script.tempalarm] - Rule durch EG_Windfang_Temperatur getriggert. Der Wert 22.400000000000002 ist keine gültige Zahl!
2022-09-06 08:44:04.883 [WARN ] [.openhab.core.model.script.tempalarm] - Rule durch EG_WC_Temperatur getriggert. Der Wert 22.1 ist keine gültige Zahl!
Blöderweise hören diese Eintrag nach einer undefinierten Zeit einfach auf...

Jetzt bin ich mir nicht sicher, ob nicht das Logging hängt oder der Fehler nach X-Durchläufen einfach weg ist?!
Zuletzt geändert von Absinthe am 6. Sep 2022 13:52, insgesamt 2-mal geändert.
OpenHAB 4.1.1
in einem Docker-Container
auf einer Synology DS1515+

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

Re: Timer in einer Rule mit Gruppen

Beitrag von udo1toni »

Dann sind schon die Items selbst keine Number Items. Die Ausgabe

Code: Alles auswählen

Rule durch EG_WC_Temperatur getriggert. Der Wert 22.1 ist keine gültige Zahl!
Ist da ja eindeutig.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Absinthe
Beiträge: 78
Registriert: 16. Jan 2022 13:30

Re: Timer in einer Rule mit Gruppen

Beitrag von Absinthe »

Sorry - Beitrag zu schnell weggeschickt ;)

Alle Items und auch die Gruppe sind als "Number" definiert.
Bildschirmfoto 2022-09-06 um 13.50.10.png
Die in der Gruppe enthaltenen Items haben auch alle einen Wert...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
OpenHAB 4.1.1
in einem Docker-Container
auf einer Synology DS1515+

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

Re: Timer in einer Rule mit Gruppen

Beitrag von udo1toni »

Hast Du openHAB mal neu gestartet? Ich habe echt keine Erklärung, was da schief geht...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Timer in einer Rule mit Gruppen

Beitrag von udo1toni »

Wir können auch noch etwas genauer hinschauen:

Code: Alles auswählen

if(!(newState instanceof Number)) {
    logWarn("tempalarm","Rule durch {} getriggert. Der Wert {} ist keine gültige Zahl!",triggeringItem.name,newState) 
    return;
}
val Number nValue = (newState as Number)
if(nValue.intValue < 21) {
    logInfo("tempalarm","Rule durch {} getriggert. Temperatur ({} °C) in Ordnung.",triggeringItem.name, nValue.doubleValue)
    return;
}
val mySwitch = Group_Temperatur_ExpirationTimer_2.members.filter[i|i.name.startsWith(triggeringItem.name)].head
if(mySwitch.state == ON) {
    logInfo("tempalarm","Rule durch {} getriggert. Alarm wurde bereits abgesetzt.",triggeringItem.name)
    return;
}
    logInfo("tempalarm","Rule durch {} getriggert. Temperatur ({} °C) zu hoch. Noch keine Meldung erfolgt. Alarm!",triggeringItem.name,nValue)
    val mailActions = getActions("mail","mail:smtp:Mail_SMTP")
    val pushoverActions = getActions("pushover", "pushover:pushover-account:Gruppenname")
    val String strMessage = "Raumtemperatur ist über " + nValue.doubleValue.toString + "°C. Ausgelöst hat Raumtemperaturmelder " + triggeringItem.label + ". Status vom: "+new DateTimeType().format("%1$td.%1$tm.%1$ty %1$tH:%1$tM")
    logInfo("tempalarm","Abgesetzte Meldung:",strMessage)

    mailActions.sendMail("Mail-Adresse@irgendwas.com", "Testing - OPENHAB", strMessage)
    pushoverActions.sendHtmlMessage("<font color='orange'>openHab - Testing</font>", strMessage)
    mySwitch.postUpdate(ON)
Die Rule ist letztlich die gleiche, nur ergänzt um einige Log Meldungen im Fall der Fälle, die Logik funktioniert andersrum, falls eine notwendige Bedingung nicht erfüllt ist, wird die Rule abgebrochen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Absinthe
Beiträge: 78
Registriert: 16. Jan 2022 13:30

Re: Timer in einer Rule mit Gruppen

Beitrag von Absinthe »

Hallo @udo1toni,

ich habe den Container öfters neu gestartet...

Das kommt im Log an...
2022-09-06 21:21:51.203 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_Flur_Temperatur getriggert. Temperatur (24.6 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-06 21:21:51.205 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung:
2022-09-06 21:22:55.985 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_Buero_Temperatur getriggert. Temperatur (24.8 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-06 21:22:55.986 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung:
2022-09-06 21:23:35.789 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_Bad_Temperatur getriggert. Temperatur (25.0 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-06 21:23:35.790 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung:
2022-09-06 21:24:28.084 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch EG_WC_Temperatur getriggert. Temperatur (22.2 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-06 21:24:28.100 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung:
2022-09-06 21:24:28.493 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch EG_WC_Temperatur getriggert. Alarm wurde bereits abgesetzt.
2022-09-06 21:26:58.651 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_Flur_Temperatur getriggert. Alarm wurde bereits abgesetzt.
2022-09-06 21:29:46.553 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Test_11' failed: cannot invoke method public abstract org.openhab.core.types.State org.openhab.core.items.Item.getState() on null
Danach gehen die Logeinträge munter weiter...

Alle Items sowie die Gruppe stehen auf "Number". Auch im Thing steht Number "channelTypeUID: knx:number"...
Bildschirmfoto 2022-09-06 um 21.48.15.png
Kann es sein, dass die Daten bereits "schimmlig" ankommen vom Bus?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
OpenHAB 4.1.1
in einem Docker-Container
auf einer Synology DS1515+

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

Re: Timer in einer Rule mit Gruppen

Beitrag von udo1toni »

Ups... das fehlt in dem logInfo- Befehl eine geschweifte Klammer (deshalb steht hinter "Abgesetzte Meldung:" keine Meldung...)
Die Zeile muss korrekt so aussehen:

Code: Alles auswählen

logInfo("tempalarm","Abgesetzte Meldung: {}",strMessage)
Ansosnten sieht das sehr gut aus. Also bis auf die Fehlermeldung.
Bist Du sicher, dass die Rule ausschließlich über das Ereignis Member of Group changed getriggert wird? Die Meldung weist darauf hin, dass kein gültiges Item vorliegt und damit triggeringItem und/oder newState null sind.

KAnnst Du die Rule bitte mal über eine Textdatei anlegen, statt sie über die UI einzubauen? Der Code-Teil ist identisch, Du musst aber den Kopf und den Rumpf der Rule anpassenm also

Code: Alles auswählen

rule "rulename"
when
    Member of gruppenname changed
then
    // hier Code einfügen
end
Und die Textdatei unter dem Namen meine.rules ins Verzeichnis /etc/openhab/rules/ speichern. (Der Name ist beliebig, muss aber die Endung .rules haben und die Datei muss sich im passenden Verzeichnis befinden.)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Absinthe
Beiträge: 78
Registriert: 16. Jan 2022 13:30

Re: Timer in einer Rule mit Gruppen

Beitrag von Absinthe »

Hallo @udo1toni,

ich bin verwirrt. Total verwirrt.

Ich bekomme die Fehlermeldung - nun in geänderter Form - auch, wenn ich diese in eine Rule als "Text-Datei" ablege...
2022-09-07 22:05:21.243 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_KinderzimmerSued_Temperatur getriggert. Temperatur (25.0 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-07 22:05:21.248 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung: Raumtemperatur ist über 25.0°C. Ausgelöst hat Raumtemperaturmelder OG_KinderzimmerSued_Temperatur. Status vom: 07.09.22 22:05
2022-09-07 22:05:21.515 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test_12-1' failed: null in test_12
2022-09-07 22:05:28.748 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_Buero_Temperatur getriggert. Temperatur (25.6 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-07 22:05:28.752 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung: Raumtemperatur ist über 25.6°C. Ausgelöst hat Raumtemperaturmelder OG_Buero_Temperatur. Status vom: 07.09.22 22:05
2022-09-07 22:05:29.010 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test_12-1' failed: null in test_12
2022-09-07 22:05:31.087 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_KinderzimmerSued_Temperatur getriggert. Temperatur (24.8 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-07 22:05:31.092 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung: Raumtemperatur ist über 24.8°C. Ausgelöst hat Raumtemperaturmelder OG_KinderzimmerSued_Temperatur. Status vom: 07.09.22 22:05
2022-09-07 22:05:31.351 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test_12-1' failed: null in test_12
2022-09-07 22:06:21.199 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_KinderzimmerSued_Temperatur getriggert. Temperatur (25.0 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-07 22:06:21.203 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung: Raumtemperatur ist über 25.0°C. Ausgelöst hat Raumtemperaturmelder OG_KinderzimmerSued_Temperatur. Status vom: 07.09.22 22:06
2022-09-07 22:06:21.462 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test_12-1' failed: null in test_12
2022-09-07 22:06:32.961 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_KinderzimmerSued_Temperatur getriggert. Temperatur (24.8 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-07 22:06:32.965 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung: Raumtemperatur ist über 24.8°C. Ausgelöst hat Raumtemperaturmelder OG_KinderzimmerSued_Temperatur. Status vom: 07.09.22 22:06
2022-09-07 22:06:33.208 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test_12-1' failed: null in test_12
2022-09-07 22:07:22.472 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Test_Alarmanlage' failed: null
2022-09-07 22:08:12.650 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_KinderzimmerSued_Temperatur getriggert. Temperatur (25.0 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-07 22:08:12.654 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung: Raumtemperatur ist über 25.0°C. Ausgelöst hat Raumtemperaturmelder OG_KinderzimmerSued_Temperatur. Status vom: 07.09.22 22:08
2022-09-07 22:08:12.923 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test_12-1' failed: null in test_12
2022-09-07 22:08:19.285 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_KinderzimmerSued_Temperatur getriggert. Temperatur (24.8 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-07 22:08:19.289 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung: Raumtemperatur ist über 24.8°C. Ausgelöst hat Raumtemperaturmelder OG_KinderzimmerSued_Temperatur. Status vom: 07.09.22 22:08
2022-09-07 22:08:19.553 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test_12-1' failed: null in test_12
2022-09-07 22:08:42.803 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_KinderzimmerSued_Temperatur getriggert. Temperatur (25.0 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-07 22:08:42.807 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung: Raumtemperatur ist über 25.0°C. Ausgelöst hat Raumtemperaturmelder OG_KinderzimmerSued_Temperatur. Status vom: 07.09.22 22:08
2022-09-07 22:08:43.064 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test_12-1' failed: null in test_12
2022-09-07 22:08:49.465 [INFO ] [.openhab.core.model.script.tempalarm] - Rule durch OG_KinderzimmerSued_Temperatur getriggert. Temperatur (24.8 °C) zu hoch. Noch keine Meldung erfolgt. Alarm!
2022-09-07 22:08:49.468 [INFO ] [.openhab.core.model.script.tempalarm] - Abgesetzte Meldung: Raumtemperatur ist über 24.8°C. Ausgelöst hat Raumtemperaturmelder OG_KinderzimmerSued_Temperatur. Status vom: 07.09.22 22:08
Irgendwie werde ich das Gefühl nicht los, dass hier etwas anderes als die Items und deren Status nicht stimmt...

Wie komme ich drauf:

Ich habe spaßeshalber, um die Mail Funktion zu testen und die Pushover-Anbindung zu testen eine eigene kleine Regel, wenn ein Switch betätigt wird, dass eine Nachricht ausgelöst wird. Und siehe da...
2022-09-07 22:08:49.665 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Test_Rule_Pushover' failed: null
2022-09-07 22:08:53.160 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Test_Rule_Pushover' failed: null
Die Meldung im Log sieht doch sehr verdächtig ähnlich ;) Diese taucht allerdings nur in Verbindung mit Pushover auf...

Ich habe bereits den Container Kopiert und auch einen neuen Container erstellt, um eine "jungfräuliche" Umgebung zu haben, um hier einen Fehler auszuschließen... die Meldung ist - bis jetzt - weg... Ich beobachte...

Update: Ursprüngliche Meldung weiterhin vorhanden...
2022-09-07 23:16:32.718 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Test_11' failed: cannot invoke method public abstract org.openhab.core.types.State org.openhab.core.items.Item.getState() on null
Was ich zusätzlich beobachten konnte ist, dass nicht jede Benachrichtigung im LOG steht... mir kommt es so vor als ob das Log unvollständig ist. Kann das überhaupt sein!?
OpenHAB 4.1.1
in einem Docker-Container
auf einer Synology DS1515+

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

Re: Timer in einer Rule mit Gruppen

Beitrag von udo1toni »

Nein, das log ist nur dann unvollständig, wenn Du ZRAM aktiv hast und irgendwann das RAM nicht mehr ausreicht. Dann werden jedoch gar keine Zeilen mehr ins Log geschrieben. Nach einem Neustart des Systems tritt dieser Effekt nicht auf.

Bist Du sicher, dass Du nicht irgendeine andere Rule hast, die da Blödsinn macht? Die Fehlermeldung ohne zugehörige vorherige Log-Meldung ist schlicht nicht möglich...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Absinthe
Beiträge: 78
Registriert: 16. Jan 2022 13:30

Re: Timer in einer Rule mit Gruppen

Beitrag von Absinthe »

Ich habe nun dem Docker-Container anstatt 1024 MB RAM nun 2048 MB RAM von 8 GB zugewiesen. "Gefühlt" ist das LOG nun vollständig. Zumindest stimmt die Anzahl der Einträge zu Meldungen mit der Anzahl eingegangener Nachrichten über ein.

Ich möchte nicht ausschließen, dass irgendeine andere Rule hier noch quatsch macht, aber wie kann ich das ausschließen?

Die Meldung bezieht sich auf meine Test Rule "Test_11":
2022-09-09 06:40:31.422 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Test_11' failed: cannot invoke method public abstract org.openhab.core.types.State org.openhab.core.items.Item.getState() on null
Gibt es eine Möglichkeit das Item/die Items sich ins Log schreiben zu lassen, bei denen der Aufruf scheitert? So wüsste ich nicht, an welcher Stelle ich weiter suchen müsste, um dem auf die Spur zu kommen... Bin für jeden Tipp dankbar ;)
OpenHAB 4.1.1
in einem Docker-Container
auf einer Synology DS1515+

Antworten