Openhab 4.0 Rule wird nicht ausgeführt

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Jochen
Beiträge: 23
Registriert: 25. Mär 2018 22:07
Answers: 0

Openhab 4.0 Rule wird nicht ausgeführt

Beitrag von Jochen »

Hallo zusammen,

ich habe schon gelesen, dass verschiedene Probleme mit den Rules beim Update auf 4.0 auftreten.

Leider bekomme ich meine Rules für meine Homematic Wetterstation / Regenfall auch nicht mehr ans laufen.

Mein Openhab 4.0.1 läuft im Docker unter Unraid, eine Influxdb 1 gibt es zum persistieren. Bisher hat die Rule einwandfrei funktioniert. Seit dem Update wurden dann die Zählerstände von der Wetterstation geändert. Vorher war es z.B. "250.8", danach "0.2508m", das habe ich korrigiert indem ich das Item auf "Number" geändert habe. Jetzt sind die Werte wieder wie früher.

Leider wird meine Regel, die ich zum Berechnen der Regenmenge eines ganzen Tages verwende nicht ausgeführt, die Fehlermeldung sagt aber nicht warum. Es werden keine neuen Werte in die Items geschrieben.

Das ist die Fehlermeldung in openhab.log:
2023-07-29 19:22:02.049 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'WS_Regenfall' failed: var ZaehlerMAX, Regenfall_Zaehler, Regenfall_gesamttag, Regenfall_Zaehler_gesamttag;


ZaehlerMAX = 387;
Regenfall_Zaehler = itemRegistry.getItem('WS_Regenfall_Zaehler').getState();
Regenfall_Zaehler_gesamttag = itemRegistry.getItem('WS_Regenfall_Zaehler_gesamttag').getState();
Regenfall_gesamttag = itemRegistry.getItem('WS_Regenfall_gesamttag').getState();

if (Regenfall_Zaehler >= Regenfall_Zaehler_gesamttag) {
Regenfall_gesamttag = Regenfall_Zaehler - Regenfall_Zaehler_gesamttag;
events.postUpdate('WS_Regenfall_gesamttag', Regenfall_gesamttag);
}
if (Regenfall_Zaehler < Regenfall_Zaehler_gesamttag) {
Regenfall_gesamttag = (Regenfall_Zaehler - Regenfall_Zaehler_gesamttag) + ZaehlerMAX;
events.postUpdate('WS_Regenfall_gesamttag', Regenfall_gesamttag);
}
events.postUpdate('WS_Regenfall_Zaehler_gesamttag', Regenfall_Zaehler);
Die Regel selbst habe ich in Blockly erstellt
Rule Wettersensor Regenfall Aufruf.png
Rule Wettersensor Regenfall.png
Wettersensor Items.png
Alle Items, die in der Regel vorkommen sind "Number".

Hat jemand eine Idee was hier falsch läuft?

Schöne Grüße
Jochen
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Harka
Beiträge: 500
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Openhab 4.0 Rule wird nicht ausgeführt

Beitrag von Harka »

Hi,
der Unterbau von Blockly hat sich geändert. Zur Migration reicht es oft wenn Du einmal alle Scripte speicherst, nach dem Du unter Einstellungen/Automation "JavaScript Scripting" installiert hast.
In Deinem Fall sollten noch das Einlesen der Eingangswerte auf get_numericState abändern. Das neue JS ist etwas weniger Tolerant was Number/String betrifft.

Jochen
Beiträge: 23
Registriert: 25. Mär 2018 22:07
Answers: 0

Re: Openhab 4.0 Rule wird nicht ausgeführt

Beitrag von Jochen »

Hallo,

"JavaScript Scripting" hatte ich schon installiert und alles neu gespeichert.
Bei Blockly und "get ... of item" fehlen leider die Punkte "numeric state" und "quantity state", woran kann das liegen?
Auswahl.png
Gruß
Jochen
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Openhab 4.0 Rule wird nicht ausgeführt

Beitrag von udo1toni »

Schau mal in den Code der UI Rule, dort ist zu Beginn eine Referent auf Nashorn, das musst Du anpassen auf GraalVM (am besten erzeugst Du eine neue Blockly Rule und kopierst den entsprechenden Eintrag von dort in die alte Rule)

Immer dran denken... Ein Backup rettet Dich, falls etwas schief geht ;)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Taifun2300
Beiträge: 19
Registriert: 27. Dez 2022 09:19
Answers: 0

Re: Openhab 4.0 Rule wird nicht ausgeführt

Beitrag von Taifun2300 »

Ich ergänze mal diesen Fred ganz frech ... falls jemand auf der Suche ist ...

Nachdem ich viel mit Scripts arbeite, hatte ich folgende Probleme im Log:

ReferenceError: "itemRegistry" is not defined
ReferenceError: "events" is not defined

Ich musste ein wenig suchen, bzw. habe ich ein Blocky gebastelt um zu sehen was nach der Migration daraus wird.

Aus itemRegistry.getItem('Stromzahler_Leistung').getState() wurde
items.getItem('Stromzahler_Leistung').state;

und aus events.sendCommand('Steckdose', 'OFF') wurde
items.getItem('Steckdose').sendCommand('OFF')

Jetzt laufen meine Scripts wieder .... ;)
openHAB 4.0.3 im Docker auf Debian 11, Anbindung an Raspmatic, Hue, FHEM, Fritzbox, Buderus KM200, Worx, Bilnk, Alexa

Jochen
Beiträge: 23
Registriert: 25. Mär 2018 22:07
Answers: 0

Re: Openhab 4.0 Rule wird nicht ausgeführt

Beitrag von Jochen »

Hallo,

Udo, das mit der Referenz konnte ich im Code nicht finden.

Ich habe jetzt aber die kompletten Regeln neu erstellt und obwohl in Blockly alles identisch aussieht, ist der Code ein bisschen anders, genau wie Taifun2300 schon schrieb.

Die neu erstellten Regeln laufen ohne Fehlermeldung.

Hier die alte Regel in Blockly:
alt.png
hier der Code dazu:
var ZaehlerMAX, Regenfall_Zaehler, Regenfall_heute, Regenfall_Zaehler_gesamttag;


ZaehlerMAX = 9999;
Regenfall_Zaehler = itemRegistry.getItem('WS_Regenfall_Zaehler').getState();
Regenfall_Zaehler_gesamttag = itemRegistry.getItem('WS_Regenfall_Zaehler_gesamttag').getState();
Regenfall_heute = itemRegistry.getItem('WS_Regenfall_heute').getState();

if (Regenfall_Zaehler >= Regenfall_Zaehler_gesamttag) {
Regenfall_heute = Regenfall_Zaehler - Regenfall_Zaehler_gesamttag;
events.postUpdate('WS_Regenfall_heute', Regenfall_heute);
}
if (Regenfall_Zaehler < Regenfall_Zaehler_gesamttag) {
Regenfall_heute = (Regenfall_Zaehler - Regenfall_Zaehler_gesamttag) + ZaehlerMAX;
events.postUpdate('WS_Regenfall_heute', Regenfall_heute);
}
und hier die neue Regel in Blockly:
neu.png
und hier der code dazu:
var Z_C3_A4hlerMAX, Regenfall_Z_C3_A4hler, Regenfall_heute, Regenfall_Z_C3_A4hler_gesamttag;


Z_C3_A4hlerMAX = 9999;
Regenfall_Z_C3_A4hler = items.getItem('WS_Regenfall_Zaehler').state;
Regenfall_Z_C3_A4hler_gesamttag = items.getItem('WS_Regenfall_Zaehler_gesamttag').state;
Regenfall_heute = items.getItem('WS_Regenfall_heute').state;

if (Regenfall_Z_C3_A4hler >= Regenfall_Z_C3_A4hler_gesamttag) {
Regenfall_heute = Regenfall_Z_C3_A4hler - Regenfall_Z_C3_A4hler_gesamttag;
items.getItem('WS_Regenfall_heute').postUpdate(Regenfall_heute);
}
if (Regenfall_Z_C3_A4hler < Regenfall_Z_C3_A4hler_gesamttag) {
Regenfall_heute = (Regenfall_Z_C3_A4hler - Regenfall_Z_C3_A4hler_gesamttag) + Z_C3_A4hlerMAX;
items.getItem('WS_Regenfall_heute').postUpdate(Regenfall_heute);
}
Gruß
Jochen
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Openhab 4.0 Rule wird nicht ausgeführt

Beitrag von udo1toni »

:) Passt schon. Allerdings besteht die UI Rule ja nicht ausschließlich aus dem Code, das ausgeführt wird, sondern auch dem Rahmen, in dem z.B. die grafischen Elemente codiert sind, und eben auch die verwendete Sprache des Codes.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Harka
Beiträge: 500
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Openhab 4.0 Rule wird nicht ausgeführt

Beitrag von Harka »

Normal sollte das ja beim speichern automatisch neu übersetzt werden. Hat bei mir auch so geklappt.
Hast Du das alte Script (oder andere) noch? Schau mal bitte bei den Details ob dort eine Sprache wählbar ist. Könnte für andere User interessant sein.

Jochen
Beiträge: 23
Registriert: 25. Mär 2018 22:07
Answers: 0

Re: Openhab 4.0 Rule wird nicht ausgeführt

Beitrag von Jochen »

Ich habe zwar die alte Regel noch aufgehoben, aber die hatte ich auch schon editiert und neu gespeichert.
alte Rule.png
2 Regeln, die ich für die Berechnung des Niederschlags habe, musste ich neu schreiben. Bei den anderen Regeln reichte es aus sie in Blockly zu öffnen und wieder zu speichern. Danach liefen sie ohne Fehlermeldung.

Gruß
Jochen
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten