Hallo und Gruß in die Runde.
Habe mir vor kurzem, zusätzlich zu dem schon einige Jahre laufenden RasperryPi3, einen RP4 8GB im Argon ONE M.2 Case mit SSD gekauft und Openhab3 neu ausgesetzt. Läuft soweit auch super schnell, bin gerade am einrichten. ioBroker läuft auch drauf und kommuniziert mit einigen Homekit und Zigbee Geräten. Harmony Hub wird gesteuert, Fritzbox Dect Heizungsventile, diverse Lampen, Schaltaktoren, Shelly, Alexas ...
Nun wollte ich eigentlich weiter meine ganzen 433Mhz Steckdosen nicht über das openhabremote Binding, sondern lieber direkt ohne openhab2.5 des alten Rasperry steuern.
Dazu habe ich auf dem alten des SSH Zugang ohne Passworteingabe über ssh keygen eingerichtet und ich kann vom RP4 in der Konsole ohne Passworteingabe zu Beispief den LED Streifen über sudo /usr/bin/ssh pi@raspberrypi sudo /opt/raspberry-remote/send 11111 2 1 schalten.
Dazu dachte ich eigentlich das exec Bindung, wie auf dem alten RP3, verwenden zu können.
Leider bekomme ich die Einrichtung nicht hin. https://www.openhab.org/addons/bindings/exec/
Am liebsten wäre mir ein Switch, der entweder /opt/raspberry-remote/send 11111 2 1 oder /opt/raspberry-remote/send 11111 2 0 schaltet.
Auf dem RP3 mach dies ne Rule.
Habe auch die Möglichkeit ein script auszulösen, welches den Befehl ausführt, in openhab/scripts/streifen.sh. Aus der RP4 Konsole schaltetet es, aber in das Exec bekomme ich es weder als Model noch als Point zum laufen.
Meines Verständnisses nach, muss hier für jeden Schaltvorgang ein extra Thing angelegt werden?!? Über das UI angelegt und bei Befehl diese Befehle "sudo", "/usr/bin/ssh pi@192.168.2.62 sudo /opt/raspberry-remote/send 11111 2 0" oder das Script eingetragen , funktioniert nicht.
Benötige hier ein kleines Toutorial, wie die neue Version vom exec Binding konfiguriert werden muss. Hoffe hier kennt schon sich jemand aus, hab schon ne Menge Zeit investiert - ohne Erfolg.
Viele Grüße und Dank im Voraus,
Frank
Openhab3 Exec Binding einrichten
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Openhab3 Exec Binding einrichten
Du kannst das über das exec Binding lösen, aber so besonders toll ist das nicht.
Das exec Binding kann einen Befehl aufrufen und einen Parameter übergeben. Dieser Parameter ist ein String.
Ich möchte empfehlen, dass Du eine Batchdatei schreibst, die den eigentlichen Aufruf erledigt. Nicht nur kannst Du damit den Aufruf vereinfachen, Du kannst in dieser Batchdatei auch zeitweise (also zum Testen) die Ausgabe des übergebenen Parameters veranlassen, z.B. indem Du ein einbaust, welches dann den Inhalt des Parameters 1 in die Datei /tmp/batchlog.txt schreibt.
Grundsätzlich legst Du ein Thing pro aufgerufenem Befehl an. Das Exec Thing hat einen genau festgelegten Satz von Channels, das sind input, output, run, exit und lastexecution.
lastexecution gibt einen Zeitstempel aus, wann der Befehl zuletzt ausgeführt wurde. exit enthält den Rückgabecode der letzten Ausführung (gewöhnlich nur im Fehlerfall von 0 abweichend), run startet die Ausführung und zeigt an, ob der Befehl gerade ausgeführt wird. output enthält die Ausgabe des Aufrufs und input setzt den übergebenen Parameter. Je nachdem, wie das Thing konfiguriert ist, wird der Befehl automatisch ausgeführt, wenn man den Channel input setzt oder auch zyklisch. Alternativ muss run auf ON gesetzt werden, damit der Befehl ausgeführt wird.
Damit der Befehl überhaupt ausgeführt wird, muss der exakte Aufruf des Befehls in der whitelist eingetragen sein. Es kommt immer wieder vor, dass die whitelist nicht auf Anhieb übernommen wird. Häufige Fehler: Der Aufruf ist nicht exakt angegeben; Es steht ein Leerzeichen am Anfang; Rechte passen nicht.
Es kann helfen, openHAB neu zu starten, damit die whitelist korrekt geladen wird.
Was die Rechte betrifft, so ist es wichtig, daran zu denken, dass openHAB gewöhnlich mit dem User openhab läuft. Das ist NICHT der User, mit dem man sich auf dem Rechner anmeldet, der openHAB ausführt. Man kann sich NICHT mit dem User openhab anmelden (na ja, man kann schon, aber eben nicht so ohne weiteres, man muss schon wissen, wie...) Das ist Teil des Sicherheitskonzepts, sollte also auch nicht geändert werden. Speziell die Sache mit sudo ist nicht ganz ohne im Zusammenhang mit dem User openhab.
Ich habe eingangs geschrieben, dass ich exec für eine unglückliche Lösung halte. Sinnvoller wäre es m.E., die Software zum Senden der Befehle dahingehend anzupassen, dass sie z.B. über mqtt gesteuert werden kann. Es läuft dann ein Daemon auf dem entfernten Raspberry und lauscht auf Befehle, die Du einfach über mqtt senden kannst.
Das exec Binding kann einen Befehl aufrufen und einen Parameter übergeben. Dieser Parameter ist ein String.
Ich möchte empfehlen, dass Du eine Batchdatei schreibst, die den eigentlichen Aufruf erledigt. Nicht nur kannst Du damit den Aufruf vereinfachen, Du kannst in dieser Batchdatei auch zeitweise (also zum Testen) die Ausgabe des übergebenen Parameters veranlassen, z.B. indem Du ein
Code: Alles auswählen
echo ${1} > /tmp/batchlog.txt
Grundsätzlich legst Du ein Thing pro aufgerufenem Befehl an. Das Exec Thing hat einen genau festgelegten Satz von Channels, das sind input, output, run, exit und lastexecution.
lastexecution gibt einen Zeitstempel aus, wann der Befehl zuletzt ausgeführt wurde. exit enthält den Rückgabecode der letzten Ausführung (gewöhnlich nur im Fehlerfall von 0 abweichend), run startet die Ausführung und zeigt an, ob der Befehl gerade ausgeführt wird. output enthält die Ausgabe des Aufrufs und input setzt den übergebenen Parameter. Je nachdem, wie das Thing konfiguriert ist, wird der Befehl automatisch ausgeführt, wenn man den Channel input setzt oder auch zyklisch. Alternativ muss run auf ON gesetzt werden, damit der Befehl ausgeführt wird.
Damit der Befehl überhaupt ausgeführt wird, muss der exakte Aufruf des Befehls in der whitelist eingetragen sein. Es kommt immer wieder vor, dass die whitelist nicht auf Anhieb übernommen wird. Häufige Fehler: Der Aufruf ist nicht exakt angegeben; Es steht ein Leerzeichen am Anfang; Rechte passen nicht.
Es kann helfen, openHAB neu zu starten, damit die whitelist korrekt geladen wird.
Was die Rechte betrifft, so ist es wichtig, daran zu denken, dass openHAB gewöhnlich mit dem User openhab läuft. Das ist NICHT der User, mit dem man sich auf dem Rechner anmeldet, der openHAB ausführt. Man kann sich NICHT mit dem User openhab anmelden (na ja, man kann schon, aber eben nicht so ohne weiteres, man muss schon wissen, wie...) Das ist Teil des Sicherheitskonzepts, sollte also auch nicht geändert werden. Speziell die Sache mit sudo ist nicht ganz ohne im Zusammenhang mit dem User openhab.
Ich habe eingangs geschrieben, dass ich exec für eine unglückliche Lösung halte. Sinnvoller wäre es m.E., die Software zum Senden der Befehle dahingehend anzupassen, dass sie z.B. über mqtt gesteuert werden kann. Es läuft dann ein Daemon auf dem entfernten Raspberry und lauscht auf Befehle, die Du einfach über mqtt senden kannst.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 2
- Registriert: 17. Feb 2021 14:24
Re: Openhab3 Exec Binding einrichten
Hallo udo1toni,
vielen Dank für die ausführliche Erläuterung.
Das hat mich auf eine Idee gebracht und statt mqtt läuft eh der ioBroker, der jetzt über den Linuxadapter die Befehle ausführt.
Bin zwar noch nicht dahinter gekommen, wie ich nur den Befehl zum senden hinterlege und nur die Codes für die einzelnen Schaltungen als Parameter übergebe, mit dem gesamten Code funktioniert es aber schon.
Muss da halt für jede Schaltung einen einzelnen eigenen Befehl anlegen, der bei Statusänderungen in openHAB3 ausgeführt wird. Habe dazu virtuelle Schalter in oH3 angelegt.
Gruß Frank
vielen Dank für die ausführliche Erläuterung.
Das hat mich auf eine Idee gebracht und statt mqtt läuft eh der ioBroker, der jetzt über den Linuxadapter die Befehle ausführt.
Bin zwar noch nicht dahinter gekommen, wie ich nur den Befehl zum senden hinterlege und nur die Codes für die einzelnen Schaltungen als Parameter übergebe, mit dem gesamten Code funktioniert es aber schon.
Muss da halt für jede Schaltung einen einzelnen eigenen Befehl anlegen, der bei Statusänderungen in openHAB3 ausgeführt wird. Habe dazu virtuelle Schalter in oH3 angelegt.
Gruß Frank