Seite 1 von 1

Exec Binding in Main UI lauffähig machen

Verfasst: 2. Aug 2021 22:09
von Stachi
Hallo zusammen,

ich bin gerade mal wieder am verzweifeln, weil ichs nicht verstehe...

Ich möchte "einfach" nur eine Befehlszeile per Switch-aktivierung laufen lassen, bekomme es aber nicht hin...
Kann mir jemand einen Screenshot oder Code von einem lauffähigen Exec-Befehl schicken?

P.S.: Mit Code meine ich die Code-Zeile in der Main-UI :)

Habe nicht wirklich Lust, noch ein paar extra-Ordner unter openhab anzulegen ;)

Re: Exec Binding in Main UI lauffähig machen

Verfasst: 3. Aug 2021 11:33
von Stachi
Hat keiner eine Idee??
Ich möchte nur eine Switch, der OH automatisch zum Neustart bewegt damit ich nicht jedes mal an den Rechner und die RasPi-Konsole muss... :(

Re: Exec Binding in Main UI lauffähig machen

Verfasst: 4. Aug 2021 00:46
von udo1toni
Ein openHAB System sollte eigentlich durchlaufen.
Wenn aber openHAB hängen bleibt, wie soll Dir dann ein Schalter in der UI helfen, openHAB neu zu starten? Sinnvoller ist da ein Script, welches unabhängig von openHAB läuft. Wenn Raspbian OS (respektive ssh) noch erreichbar ist, kannst Du genauso gut ein Script auf Deinem Desktop hinterlegen, welches per ssh den reboot auslöst. Das geht auch komplett ohne Passwort, wenn es sein soll.

Besser ist es aber, dafür zu sorgen, dass openHAB nicht hängen bleibt. ;)

Re: Exec Binding in Main UI lauffähig machen

Verfasst: 4. Aug 2021 06:58
von Stachi
Halo Udo1Toni,

Es geht nicht ums hängen bleiben.
Ich brauche diesen „Knopf“, damit mir meine items nach dem taggen mit den Metadaten „HomeKit“ auch im homekit angezeigt werden.
Das passiert nämlich erst nach einem Restart von OH.

Re: Exec Binding in Main UI lauffähig machen

Verfasst: 4. Aug 2021 21:33
von Stachi
Hat denn hier noch niemand etwas mit dem EXEC-Binding angestellt? :(
Oder weiss es wirklich niemand?

Re: Exec Binding in Main UI lauffähig machen

Verfasst: 4. Aug 2021 23:44
von udo1toni
Ah. Das las sich für mich anders. :)

Vermutlich ist es nicht unbedingt notwendig, openHAB dafür tatsächlich komplett neu zu starten.
Aber egal, welche Befehle Du dazu auslösen musst, Du musst zwingend (zur Nutzung des Exec Bindings) eine exec.whitelist befüllen.

Extra Ordner musst Du dazu nicht anlegen, openHAB legt bei der Installation die gesamte benötigte Ordnerstruktur an. Auch die exec.whitelist ist bereits angelegt (aber natürlich leer).

Um openHAB sauber neu zu starten, muss der ausführende User (das ist openhab) das Recht haben, den Dienst openhab.service neu zu starten. Er braucht das Recht, sudo aufzurufen.

sudo verlangt die Eingabe eines Passworts, und es ist (eigentlich logisch...) nicht vorgesehen, dieses als Parameter zu übergeben, ganz abgesehen davon, dass es dieses Passwort gar nicht gibt (der User openhab hat kein Passwort für die Anmeldung).
Über die Datei /etc/sudoers kann man aber genau definieren, dass bestimmte User zum Ausführen bestimmter Befehle kein Passwort für sudo angeben müssen. Da dies, allgemein gesetzt, ein Sicherheitsleck bedeuten würde, muss man möglichst eng eingrenzen, was erlaubt ist, in diesem Fall der Befehl

Code: Alles auswählen

/bin/systemctl restart openhab.service
Um diesen Befehl so zu hinterlegen, dass openhab ihn ohne Eingabe des Passworts ausführen darf, benutzt Du visudo.
visudo prüft vor dem Speichern der Datei, ob sie gültig ist. Das ist essenziell, denn wenn die Datei kaputt ist, funktioniert sudo nicht mehr und Du bist administrativ aus dem System ausgesperrt.

Mit dem Befehl

Code: Alles auswählen

sudo visudo
öffnest Du also die Datei zum Bearbeiten (Du kannst nano als Editor beim ersten Aufruf auswählen).

Nun fügst Du unter den Zeilen

Code: Alles auswählen

# User privilege specification
root    ALL=(ALL:ALL) ALL
eine weitere Zeile ein:

Code: Alles auswählen

openhab  ALL=(ALL:ALL) NOPASSWD: /bin/systemctl restart openhab.service
Diese Zeile bedeutet: Der User openhab ist berechtigt, von allen Rechnern aus (ALL=) im Kontext beliebiger User und beliebiger Gruppen (ALL:ALL) ohne Angabe eines Passworts (NOPASSWD) den angegebenen Befehl auszuführen.
Es gibt noch viele weitere Möglichkeiten, sudo so zu konfigurieren, dass das erwünschte Ziel erreicht wird, die Zeile ist aber hinreichend und sollte funktionieren.

