Da ich mir jedesmal einen Wolf suche und es zu den OpenHab Community Beiträgen seit OH 3 Abweichungen gibt, wollte ich euch hier kurz erklären, wie ich es mit meiner Installation (Raspberry Pi mit openHABian) hinbekommen habe.
Warum möchte man das überhaupt haben?
- Irgendwas läuft nicht sauber und man möchte das ganze System neu starten
- Man hat relevante Dinge in OH geändert und möchte nur den OpenHab Dienst neu starten
- Ein Binding hat sich aufgehängt und man muss es neu starten
- ...
Man kann sehr viel umsetzen und auch beispielsweise Regeln erstellen, die ein Binding neu starten, wenn die Verbindung zu dem entsprechenden Dienst verloren ging.
Sicherung, SSH?
Vorab: Erstelle eine Sicherung der SD-Karte.
Dann musst Du dich per SSH mit einem Rechner auf dem OH läuft verbinden (erkläre ich hier nicht, denn wenn Du dies nicht kannst, solltest Du das hier besser nicht machen). Verwende den openhabian Benutzer (falls Du das Standardpasswort nicht geändert hast, es lautet auch "openhabian" - aber ändere es bitte!).
Reboot, Shutdown, Neustart OH
- Führe folgendes Kommando aus um den openhab Benutzer (als welcher OH ausgeführt wird) sudo Rechte zu geben: sudo adduser openhab sudo
- Starte visudo um die Rechte des Benutzers zu ändern und die Ausführung von Kommandos ohne Passwortabfrage zu ermöglichen : sudo visudo
- Nun musst Du der Datei die folgende Zeile hinzufügen (am besten oberhalb der includes). Das Speichern erfolgt über die Nachfragen nach Eingabe von Strg+X. Speicher ohne dem Anhang ".tmp".
# Allow openhab user to execute shutdown, poweroff, and systemctl commands
openhab ALL=(ALL) NOPASSWD: /sbin/shutdown, /sbin/poweroff, /bin/systemctl, /sbin/reboot, /usr/bin/ssh
Das war es schon... fast... Um in OpenHab jetzt einen Reboot/Shutdown durchführen zu können, legst Du am besten Items vom Typ Switch an mit welchem du die entsprechenden Aktionen auslöst.
Hier ein Codebeispiel:
rule "System Reboot"
when
Item HealingRebootServer changed to ON
then
executeCommandLine("sudo","reboot")
end
rule "System Shutdown"
when
Item HealingShutdownServer changed to ON
then
executeCommandLine("sudo","poweroff")
end
rule "Openhab Reboot"
when
Item HealingRebootOpenhab changed to ON
then
executeCommandLine("sudo","systemctl","restart","openhab.service")
end
Display More
Neustart von Bindings
Falls Du Bindings neustarten können möchtest, muss man weitere Schritte gehen:
- Wechsel mit cd nach /home/openhabian/
- Erlaube dem Benutzer das Schreiben in dieses Verzeichnis (warum auch immer das nicht möglich ist): chmod 777 /home/openhabian/
- Erstelle für den openhab Benutzer einen Schlüssel. Bei der Nachfrage nach einen Kennwort, bitte "keins" auswählen: sudo -u openhab ssh-keygen -t rsa -f openhab.id_rsa
- Kopiere den Schlüssel aus /home/openhabian/openhab.id_rsa.pub. Den Anfang "ssh-rsa " und das Ende "openhab@openhabian" weglassen.
- Füge den Schlüssel als neue Zeile unterhalb der Kommentare in die Datei /var/lib/openhab/etc/keys.properties ein. Vorne kommt ein "openhab=" und hinten ",_g_:admingroup" dazu. Die neue Zeile sieht verkürzt dann etwa so aus: openhab=AAAAB {...} yqOCrAK8=,_g_:admingroup
- Falls das folgende Kommando ohne Passwortabfrage ausgeführt wird, hast Du es geschafft: sudo -u openhab ssh -p 8101 -i /home/openhabian/openhab.id_rsa openhab@localhost. Eventuell kommt hier eine Nachfrage, ob der Rechner vertrauenwürdig ist... antworte mit "yes".
- Um ganz sicher zu gehen kannst Du noch mit sudo su zum Superuser werden, dann mit su openhab zum openhab Benutzer wechseln und das Kommando ssh -p 8101 -i /home/openhabian/openhab.id_rsa openhab@localhost ausführen. Auch dies sollte ohne Passwortabfrage möglich sein.
Auch hier gibt es ein kurzes Codebeispiel:
rule "Reboot Livisi"
when
Item HealingRebootLivisi changed to ON
then
executeCommandLine("sudo","-u","openhab","ssh","-p","8101","-i","/home/openhabian/openhab.id_rsa","openhab@localhost","bundle:restart","org.openhab.binding.livisismarthome")
end
rule "Reboot OH Cloud"
when
Item HealingRebootOhCloud changed to ON
then
executeCommandLine("sudo","-u","openhab","ssh","-p","8101","-i","/home/openhabian/openhab.id_rsa","openhab@localhost","bundle:restart","org.openhab.io.openhabcloud")
end
Display More
Viel Spaß damit