Blog Tutorial

OpenHAB-Server bei Stromausfall herunterfahren

Letzte Aktualisierung am 12. August 2023

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, ist der Raspberry Pi bei Verwendung von ZRAM immer „sauber“ herunterzufahren. Zur Vorsorge bei Stromausfällen sollte man ihn an einer USV betreiben. Das ist aber auch ohne ZRAM immer zu empfehlen.

Das hiesige Setup

Ich setze hier seit längerem eine FSP Fortron USV-Anlage EP 650 SP ein, welche RaspberryMatic-CCU und Fritz!Box versorgt. Die RasperryMatic dient dabei als Network UPS Tools (NUT)-Server und ist über einen USB-Anschluss an die USV angebunden. 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. Das soll auch so bleiben.

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, fährt sich der openHAB-Server bei einem erkannten Stromausfall sicherheitshalber sofort herunter. Er wird manuell eingeschaltet, wenn wieder alles okay ist. Hierzu dient ein zwischengeschalteter Schaltaktor. Nach einem längeren Stromausfall (entladene USV-Batterie) verbleibt er im Zustand „aus“, nachdem die Spannungsversorgung erneut hergestellt ist. Bei einem kürzeren Stromausfall wird er manuell kurz aus- und wieder eingeschaltet, um den openHAB-Server hochzufahren.

NUT Status an openHAB übertragen

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…

OpenHAB Server Stromausfall herunterfahren

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 ist jeweils ein „Item“ angelegt…

OpenHAB Server Stromausfall herunterfahren

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

OpenHAB Server Stromausfall herunterfahren

Den openHAB-Server bei Stromausfall herunterfahren

Eine „Rule“ führt das nachfolgende Skript aus, sobald sich der Status der USV von „OL“ auf „OB“ ändert…

OpenHAB Server Stromausfall herunterfahren
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, ist vorher der Benutzer „openhab“ zum Superuser zu machen. Das kann man nach dem Einloggen über SSH auf dem OpenHAB-Server (z.B. mit Putty) erledigen…

sudo adduser openhab sudo

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

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 meiner Hinweise, Anleitungen, Schaltungen und Software 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 | sternshaus.de
WordPress Cookie Plugin von Real Cookie Banner