Seite 1 von 1
OH3 vorhandenes Script als Action auswählen
Verfasst: 4. Aug 2022 17:49
von krause
Hallo zusammen,
ich habe ein kleines Script geschrieben, welches ich nun als Action mehreren Rules zuordnen will. Wenn ich nun bei "Add Action" "Run Script" auswähle, kann ich zwar ein neues Script eingeben, aber kein vorhandenes auswählen. Geht das überhaupt? Oder was mache ich falsch?
Ich verwende OH 3.3.0.
Danke im Voraus.
Krause
Re: OH3 vorhandenes Script als Action auswählen
Verfasst: 4. Aug 2022 23:17
von udo1toni
Was meinst Du mit Script?
Re: OH3 vorhandenes Script als Action auswählen
Verfasst: 5. Aug 2022 17:23
von krause
Ich meine ein Script, was man unter Einstellungen>Scripts mit Javascript erstellen kann. Ich habe es aber inzwischen in einem anderen Forum gefunden. Unter "Run Script" muss dann im Script-Editor der folgende Code eingegeben werden. In der letzten Zeile erfolgt dann letztlich der Aufruf des Scripts:
Code: Alles auswählen
var FrameworkUtil = Java.type("org.osgi.framework.FrameworkUtil");
var _bundle = FrameworkUtil.getBundle(scriptExtension.class);
var bundle_context = _bundle.getBundleContext()
var classname = "org.openhab.core.automation.RuleManager"
var RuleManager_Ref = bundle_context.getServiceReference(classname);
var RuleManager = bundle_context.getService(RuleManager_Ref);
RuleManager.runNow("MeinScript");
Ich hatte eine Auswahlbox mit meinen vorhandenen Scripten erwartet. So einfach war es dann aber nicht.
Krause
Re: OH3 vorhandenes Script als Action auswählen
Verfasst: 5. Aug 2022 19:16
von udo1toni
Ja

die Strafe für das DSL Shaming.
In der DSL schreibe ich
callScript("mein.script") (aus dem Gedächtnis... hab ich schon ewig nicht mehr verwendet, weil die DSL viel effizientere Möglichkeiten bietet...)

Re: OH3 vorhandenes Script als Action auswählen
Verfasst: 6. Aug 2022 11:29
von Harka
nu ja, Blockly schafft das auch mit einem
Block
Aber ja, DSL hat eine reihe Vorteile. Wenn man sich damit auseinander setzen möchte , viel aus dem Öffi übernehmen oder dort weitergeben möchte, ....
Re: OH3 vorhandenes Script als Action auswählen
Verfasst: 8. Aug 2022 17:58
von krause
udo1toni hat geschrieben: ↑5. Aug 2022 19:16
Ja

die Strafe für das DSL Shaming.
Ich habe halt dein Post vom 14.02.2021 "OH3 Rule DSL vs. javascript" gelesen.
Krause
Re: OH3 vorhandenes Script als Action auswählen
Verfasst: 8. Aug 2022 21:03
von udo1toni
Da muss ich auf Adenauer verweisen... "Was interessiert mich mein Geschwätz von gestern."
Wobei dennoch vieles von dem geschriebenen Bestand hat. Was aber die Rules DSL betrifft, ist es tatsächlich momentan so, dass es die einzige voll unterstützte Text Sprache ist. ECMA Scripts sind lediglich dabei, weil Blockly ECMA Code erzeugt. In Blockly gibt es schon sehr viele Blöcke, die teilwesie auch hier entstanden sind, aber manche Dinge kann man eben noch nicht gut in Blockly abbilden, und wenn ich erst einen Block entwickeln muss, damit ich in Blockly das Problem lösen kann, ist das irgendwie unbefriedigend.
Aus entwicklernahen Kreisen habe ich gehört, dass die DSL nicht mehr deprecated ist, was dann bedeutet, dass sie mindestens noch bis incl. Version 4 weiter gepflegt wird. Es gibt jetzt ja auch keinen dringenden Grund mehr, sie abzuschaffen, nachdem sie problemlos in openHAB3 integriert werden konnte.
Da es bisher noch keine richtigen Helper Scripts gibt (wie unter OH2 für Jython), ist ECMA an vielen Stellen deutlich unkomfortabler als die DSL. Und natürlich kommt es auch sehr darauf an, welche Funktionen man nutzen will. In der DSL hat man keinen direkten Zugriff auf die Metadaten der Items, das ist ein echtes Manko. Dafür kann man direkt auf die Items zugreifen, ohne Umweg über die Item Registry. Auch gibt es in ECMA keine globalen Variablen, es besteht einzig die Möglichkeit, die Werte aus dem letzten Lauf der Rule wiederherzustellen. Damit kann man zwar viele Dinge erschlagen, aber eben nicht alles (z.B. ruleübergreifenden Zugriff auf Timer), so dass man erst andere Lösungsstrategien entwickeln muss.
Man wird also in vielen Fällen mit einer der beiden Sprachen deutlich eleganter zu einer Lösung kommen, als mit der anderen, im Zweifel ist es vielleicht das beste, beide Sprachen zumindest ansatzweise zu verstehen.
Auf keinen Fall sollte man jetzt alle Rules neu schreiben, nur, weil irgendwann mal vielleicht der Vorhang für die DSL fällt, denn bis dahin wird noch viel Wasser den Rhein herunter fließen, selbst bei Dürre im Sommer...