Blog Tutorial

OpenHAB-Server bei Stromausfall herunterfahren

OpenHABian 3 verwendet per Default-Einstellung ZRAM, um übermäßig viele Schreibvorgänge auf die SD-Karte zu verhindern und deren Lebensdauer dadurch zu verlängern. Man kann das zwar abschalten, grundsätzlich ist die Nutzung von ZRAM aber – auch beim Einsatz einer „Endurance“-SD-Karte – eine gute Idee.
Damit keine Datenverluste die Installation beschädigen, sollte man bei Verwendung von ZRAM den Raspbery Pi immer „sauber“ herunterfahren und diesen zur Vorsorge bei Stromausfällen an einer USV betreiben, was aber auch ohne ZRAM eigentlich immer zu empfehlen ist.

Ich setze hier seit längerem eine FSP Fortron USV-Anlage EP 650 SP ein, welche RaspberryMatic-CCU und Fritz!Box versorgt, wobei die RasperryMatic als Network UPS Tools (NUT)-Server dient und über einen USB Anschluss an die USV angebunden ist. Wie ich das gelöst habe, steht in einem älteren Beitrag.

Bei mehreren verfügbaren USB-Ports an der USV, kann der openHAB-Server gleichermaßen direkt eingebunden werden, meine EP 650 SP hat aber leider nur einen USB-Anschluss, der mit der RaspberryMatic schon belegt ist, was auch so bleiben soll.

Alternativ kann man aber den NUT-Server der RaspberryMatic – oder auch jeden anderen im lokalen Netzwerk betriebenen, kompatiblen NUT-Server nutzen, um openHAB bei einem Stromausfall sicher herunterzufahren.

Da wir hier häufiger mal längere Stromausfälle haben und manchmal der Strom mehrmals hintereinander kurz weg und wieder da ist, was in „unglücklichen Redundanzen“ des Netzbetreibers begründet ist, wird der openHAB-Server bei einem erkannten Stromausfall sicherheitshalber sofort heruntergefahren und manuell eingeschaltet, wenn wieder alles okay ist. Hierzu dient ein zwischengeschalteter Schaltaktor, der nach einem längeren Stromausfall (entladene USV-Batterie) im Zustand „aus“ verbleibt, nachdem die Spannungsversorgung erneut hergestellt ist. Bei einem kürzeren Stromausfall wird er manuell kurz aus- und wieder eingeschaltet, um den openHAB-Server hochzufahren.

In openHAB 3 ist hierzu das Network UPS Tools Binding erforderlich, das entsprechende „Thing“ ist für die EP 650 SP wie folgt zu konfigurieren…

Als Host ist die IP-Adresse der RaspberryMatic (oder ggf. des genutzten, andernorts lokalisierten NUT-Servers) einzutragen und unter Device der Typ der eigenen USV gemäß der Vorgaben der NUT-Kompatibilitätsliste.

Das Binding liefert verschiedene Datenpunkte, die – je nach verwendeter USV – Daten anzeigen oder auch nicht. Bei meiner USV werden nur beim Ladezustand des Akkus (0-100%) und der Spannungsquelle (Status OL=On Line oder OB=On Battery) brauchbare Werte geliefert, was aber für den hier in Rede stehenden Anwendungsfall vollkommen ausreicht. Andere USV liefern ggf. andere Daten.

Für diese beiden Werte wurde jeweils ein „Item“ angelegt…

Genutzt wird das „Item“ für den Status…

Mit einer „Rule“ wird das nachfolgende Skript ausgeführt, sobald sich der Status der USV von „OL“ auf „OB“ ändert…

val actions = getActions("pushover", "pushover:pushover-account:NachrichtPushoverAlarm")
actions.sendMessage("Stromausfall erkannt, openHAB wird heruntergefahren!", "openHAB-Alarm")
executeCommandLine("sudo","poweroff")

Die Zeilen 1 und 2 versenden eine Nachricht über das Pushover-Binding und sind optional, wenn man dieses nicht verwendet. Zeile 3 fährt den openHABian-RaspberryPi unter Nutzung der openHAB „ExecActions“ herunter.

Damit letzteres funktioniert, müssen vorher der Benutzer „openhab“ zum Superuser gemacht werden, was nach dem Einloggen über SSH auf dem OpenHAB-Server (z.B. mit Putty) erledigt werden kann…

sudo adduser openhab sudo

…und das Ausführen benötigter (oder alternativ aller) Systembefehle ohne Passwort erlaubt werden…

sudo visudo -f /etc/sudoers.d/010_pi-nopasswd

Als neue Zeile ist für alle Befehle folgende Zeile…

openhab ALL=(ALL) NOPASSWD: ALL

…oder alternativ eingeschränkt z.B. folgende Zeile zu ergänzen….

openhab ALL=(ALL) NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/systemctl, /sbin/reboot

In openHAB 2 soll…

executeCommandLine("sudo@@poweroff")

…anstatt…

executeCommandLine("sudo","poweroff")

…zum Ziel führen, getestet habe ich das aber nicht.

Falls der openHAB-Server nicht sofort, sondern erst nach einer bestimmten Dauer des Stromausfalls heruntergefahren werden soll, kann in der „Rule“ statt des „Items“ für den Status das für den Ladezustand des Akkus genutzt werden. Der optimale Ladezustand für den Shutdown ist von der verwendeten USV und deren Konfiguration abhängig. Er sollte lieber zu hoch als zu niedrig gewählt werden, damit der openHAB-Server noch genügend Zeit zum sicheren Herunterfahren hat.

Bitte beachten...

SMART WOHNEN in Stern's Haus ist ein rein privates, nicht kommerzielles Projekt. Meine Hinweise, Anleitungen, Schaltungen und Software werden so angeboten, „wie sie sind“, Support kann ich nur im Rahmen meiner begrenzten Freizeit leisten, hierfür bitte ich um Verständnis.
Die Verwendung erfolgt auf eigenes Risiko, ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung! Für die Einhaltung der einschlägigen technischen Vorschriften ist jeder Anwender selbst verantwortlich!
Creative Commons Lizenzvertrag
Copyright © Jens-Peter Stern | SMART WOHNEN in Stern's Haus | smart-wohnen.org

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert