Script aus Script in javascript aufrufen
Script aus Script in javascript aufrufen
Hallo liebes Forum!
Ich versuche schon seit einiger Zeit herauszufinden, wie ich aus einem script (javascript nicht DSL) ein anderes script aufrufen kann.
Hintergrund ist, dass ich z. B. Einen Mailtext in Items ablege und dann die Scripte zum Versenden von mails an mich oder wen auch immer, Scripte zum Versand von WhatsApp mit dem jeweiligen Text direkt aufrufen möchte.
Danke im Voraus.
Viele Grüße
Frank
Ich versuche schon seit einiger Zeit herauszufinden, wie ich aus einem script (javascript nicht DSL) ein anderes script aufrufen kann.
Hintergrund ist, dass ich z. B. Einen Mailtext in Items ablege und dann die Scripte zum Versenden von mails an mich oder wen auch immer, Scripte zum Versand von WhatsApp mit dem jeweiligen Text direkt aufrufen möchte.
Danke im Voraus.
Viele Grüße
Frank
-
- Beiträge: 489
- Registriert: 30. Apr 2021 13:13
Re: Script aus Script in javascript aufrufen
Auch wieder mit Blockly erzeugt.
Unten beim Platzhalter 1234567890 kommt die ID Deines Script rein. Diese steht unter dem Namen und ist Standartmäßig 10stellig.
Edit: lässt sich aber noch anders lösen. Ich habe z.B eine Regel für das Textitem. Wenn dort was ändert wird nach then ungleich „“ dann sende per Dienst und anschließend wird der Wert wieder.auf „“ gesetzt.
Unten beim Platzhalter 1234567890 kommt die ID Deines Script rein. Diese steht unter dem Namen und ist Standartmäßig 10stellig.
Code: Alles auswählen
function addFrameworkService (serviceClass) {
var bundleContext = Java.type('org.osgi.framework.FrameworkUtil').getBundle(scriptExtension.class).getBundleContext();
var serviceReference = bundleContext.getServiceReference(serviceClass);
return bundleContext.getService(serviceReference);
}
var ruleManager = addFrameworkService('org.openhab.core.automation.RuleManager');
function convertDictionaryToHashMap (dict) {
if (!dict || dict.length === 0) return null;
var map = new java.util.HashMap();
Object.keys(dict).forEach(function (key) {
map.put(key, dict[key]);
});
return map;
}
ruleManager.runNow('1234567890', true, convertDictionaryToHashMap({}));
Re: Script aus Script in javascript aufrufen
Hi Harka!
Danke. Werde ich mal ausprobieren.
Ich hatte es mit diesem Blockly ausprobiert:
var scriptExecution = Java.type('org.openhab.core.model.script.actions.ScriptExecution');
scriptExecution.callScript('scriptname.script');
Der führt zu nichts.
Ich habe auch mal geschaut: im openhab-config-Ordner unter Scripts sind die Script aus openhab3 auch gar nicht gespeichert.
Auch die Rules sind nicht im Rule-Ordner. Speicher openhab3 nichts in den Verzeichnissen? Es sind auch keine Items oder things im Ordner. Es sind nur die mappingdateien drin.
Gruß
Frank
Danke. Werde ich mal ausprobieren.
Ich hatte es mit diesem Blockly ausprobiert:
var scriptExecution = Java.type('org.openhab.core.model.script.actions.ScriptExecution');
scriptExecution.callScript('scriptname.script');
Der führt zu nichts.
Ich habe auch mal geschaut: im openhab-config-Ordner unter Scripts sind die Script aus openhab3 auch gar nicht gespeichert.
Auch die Rules sind nicht im Rule-Ordner. Speicher openhab3 nichts in den Verzeichnissen? Es sind auch keine Items oder things im Ordner. Es sind nur die mappingdateien drin.
Gruß
Frank
- udo1toni
- Beiträge: 15248
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Script aus Script in javascript aufrufen
Der $OPENHAB_CONF/scripts/ Ordner ist exklusiv für DSL Scripte, die Dateien müssen die Endung .script aufweisen.
Bei der Verwendung dieser Scripte muss der Name ohne Erweiterung angegeben werden, also z.B. callScript("holiday") führt das Script holiday.script aus, welches, wie gesagt, zwingend als reines DSL Script geschrieben sein muss.
Der scripts Ordner stammt noch aus der openHAB1-Ära, die Funktion ist inzwischen eher irrelevant, da man keine Variablen übergeben kann. Ein Script führt immer die selben Befehle aus. Man kann die Befehle auch locker direkt in der DSL Rule hinschreiben. Wird identischer Code in mehreren Rules gebraucht (was dann so ein Script sinnvoll machen würde), so ist meist beim Schreiben der Rules Luft nach oben
Der Ordner ist mutmaßlich vor allem aus historischen Gründen noch immer vorhanden.
Ach so... ganz grundsätzlich: openHAB selbst speichert nie irgendwas im conf-Zweig. Dieser Zweig ist exklusiv für den Anwender, der dort das System komplett konfigurieren kann, ohne die UI zu nutzen.
Bei der Verwendung dieser Scripte muss der Name ohne Erweiterung angegeben werden, also z.B. callScript("holiday") führt das Script holiday.script aus, welches, wie gesagt, zwingend als reines DSL Script geschrieben sein muss.
Der scripts Ordner stammt noch aus der openHAB1-Ära, die Funktion ist inzwischen eher irrelevant, da man keine Variablen übergeben kann. Ein Script führt immer die selben Befehle aus. Man kann die Befehle auch locker direkt in der DSL Rule hinschreiben. Wird identischer Code in mehreren Rules gebraucht (was dann so ein Script sinnvoll machen würde), so ist meist beim Schreiben der Rules Luft nach oben

Der Ordner ist mutmaßlich vor allem aus historischen Gründen noch immer vorhanden.
Ach so... ganz grundsätzlich: openHAB selbst speichert nie irgendwas im conf-Zweig. Dieser Zweig ist exklusiv für den Anwender, der dort das System komplett konfigurieren kann, ohne die UI zu nutzen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
Re: Script aus Script in javascript aufrufen
Hi udo1toni!
Vielen Dank für die Info.
Ok. Damit werde ich dann den Script-Ordner mal vergessen. Macht für mich keinen Sinn, da ich keine DSL-Scripte schreiben kann.
Meine aktuellen Scripte in den Rules sind halt in javascript, weil ich das aus der Ableitung aus Blockly heraus habe. Blockly übersetzt ja nur in javascript, aber nicht nach DSL. Daher werde ich am Anfang wohl bei Javasript bleiben, bis ich mal so viel Zeit habe, dass ich mir auch noch DSL antue. Wird wohl bis zum Ruhestand dauern....
Also für mich heißt es: die Struktur macht nur Sinn für die map.dateien... und für euch, die aus der alten Welt kommen.
Neue User, die mit openhab3 angefangen haben, brauchen daraus gar nichts - ausser man will es unbedingt.
Ganz lieben Dank.
Dann muss ich mir mal ein Forum suchen, dass sich hauptsächlich mit openhab3 beschäftigt, damit ich mein Smarthome sauber von Livisi nach openhab3 bekomme.
Viele Grüße und allen einen guten Wochenstart
Frank
Vielen Dank für die Info.
Ok. Damit werde ich dann den Script-Ordner mal vergessen. Macht für mich keinen Sinn, da ich keine DSL-Scripte schreiben kann.
Meine aktuellen Scripte in den Rules sind halt in javascript, weil ich das aus der Ableitung aus Blockly heraus habe. Blockly übersetzt ja nur in javascript, aber nicht nach DSL. Daher werde ich am Anfang wohl bei Javasript bleiben, bis ich mal so viel Zeit habe, dass ich mir auch noch DSL antue. Wird wohl bis zum Ruhestand dauern....

Also für mich heißt es: die Struktur macht nur Sinn für die map.dateien... und für euch, die aus der alten Welt kommen.
Neue User, die mit openhab3 angefangen haben, brauchen daraus gar nichts - ausser man will es unbedingt.
Ganz lieben Dank.
Dann muss ich mir mal ein Forum suchen, dass sich hauptsächlich mit openhab3 beschäftigt, damit ich mein Smarthome sauber von Livisi nach openhab3 bekomme.
Viele Grüße und allen einen guten Wochenstart
Frank
- udo1toni
- Beiträge: 15248
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Script aus Script in javascript aufrufen
Lass Dich bitte nicht davon vertreiben, dass hier vor allem DSL Code geteilt wird und über Textdateien konfiguriert wird!
Zum Einen gibt es auch hier massig Leute, die hauptsächlich über die UI arbeiten, zum Anderen versuchen wir eigentlich immer, auch Beispiele umzuschreiben, um sie zu 100 % Ui-nutzbar zu machen.
Die Ausgangssituation ist aber halt die gute alte DSL
auch weil man den Code so einfach teilen kann. Das trifft im Besonderen auch auf die Items zu, welche leider keine Code Ansicht haben. Das heißt, Du musst für ein einzelnes Item teilweise mehrere Screenshots anhängen, um immer noch nur einen Teil der Konfiguration zu zeigen. Ich kann in einem kleinen Textblock locker hundert Items oder mehr vollständig zeigen.
Bei Things sieht es etwas besser aus, aber auch da ist es so, dass ich die Code-Ansicht für Bridge und zugeordnete Things zwingend getrennt habe. Meine Textdatei enthält hingegen alle notwendigen Informationen an einer Stelle.
Zum Einen gibt es auch hier massig Leute, die hauptsächlich über die UI arbeiten, zum Anderen versuchen wir eigentlich immer, auch Beispiele umzuschreiben, um sie zu 100 % Ui-nutzbar zu machen.
Die Ausgangssituation ist aber halt die gute alte DSL

Bei Things sieht es etwas besser aus, aber auch da ist es so, dass ich die Code-Ansicht für Bridge und zugeordnete Things zwingend getrennt habe. Meine Textdatei enthält hingegen alle notwendigen Informationen an einer Stelle.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
Re: Script aus Script in javascript aufrufen
Leider bringt ihr OH3-Anfänger damit echt an den Rand der Verzweiflung, weil die euch nicht folgen können.udo1toni hat geschrieben: ↑9. Jan 2023 14:48 Lass Dich bitte nicht davon vertreiben, dass hier vor allem DSL Code geteilt wird und über Textdateien konfiguriert wird!
Zum Einen gibt es auch hier massig Leute, die hauptsächlich über die UI arbeiten, zum Anderen versuchen wir eigentlich immer, auch Beispiele umzuschreiben, um sie zu 100 % Ui-nutzbar zu machen.
Die Ausgangssituation ist aber halt die gute alte DSLauch weil man den Code so einfach teilen kann. Das trifft im Besonderen auch auf die Items zu, welche leider keine Code Ansicht haben. Das heißt, Du musst für ein einzelnes Item teilweise mehrere Screenshots anhängen, um immer noch nur einen Teil der Konfiguration zu zeigen. Ich kann in einem kleinen Textblock locker hundert Items oder mehr vollständig zeigen.
Bei Things sieht es etwas besser aus, aber auch da ist es so, dass ich die Code-Ansicht für Bridge und zugeordnete Things zwingend getrennt habe. Meine Textdatei enthält hingegen alle notwendigen Informationen an einer Stelle.
Und was meinst du damit, dass man einen Code einfacher teilen kann? Mich verunsichert ihr damit nur, weil ich nicht weiss, wo ich den Kram finde und kann Euer wissen nicht transferieren. Das ist der Grund, warum ich euch nicht verstehe. Auch wenn deine Textdatei viele Informationen beinhaltet die andere lesen können, ich kann damit nichts anfangen, weil ich diese infos nicht in mein OH3 reinbekomme.
Re: Script aus Script in javascript aufrufen
Auch mein Versuch, eine Rule in VSC zu schreiben, dass ich diese auch in OH3 sehen kann, funktionierte nicht.
Irgendwas stimmt da nicht.
Aber das macht nichts. Wenn bei euch alles läuft, ist es gut.
Versteht aber auch, dass es bei mir nicht so läuft wie bei euch.
Ich finde halt den Schalter noch nicht, wie man eine DSL-Rule von VSC nach openhab bekommt.
Für mich ist VSC noch immer ein Texteditor weil die Anbindung an OH3 nicht funktioniert.
Ich kann nur Texte schreiben und die abspeichern. Dafür kann ich aber auch Word oder alles andere verwenden.
Einzig für das Erstellen der Map-Files ist VSC ist es für mich sinnvoll. Für den Rest bin ich einfach zu blöd. Damit muss man sich halt abfinden und
damit kann ich auch gut leben.
Irgendwas stimmt da nicht.
Aber das macht nichts. Wenn bei euch alles läuft, ist es gut.
Versteht aber auch, dass es bei mir nicht so läuft wie bei euch.
Ich finde halt den Schalter noch nicht, wie man eine DSL-Rule von VSC nach openhab bekommt.
Für mich ist VSC noch immer ein Texteditor weil die Anbindung an OH3 nicht funktioniert.
Ich kann nur Texte schreiben und die abspeichern. Dafür kann ich aber auch Word oder alles andere verwenden.
Einzig für das Erstellen der Map-Files ist VSC ist es für mich sinnvoll. Für den Rest bin ich einfach zu blöd. Damit muss man sich halt abfinden und
damit kann ich auch gut leben.

