Das Exec Binding von openHAB ist eine mächtige Erweiterung mit vielen Einsatzmöglichkeiten! Leider für jemanden mit wenigen Linux-Kenntnissen schwer in der Handhabung. In diesem Beitrag möchte ich dir die Möglichkeiten des Bindings anhand eines einfachen Beispiels näher bringen: Wir starten ein Remote Linux Server neu bzw. werden diesen herunterfahren, aus der Ferne!
Bindings installieren
Zuerst muss das Exec Binding und die Regex Tranformation in openHAB installiert werden. Beides kannst du über Einstellungen > Bindings direkt in der openHAB Administration erledigen.
Berechtigungen erweitern
Aus Sicherheitsgründen ist der openhab Benutzer mit nur wenig Privilegien ausgestattet. Das muss geändert werden, wenn aus openHAB heraus Konsolenbefehle ausgeführt werden sollen. Zuerst fügst du den Benutzer openhab zur Gruppe sudo (Super User) hinzu:
sudo adduser openhab sudo
Anschließend muss definiert werden, welche Kommandos der openhab Benutzer ausführen darf. Hierzu muss folgende Datei angelegt werden:
sudo nano -f /etc/sudoers.d/openhab
Im ersten Schritt erlauben wir die Ausführung sämtlicher Befehle, was später im Hinblick auf die Sicherheit wieder weiter eingeschränkt werden kann. Hierzu fügen wir in die Datei folgende Zeile ein:
openhab ALL= NOPASSWD:ALL
Mit Strg + O und Strg + X kann die Datei gespeichert und anschließend geschlossen werden.
Zuletzt kann die Vergabe der Rechte wie folgt getestet werden:
sudo -u openhab /bin/bash sudo reboot
Hat alles geklappt, wird das System nun neu gestartet.
Skripte anlegen
Es besteht die Möglichkeit mit dem Exec Binding direkt Konsolenbefehle auszuführen. Bei einfachen Kommandos stellt dies kein Problem dar, komplexe Abfolgen von Befehlen lassen sich so aber nicht abbilden. Aus diesem Grund empfehle ich sämtliche Befehle in ein Skript auszulagern, welches dann vom Exec Binding aufgerufen wird.
Zuerst erstellen wir uns ein Verzeichnis, indem wir sämtliche Skripte ablegen:
sudo mkdir scripts
Anschließend fügen wir ein neues Skript hinzu, welches ein Remote-System neu startet:
sudo nano /home/scripts/restart.sh
In die neue Datei kopieren wir nun die folgenden Befehle:
#!/bin/bash sudo reboot set -x echo "System wird neu gestartet" exit 0
Nun muss das Skript ausführbar gemacht werden:
sudo chmod +x restart.sh
Damit das Skript von openHAB ausgeführt werden kann, muss es der Whitelist hinzugefügt werden:
sudo nano /etc/openhab/misc/exec.whitelist
In diese Datei fügst du nun die folgende Zeile ein:
sh /home/scripts/restart.sh
Hinweis: Auf diese Weise muss jedes weitere Skript der Whitelist hinzugefügt werden.
SSH-Zugang konfigurieren
Im ersten Schritt musst du einen SSH-Schlüssel für den openhab Benutzer generieren, mit dem du dich am Remote-System über SSH anmelden kannst. Der generierte Schlüssel wird anschließend auf das Remote-System kopiert. Dies ersetzt die händische Anmeldung über SSH mittels einer Benutzername/Passwort-Kombination.
Zum Generieren eines SSH-Schlüssel gib folgendes in die Konsole ein, auf der auch dein openHAB-System läuft:
sudo -u openhab ssh-keygen -t rsa
Anschließend kopierst du den Schlüssel auf das Remote-System:
sudo -u openhab ssh-copy-id -i /var/lib/openhab/.ssh/id_rsa.pub REMOTE_USER@REMOTE_HOSTNAME
Hinweis: Ich habe openHAB im STandard auf einem Ubuntu Server installiert. Hast du eine abweichende Installation, passe bitte den Pfad /var/lib/openhab/ an das home Verzeichnis deines openhab Benutzers an.
Zum Schluss kann die Verbindung getestet werden:
sudo -u openhab ssh REMOTE_USER@REMOTE_HOSTNAME
Wurde erfolgreich eine SSH-Verbindung hergestellt und es war kein Passwort erforderlich, war der Test erfolgreich!
Thing & Items anlegen
Es wird nun Zeit, die ganze Vorarbeit in openHAB zur Ausführung zu bringen! Zuerst legst du ein Exec Binding Thing an:
Als Befehl trägst du nun den zuvor freigegebenen Aufruf des Skripts ein:
sh /home/scripts/restart.sh
Ebenfalls solltest du den Timeout auf 300
erhöhen, denn der Neustart eines Systems dauert etwas.
Als nächstes legst du für die einzelnen Channels des neuen Things noch Items an. In diesem Beispiel beschränke ich mich auf den Channel
, dieser wird benötigt um das Script zu starten.Das angelegte Item kannst du nun mit einem Schalter auf deiner Oberfläche verbinden und das Skript zur Ausführung bringen. Dein entferntes System sollte sich nun aus der Ferne neu starten lassen.
Hinweis: Funktioniert etwas nicht, wie du es erwartest, schau entweder in die Logs von openHAB oder lege ein Item für den
und den an, dann erkennst du leichter wo das Problem liegt.