Kombination von DSL und Javascript Scripts in Blockly

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
neuling10
Beiträge: 71
Registriert: 26. Mär 2022 18:15
Answers: 0

Kombination von DSL und Javascript Scripts in Blockly

Beitrag von neuling10 »

Hallo an die Runde,

ich bin vor einiger Zeit auf OH 4 umgestiegen, aktuell nutze ich die aktuellste stable Version 4.3.3

Ich erstelle Rules soweit wie möglich mit Blockly. In 3 Fällen musste ich jedoch gecodete DSL Scripts bzw. Javascript Scripts in meine Blockly Rules integrieren, da mit Blockly meines Wissens nach nicht umsetzbar. Aus den Blockly Rules rufe ich entweder die Scripts auf oder verwende Inline Script Blöcke.
Folgendes DSL Scriptrufe ich aus einer Blockly Rule auf:

Code: Alles auswählen

(createTimer(now.plusSeconds(11)) [|

executeCommandLine("wget", "http://192.168.30.100:8080/ipcamera/xxxxxx/ipcamera.jpg", "-O",  "/tmp/" + "Haustuer.jpg")

val actions = getActions("pushover", "pushover:pushover-account:xxxxxxxx")
actions.sendAttachmentMessage("Klingel Wohnungstür", "openHAB", "/tmp/Haustuer.jpg", "", Duration.ofHours(720)) 

                                   
                                   ])
Ein Javascript Script zum Aktivieren/Deaktivieren eines Things:

Code: Alles auswählen

var thingMgr = osgi.getService('org.openhab.core.thing.ThingManager'); 
var ThingUID = Java.type('org.openhab.core.thing.ThingUID'); 
thingMgr.setEnabled(new ThingUID('ipcamera:generic:xxxxxxxx'), true)
Und ein Blockly Inline Script fürs Senden von Nachrichten an Enigma2 Receiver:

Code: Alles auswählen

var actions = actions.get("enigma2","enigma2:device:xxxxxxxx");
actions.sendInfo("Das ist ein Test",30)
Seit Umstieg auf OH4.0 beobachte ich das merkwürdige Verhalten, dass die "reinen" Blockly Rules problemlos laufen, jedoch die kombinierten Blockly Rules mal laufen, mal nicht laufen. Für mich wie gesagt sehr merkwürdig... wenn die oben angeführten Scripts falsch gecodet wären, würden sie ja nie laufen und nicht einmal schon, einmal nicht.
Ist es möglich, dass irgendwelche Automation Add-ons installiert werden sollten für einen reibungslosen Betrieb (z.B. JRule, Java223 Scripting)? Aktuell habe ich nur JavaScript Scripting installiert. Oder gibt es vielleicht ein bekanntes generelles Problem in OH4 mit der kombinierten Anwendung verschiedener Rule Sprachen?

Grüße
neuling10

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

Re: Kombination von DSL und Javascript Scripts in Blockly

Beitrag von Harka »

Moin,
hier laufen sowohl Inline-Script als auch der Aufruf von weiteren Skripten ohne Probleme.
Was mir auffällt ist das jeweils fehlende Semikolon in der letzten Zeile der JS-Scripte. Das mittlere Script ist unnötig kompliziert (Nashorn?) Da sollte auch ein

Code: Alles auswählen

things.getThing('ipcamera:generic:xxxxxxxx').setEnabled(true);
reichen.
PS: nur so am Rande - das DSL-Script sollte sich auch in ein JS-Inline-Script umwandeln lassen. Exec Actions und https://community.openhab.org/t/pushover-actions/134051

neuling10
Beiträge: 71
Registriert: 26. Mär 2022 18:15
Answers: 0

Re: Kombination von DSL und Javascript Scripts in Blockly

Beitrag von neuling10 »

Danke @Harka für den Tipp! Der Umbau auf JavaScript funktioniert, werde das in meine Rules einbauen und auf DSL Rules verzichten. Somit kann ich alle meine Anwendungsfälle vollständig in Blockly abbilden.

