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 Ausführung, 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 Rückgabewert und den Rückgabestatus an, dann erkennst du leichter wo das Problem liegt.