Bleibt noch ein Problem, was eventuell auftreten könnte, nämlich, dass es notwendig ist, sudo einmalig als User openhab zu starten (beim ersten Mal gibt es eine Meldung (Aus großer Macht erwächst auch große Verantwortung).
Ob dieser Schritt zwingend notwendig ist, weiß ich nicht sicher :)

Code: Alles auswählen

sudo su - openhab -s /bin/bash
öffnet eine Konsole unter dem Kontext des Users openhab. Die Verwendung von sudo ist hier notwendig, da es kein Passwort für den Login gibt. Da für den User openhab keine login Shell definiert ist, muss diese explizit angegeben werden, was mit dem Parameter -s geschieht.
In der neuen Konsole kannst Du nun den Befehl ausprobieren, also

Code: Alles auswählen

sudo /bin/systemctl restart openhab.service
Entweder kommt der Screen mit der Meldung (den kannst Du dann einfach mit Enter bestätigen), oder auch nicht...
Nach einer kurzen Bedenkzeit, die systemctl braucht, um openHAB neu zu starten, landest Du wieder in der Konsole, von der Du dich mit exit abmeldest.

Nun musst Du dafür sorgen, dass Du den Befehl von openHAB starten lassen kannst. Dabei kannst Du den Befehl komplett angeben, oder Du schreibst ein Shellscript, welches den Befehl absetzt. Letztere Variante hat den Vorteil, dass Du in diesem Script zusätzlich eine Ausgabe in eine Datei vornehmen kannst, anhand derer Du testen kannst, ob der Befehl ausgeführt wurde (bei den meisten Leuten funktioniert das Exec Binding nicht auf Anhieb - das ist aber immer auf eine Fehlbedienung zurückzuführen... ;) ).

Den auszuführenden Befehl kannst Du einfach über die Main UI eingeben. Der entstehende yaml Code sollte ungefähr so aussehen:

Code: Alles auswählen

UID: exec:command:restart
label: Restart
thingTypeUID: exec:command
configuration:
  transform: 
  interval: 0
  autorun: false
  command: sudo /bin/systemctl restart openhab.service
  timeout: 15
UID und Label kannst Du natürlich frei wählen. Anschließend verknüpfst Du den run Channel mit einem Switch Item. Das Switch Item legst Du wiederum auf eine Page mit der Action sendCommand mit dem Parameter ON.
Wen Du nun die Cell betätigst, wirst Du zum einen im Log sehen, dass das Item den Befehl empfängt, zum anderen wird openHAB sich beschweren, dass der Befehl nicht in der whitelist hinterlegt ist ;)

Also noch der Eintrag in die exec.whitelist, über

Code: Alles auswählen

sudo nano /etc/openhab/misc/exec.whitelist
editierst Du die whitelist und trägst dort dieselbe Zeile ein, wie schon im exec Binding.

Es ist essentiell, dass die Zeichenfolge identisch ist. Es darf zu Beginn der Zeile kein Leerzeichen stehen (weder im exec Binding noch in der exec.whitelist)

Ich habe das Ganze bei mir gerade beispielhaft durchgespielt, bis auf die Möglichkeit, dass ich irgendwo einen Tippfehler drin habe, kann ich garantieren, dass der Weg mit openHAB3 exakt so funktioniert.

Re: Exec Binding in Main UI lauffähig machen

Verfasst: 5. Aug 2021 09:46
von Stachi
Hallo Udo1Toni,

mal wieder eine sehr ausführliche Antwort. Vielen Dank dafür.
Jetzt läuft alles so, wie ich mir das gedacht habe :-).

Das Einzige, das ich nicht verstehe: der Run-Channel ist ja ein Switch... warum wird der mir in der MainUI unter items nicht als Toggle-switch angezeigt? Hast du da eine Idee? Bei allen anderen Switches geht es ja schließlich auch...

Aber dein Tip mit der Toggle-Card auf der Page hat wunderbar funktioniert.

Besten Dank nochmal :-)

Re: Exec Binding in Main UI lauffähig machen

Verfasst: 5. Aug 2021 13:38
von udo1toni
Stachi hat geschrieben:Das Einzige, das ich nicht verstehe: der Run-Channel ist ja ein Switch... warum wird der mir in der MainUI unter items nicht als Toggle-switch angezeigt?
Das ist eine interessante Frage :) und ich habe keine Ahnung, woran das hängt.
Da man aber diesen “Schalter” nicht ausschalten kann, sondern lediglich ein ON senden darf, passt das schon.


Gesendet von iPad mit Tapatalk

Re: Exec Binding in Main UI lauffähig machen

Verfasst: 5. Aug 2021 13:45
von Stachi
Auch wieder wahr [emoji28]

Und danke nochmal für die Hilfe [emoji3526]