-
- Beiträge: 489
- Registriert: 30. Apr 2021 13:13
Re: Script aus Script in javascript aufrufen
Mmmh, in Blockly gibt es 2 Möglichkeiten externe Scripte zu starten. Die obere, mit der Du Dich rumärgerst, ist für "alte" DSL-Scripte, welche in dem betreffendem Verzeichnis warten. Die darunter habe ich genannt. Den JS-Code kann man bestimmt noch um einiges einkürzen. Der original Code enthält ja die Option Argumente mitzuschicken was Du aber nicht brauchst.
Manchmal kann man das Problem aber auch anders lösen. Wie oben angemerkt habe ich z.B. eine eigene Regel für das Item in dem ich mein Text ablege. Wenn sich dort was ändert verschickt sich die Post von selbst und ich muss mich in den anderen Scripten nicht mehr darum kümmern.
Manchmal kann man das Problem aber auch anders lösen. Wie oben angemerkt habe ich z.B. eine eigene Regel für das Item in dem ich mein Text ablege. Wenn sich dort was ändert verschickt sich die Post von selbst und ich muss mich in den anderen Scripten nicht mehr darum kümmern.
Re: Script aus Script in javascript aufrufen
Danke Harka!!!!
Udo1Toni hatte schon geschrieben, dass der Aufruf von Skripten nur was für menschen ist, die DSL Scripte haben und diese auch nur extern geschrieben haben und im Ordner liegen.
Da es bei mir ja keinen Sinn macht, die Skripte extern zu schreiben, da man über die UI das viel einfacher machen kann und auch funktioniert wäre es nicht gut, wenn ich skripte nur deswegen dort schreibe und ablege um sie in der UI mit einem Javascript aufzurufen. Das hat was vom Antrag auf ein Antragsformular.
Neee. Da finde ich deine andere Variante charmanter. Ein item bauen, in dem ich Text reinschreibe. Aber das habe ich ja eh schon.
Probleme ist, dass ich meine Frau nicht mit allen Informationen aus dem OH zubomben will.
Also fülle ich das Item und wollte sagen: call Scriptfürmich und es kommt die info zu mir oder Call scriptfürmich und call scriptfürmeineFrau und wir bekommen beide die Info. Dass man das mit diesem Tool so umständlich bauen muss, ist schade. Hatte mir eine intelligentere und elegantere Lösung vorgestellt, werde aber auch mit dieser umständlichen Programmierung leben können.
Wenn es (bei mir) nicht einfacher geht, dann halt nicht.
Aber danke für den Hinweis. Finde ich gut und sehr konstruktiv.
Lieben Dank.
Udo1Toni hatte schon geschrieben, dass der Aufruf von Skripten nur was für menschen ist, die DSL Scripte haben und diese auch nur extern geschrieben haben und im Ordner liegen.
Da es bei mir ja keinen Sinn macht, die Skripte extern zu schreiben, da man über die UI das viel einfacher machen kann und auch funktioniert wäre es nicht gut, wenn ich skripte nur deswegen dort schreibe und ablege um sie in der UI mit einem Javascript aufzurufen. Das hat was vom Antrag auf ein Antragsformular.

Neee. Da finde ich deine andere Variante charmanter. Ein item bauen, in dem ich Text reinschreibe. Aber das habe ich ja eh schon.
Probleme ist, dass ich meine Frau nicht mit allen Informationen aus dem OH zubomben will.
Also fülle ich das Item und wollte sagen: call Scriptfürmich und es kommt die info zu mir oder Call scriptfürmich und call scriptfürmeineFrau und wir bekommen beide die Info. Dass man das mit diesem Tool so umständlich bauen muss, ist schade. Hatte mir eine intelligentere und elegantere Lösung vorgestellt, werde aber auch mit dieser umständlichen Programmierung leben können.
Wenn es (bei mir) nicht einfacher geht, dann halt nicht.
Aber danke für den Hinweis. Finde ich gut und sehr konstruktiv.
Lieben Dank.