Seite 1 von 1

Openhab 4.0 Rule wird nicht ausgeführt

Verfasst: 29. Jul 2023 19:39
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

Re: Openhab 4.0 Rule wird nicht ausgeführt

Verfasst: 29. Jul 2023 20:42
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.

Re: Openhab 4.0 Rule wird nicht ausgeführt

Verfasst: 30. Jul 2023 09:53
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

Re: Openhab 4.0 Rule wird nicht ausgeführt

Verfasst: 30. Jul 2023 10:44
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 ;)

Re: Openhab 4.0 Rule wird nicht ausgeführt

Verfasst: 30. Jul 2023 11:53
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 .... ;)

Re: Openhab 4.0 Rule wird nicht ausgeführt

Verfasst: 30. Jul 2023 17:20
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

Re: Openhab 4.0 Rule wird nicht ausgeführt

Verfasst: 30. Jul 2023 19:46
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.

Re: Openhab 4.0 Rule wird nicht ausgeführt

Verfasst: 30. Jul 2023 20:44
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.

Re: Openhab 4.0 Rule wird nicht ausgeführt

Verfasst: 31. Jul 2023 16:17
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