Guten Tag zusammen,
ich habe gerade Pech beim Denken und mir fällt auch nichts mehr ein, wonach ich hier im Forum suchen soll. Vielleicht kann mir jemand weiterhelfen.
Ich möchte mit den exec-binding z. B. ein Script per Switch anstoßen, bekomme es aber überhaupt nicht hin, einen Switch zu konfigurieren, der den Befehl dann antriggert.
Für meinen Test habe ich ein Thing "Befehl" angelegt und dort als Befehl "/usr/bin/logger EXEC-BINDING-TEST" eingetragen. In der exec.whitelist ist der Befehl natürlich auch eingetragen. Im Thing sind alle verfügbaren Channels, u. a. auch Run als Switch-Item verlinkt. Im Model kann ich den Befehl mit allen Channels adden, jedoch lässt sich der Run-Channel in der Openhab 3 UI gar nicht bedienen (kein Button). Mir gelingt es also nicht, den Befehl über einen Switch manuell zu starten. - Wenn ich im Thing "Befehl" das Intervall auf z. B. 15 setze, wird zuverlässig alle 15 Sekunden ins Log geschrieben, das funktioniert.
Irgendwas fehlt... nur was?
Vorab Danke und VG
Michael
Verständnisproblem exec-binding
-
- Beiträge: 2
- Registriert: 27. Dez 2021 14:44
Re: Verständnisproblem exec-binding
Hallo,
ich beschreibe einfach mal alles was ich gemacht habe, damit die Scripte per Exec-Binding ausgeführt werden.
1. Batch oder Shell-Script erstellen, dieses in die whitelist eintragen
2. Unter Linux das Script als User "openhab" (falls Du ihn nicht umbennat hast) zu Fuß zum Laufen bringen, bis es das macht was es soll
3. Exec-Bindung unter OH3 installieren
4. Exec-Thing für Dein Script mit eindeutigem Namen erstellen, das Thing hat nun 5 Channels (Rückgabewert, Eingabewert, Rückgabestatus, Ausführung, Zeitpunkt d.l.Ausf.)
5. im Thing trägst Du unter Befehl z.B. "/etc/openhab/misc/oh3_myScript.sh %2$s" (ohne "") ein, einen Timeout würde ich je nach Scriptlaufzeit setzen, damit im Falle einer Endlosschleife oder ähnlichem, OH das Script abbricht
6. %2$s brauchst Du, falls Du Startargumente, also den Eingabewert übergeben willst, es geht nur 1 Argument, brauchst Du mehrere Args musst Du diese als 1 String übergeben und im Script ggf. wieder splitten
7. erstelle 1 neues String-Item (Name z.B. Shell_Request) für den Eingabewert (Startargs) und verknüpfe dies mit dem Channel "Eingabewert"
8. erstelle 1 neues String-Item für den Rückgabewert (Name z.B. Shell_Response) und verknüpfe dies mit dem Channel "Rückgabewert"
9. erstelle 1 neues Switch-Item für den ScriptStart (Name z.B. Shell_Starter) und verknüpfe die mit dem Channel "Ausführung"
10. per sendCommand an das String-Item "Shell_Request" Deinen Startargumentstring senden, Achtung: zum String gehören eigene Hochkomma, damit der String im Script auch ankommt
11. Switch-Item Shell_Start mit sendCommand auf ON setzen, das Script wird jetzt von OH gestartet
12. ist das Script durch, wird das Switch-Item durch OH wieder auf OFF gesetzt
13. im String-Item "Shell_Response" steht dann der Wert der über das Script zurückgegeben wurde. Zurückgegben wird übrigens alles was auf einer Console ausgeben würde. Alternativ könnte man auch den Rückgabestatus vewenden, welcher im Script mit "exit [0-255]" zurückgegben werden kann, kommt auf die Anforderungen an das Script an.
Falls Du weder Eingabe- noch Rückgabewerte brauchst, sondern einfach nur ein Script laufen lassen willst, reicht das Switch-Item völlig aus und Du kannst die Request und Response String-Items weglassen.
Ob man das Switch-Item weglassen kann und als Switch direkt über die MainUI (per CommandSend den Exec-Channel "Ausführung") verwenden kann, weiß ich nicht. Aufgrund der "System-Sauberkeit" würde ich immer das Switch-Item dazwischen schalten.
Ich hoffe, dass ich nichts vergessen habe. Vielleicht geht das ein oder andere auch einfacher, meine Lösung funktioniert zumindest prima und bestimmt führen viele Wege nach Rom.
Gruß
Andre
ich beschreibe einfach mal alles was ich gemacht habe, damit die Scripte per Exec-Binding ausgeführt werden.
1. Batch oder Shell-Script erstellen, dieses in die whitelist eintragen
2. Unter Linux das Script als User "openhab" (falls Du ihn nicht umbennat hast) zu Fuß zum Laufen bringen, bis es das macht was es soll
3. Exec-Bindung unter OH3 installieren
4. Exec-Thing für Dein Script mit eindeutigem Namen erstellen, das Thing hat nun 5 Channels (Rückgabewert, Eingabewert, Rückgabestatus, Ausführung, Zeitpunkt d.l.Ausf.)
5. im Thing trägst Du unter Befehl z.B. "/etc/openhab/misc/oh3_myScript.sh %2$s" (ohne "") ein, einen Timeout würde ich je nach Scriptlaufzeit setzen, damit im Falle einer Endlosschleife oder ähnlichem, OH das Script abbricht
6. %2$s brauchst Du, falls Du Startargumente, also den Eingabewert übergeben willst, es geht nur 1 Argument, brauchst Du mehrere Args musst Du diese als 1 String übergeben und im Script ggf. wieder splitten
7. erstelle 1 neues String-Item (Name z.B. Shell_Request) für den Eingabewert (Startargs) und verknüpfe dies mit dem Channel "Eingabewert"
8. erstelle 1 neues String-Item für den Rückgabewert (Name z.B. Shell_Response) und verknüpfe dies mit dem Channel "Rückgabewert"
9. erstelle 1 neues Switch-Item für den ScriptStart (Name z.B. Shell_Starter) und verknüpfe die mit dem Channel "Ausführung"
10. per sendCommand an das String-Item "Shell_Request" Deinen Startargumentstring senden, Achtung: zum String gehören eigene Hochkomma, damit der String im Script auch ankommt
11. Switch-Item Shell_Start mit sendCommand auf ON setzen, das Script wird jetzt von OH gestartet
12. ist das Script durch, wird das Switch-Item durch OH wieder auf OFF gesetzt
13. im String-Item "Shell_Response" steht dann der Wert der über das Script zurückgegeben wurde. Zurückgegben wird übrigens alles was auf einer Console ausgeben würde. Alternativ könnte man auch den Rückgabestatus vewenden, welcher im Script mit "exit [0-255]" zurückgegben werden kann, kommt auf die Anforderungen an das Script an.
Falls Du weder Eingabe- noch Rückgabewerte brauchst, sondern einfach nur ein Script laufen lassen willst, reicht das Switch-Item völlig aus und Du kannst die Request und Response String-Items weglassen.
Ob man das Switch-Item weglassen kann und als Switch direkt über die MainUI (per CommandSend den Exec-Channel "Ausführung") verwenden kann, weiß ich nicht. Aufgrund der "System-Sauberkeit" würde ich immer das Switch-Item dazwischen schalten.
Ich hoffe, dass ich nichts vergessen habe. Vielleicht geht das ein oder andere auch einfacher, meine Lösung funktioniert zumindest prima und bestimmt führen viele Wege nach Rom.
Gruß
Andre
-
- Beiträge: 2
- Registriert: 27. Dez 2021 12:33
Re: Verständnisproblem exec-binding
Hallo Andre,
danke für die ausführliche Antwort. Ich kann jetzt ziemlich genau sagen, an welchen Stellen ich ein Problem damit habe. Nämlich mit Punkt 9 und Punkt 11. Vermutlich habe ich da grundsätzliche Dinge in OH3 noch nicht verstanden und muss mich damit erstmal beschäftigen.
VG Michael
danke für die ausführliche Antwort. Ich kann jetzt ziemlich genau sagen, an welchen Stellen ich ein Problem damit habe. Nämlich mit Punkt 9 und Punkt 11. Vermutlich habe ich da grundsätzliche Dinge in OH3 noch nicht verstanden und muss mich damit erstmal beschäftigen.
VG Michael