Ich habe nun einen Fehler im Log gefunden, vielleicht wisst ihr was das Problem sein könnte:

Code: Alles auswählen

2025-03-17 20:58:38.063 [ERROR] [.handler.AbstractScriptModuleHandler] - Script execution of rule with UID 'a75922f770' failed: org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (get) on org.openhab.binding.enigma2.internal.actions.Enigma2Actions@b32902b failed due to: Unknown identifier: get
Wenn ich die Rule speichere oder disable und enable, funktioniert sie einmal. Wenn sie kurz danach nochmals laufen soll, wird die Rule bis zum Blockly inline script durchlaufen. Danach folgt der obige Eintrag im Logfile :(

Das entsprechende inline script:

Code: Alles auswählen

var actions = actions.get("enigma2","enigma2:device:xxxxxxxx");
actions.sendInfo("Das ist ein Test",30);
Ich habe nur JavaScript Scripting installiert. JavaScript Scripting (Nashorn) ist deinstalliert. Eine Neu-Installation von JavaScript Scripting brachte keine Änderung.

Bei der zweiten Rule kommt ebenso eine Fehlermeldung, sobald diese ein zweites Mal aufgerufen wird:

Code: Alles auswählen

2025-03-17 21:18:18.116 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule '24b2d5396f': 
org.graalvm.polyglot.PolyglotException: java.lang.NoClassDefFoundError: com/oracle/truffle/js/runtime/util/IteratorUtil
Dies betrifft unter anderem:

Code: Alles auswählen

var thingMgr = osgi.getService('org.openhab.core.thing.ThingManager'); 
var ThingUID = Java.type('org.openhab.core.thing.ThingUID'); 
thingMgr.setEnabled(new ThingUID('ipcamera:generic:xxxxxxxx'), true);
Und noch diese:

Code: Alles auswählen

2025-03-17 21:18:20.147 [ERROR] [e.automation.internal.RuleEngineImpl] - Failed to execute rule 'bf713277e4': 
org.graalvm.polyglot.PolyglotException: java.lang.NoClassDefFoundError: com/oracle/truffle/js/runtime/util/IteratorUtil
bei:

Code: Alles auswählen

(createTimer(now.plusSeconds(11)) [|

executeCommandLine("wget", "http://192.168.30.100:8080/ipcamera/xxxxxx/ipcamera.jpg", "-O",  "/tmp/" + "Haustuer.jpg")

val actions = getActions("pushover", "pushover:pushover-account:xxxxxxxx")
actions.sendAttachmentMessage("Klingel Wohnungstür", "openHAB", "/tmp/Haustuer.jpg", "", Duration.ofHours(720)) 

                                   
                                   ])

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

Re: Kombination von DSL und Javascript Scripts in Blockly

Beitrag von Harka »

Moin,
kein Plan. Habe es gerade mit

Code: Alles auswählen

var thingMgr = osgi.getService('org.openhab.core.thing.ThingManager'); 
var ThingUID = Java.type('org.openhab.core.thing.ThingUID'); 
thingMgr.setEnabled(new ThingUID('astro:sun:local'), true);
getestet und kann Dein Fehler nicht reproduzieren. Wie Du ja auch selbst schon geschrieben hast, ist das Verhalten auch unlogisch. Ich würde es mit einem Neustart versuchen und hoffen ...

neuling10
Beiträge: 71
Registriert: 26. Mär 2022 18:15
Answers: 0

Re: Kombination von DSL und Javascript Scripts in Blockly

Beitrag von neuling10 »

Ich habs nun wieder zum Laufen gebracht :D

Es war nötig, in der Console des Docker Openhab Containers den Befehl

Code: Alles auswählen

apt update && apt dist-upgrade
auszuführen. Unter anderem wurde auch ein Java 17 Paket aktualisiert.

Antworten