ioBroker: USV – Der erste Schritt zur Hochverfügbarkeit

ioBroker: USV – Der erste Schritt zur Hochverfügbarkeit

4. April 2021 0 Von Moritz Heusinger

Hallo zusammen,

wie im letzten Video bereits angekündigt, möchte ich mich in der nächsten Zeit mehr mit Hochverfügbarkeit meines Smart Home Systems beschäftigen. Das heißt, dass auch wenn eine Komponente oder gar der Strom mal ausfällt, die Umgebung so gut es geht weiter zur Verfügung steht und sich auch im Falle eines Stromausfalles mindestens sauber beenden kann, damit nach dem Stromausfall alles wieder seinen geregelten Lauf nimmt ohne manuelles Eingreifen.

Was ist eine USV?

Hier kommt als Grundkomponente eine Unterbrechungsfreie Stromversorgung (USV, engl. UPS) ins Spiel. Dies ist eine Art Steckdosenleiste mit integriertem Akku, der also dafür sorgt, dass selbst wenn die Netzspannung verloren geht, wir weiterhin Strom aus der USV beziehen können. Ebenfalls können die meisten Mittelklasse USVs per USB konfiguriert und ausgelesen werden. Dies machen wir uns zur Nutze um im Falle eines knappen Akkus unseren ioBroker sauber herunter zu fahren.

Ein kurzer Überblick über die Vor- und Nachteile einer USV.

Vorteile:
– Verhindert Beschädigung von Hardware durch Überspannungsschutz und plötzlichen Stromverlust
– Auch bei Stromausfall werden Prozesse korrekt beendet und können danach ohne sich in potentiell undefinierten Zustand zu befinden (z. B. noch existente PID-Dateien) die Arbeit fortfahren
– Auch bei Stromausfall können noch Batteriebetriebene Komponenten gesteuert werden, vor allem dann wenn auch noch Router und evtl. vorhandene Switches abgesichert sind und somit ein Zugriff durch z. B. Smartphones gewährleistet ist
– Ermöglicht es über einen Stromausfall informiert zu werden

Nachteile:
– Stromverbrauch von ca. 8 – 15 Watt je nach USV
– Akkus sind Verbrauchsgut und müssen ca. alle 3 – 5 Jahre getauscht werden

Ziel dieses Tutorials

In diesem Tutorial werdet ihr am Ende eine Client Server Umgebung haben, zu der mehrere Leistungsabnehmer der USV sich verbinden können. Der Server ist das System, welches via USB mit der USV verbunden ist und so direkten Zugang zu den Informationen besitzt. Ebenfalls werden am Ende dieses Tutorials alle eure Clients als auch der Server bei niedriger Batteriekapazität sauber heruntergefahren. In einem Folgetutorial werden wir noch den nut-Adapter einrichten um die Daten der USV im ioBroker zu visualisieren und über Ausfälle sowie Akkuwechsel benachrichtigt zu werden.

In diesem Tutorial gehe ich auf zwei Situationen ein. Die erste ist, dass wir von einer ioBroker Installation innerhalb einer VM bzw. auf einem anderen Server als dem der mit der USV verbunden ist ausgehen. Die zweite Situation ist eine klassische Installation, auf welcher der ioBroker direkt auf dem System läuft und mit der USV verbunden ist. Die beiden Setups unterscheiden sich von der Konfiguration nur marginal. Randnotiz: Für eine richtige Hochverfügbarkeit im Sinne von Übernahme des Systems durch einen anderen Server ist es nötig, dass der ioBroker in einer VM/LXC Container läuft, weshalb ich dieses Szenario hier mit berücksichtige. Jedoch werde ich in folgenden Tutorial noch mehr darauf eingehen und euch bei der Einrichtung unterstützen, weshalb hier auch die klassische Variante gezeigt wird.

Ich nutze in diesem Tutorial eine USV von Eaton, genauer gesagt die Eaton Ellipse ECO 650 USB DIN, welche ich aufgrund des Formfaktors und des lt. Bewertung niedrigen Stromverbrauches (8 Watt) gewählt habe. Jedoch könnt ihr auch beliebig andere und auch höher dimensionierte USVs nutzen, insofern diese via USB angeschlossen werden können. So sind die Produkte von APC auch sehr beliebt wie z. B. das folgende Einsteigermodell mit deutlich mehr Leistung als die Eaton. Hier sollte berücksichtigt werden wie lange ihr das System bei Stromausfall am Leben halten möchtet oder ob es euch nur um sauberes Herunterfahren geht. Einen Rechner findet ihr z. B. auf der APC Webseite.

Wir gehen wie immer von einer ioBroker Installation unter Linux aus. Verbindet euch via ssh auf euren ioBroker Host, bzw. im VM Fall auf den Host (nicht in die VM).


Der Host wird den nut-Server bereitstellen, während sich die ioBroker VM als Client verbinden wird. Im klassischen Fall laufen Client und Server lokal.

Server Konfiguration

Nun installieren wir den nut-server via
sudo apt install nut-server
Nun schauen wir uns die USB Geräte an. Dazu nutzen wir den Befehl
lsusb
Die Ausgabe sollte z. B. wie folgt aussehen
 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP2102/CP2109 UART Bridge Controller [CP210x family]
Bus 001 Device 003: ID 10c4:8c07 Cygnal Integrated Products, Inc.
Bus 001 Device 005: ID 8087:0026 Intel Corp.
Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
In meinem Fall sieht man hier, dass die USV erkannt wurde am Eintrag
Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS
Nun müssen wir die USV (Hardware) im Server registrieren. Dies tun wir indem wir die Konfiguration mittels
sudo nano /etc/nut/ups.conf
bearbeiten. Hier geben wir der USV einen beliebigen Namen, ich wähle serverups
[serverups]
     driver = usbhid-ups
     port = auto
     desc = "Eeaton UPS"
Die Beschreibung desc könnt ihr ebenfalls beliebig wählen. Habt ihr die Daten eingegeben, speichert die Datei mit Strg + o und schließt diese mittels Strg + x (Angaben für nano) Nun testen wir ob die Konfiguration lauffähig ist, mittels:
sudo upsdrvctl start
Die Ausgabe sollte ähnlich zu
Network UPS Tools - UPS driver controller 2.7.4
Network UPS Tools - Generic HID driver 0.41 (2.7.4)
USB communication driver 0.33
Using subdriver: MGE HID 1.39
aussehen.
Nun können wir die Server Konfiguration mittels sudo nano /etc/nut/nut.conf vornehmen. Hier fügen wir die folgende Konfiguration hinzu:
MODE=netserver
Wenn ihr die klassische Variante umsetzt, könnt ihr hier auch standalone wählen, jedoch schadet es in erster Linie nicht den Network-Server zu nutzen um diesen Später durch Clients zu ergänzen. Strg + o gefolgt von Strg + x zum speichern und schließen. Nun müssen wir den Zugriff für die externen Clients erlauben, via sudo nano /etc/nut/upsd.conf. Für die klassische Variante gebt ihr hier
LISTEN 127.0.0.1
an, für externen Zugriff, benötigen wir stattdessen
LISTEN 0.0.0.0
Nun müssen wir noch die Nutzer erstellen, für den nut-Server. Dies tun wir mittels sudo nano /etc/nut/upsd.user Hier fügt ihr die folgenden Nutzer hinzu
[monmaster]
    password = test
    upsmon master
    actions = SET
    instcmds = ALL
[monremote]
    password = test
    upsmon slave
Für die klassische Variante reicht der Nutzer monmaster. Die Passwörter entsprechend eurer Wünsche vergeben. Der erste Nutzer hat alle Rechte, während der zweite Nutzer nur den Status auslesen darf. Nun folgt der Schritt um auch auf dem Server einen Client zur Überwachung zu Starten. Für die klassiche Variante ist dies bereits der letzte Schritt. Hierzu editieren wird die Monitoring Konfiguration via sudo nano /etc/nut/upsmon.conf und fügen folgende Zeile hinzu
MONITOR serverups@localhost 1 monmaster test master
jedoch muss test durch euer Passwort des Nutzers nonmaster ersetzt werden. Startet jetzt noch den Systemdienst des Servers neu damit die aktuelle Konfiguration sicher angezogen wird, dies geschieht mittels
sudo systemctl restart nut-server
Nun seid ihr mit der klassischen Variante fertig und könnt eure USV testweise vom Strom trennen. Während ihr per ssh verbunden seid, sollte eine Meldung im Terminal aufploppen, dass die USV nun per Batterie läuft.

Client Konfiguration

Nun verbindet euch via ssh zu eurer VM um auch dort den Client zu installieren. Dies geschieht via
sudo apt install nut-client
Nun editiert die nut Konfiguration um euch als Netzwerk-Client kenntlich zu zeigen via sudo nano /etc/nut/nut.conf und fügt folgende Zeile hinzu
MODE=netclient
Nun muss noch die Client Konfiguration vorgenommen werden, hierzu editieren wir erneut via sudo nano /etc/nut/upsmon.conf und fügen folgende Zeile hinzu
MONITOR serverups@192.168.145.144 1 monremote test slave
Ersetzt erneut test durch euer Passwort, diesmal durch das des Nutzers monremote. Die IP 192.168.145.144 muss durch die IP eures nut-Servers ausgetauscht werden. Startet nun noch den Client Systemdienst neu via
sudo systemctl restart nut-client
Nun verbindet euch z. B. mittels ssh mit beiden Geräten (VM + Host), trennt die USV testweise vom Strom und ihr solltet in beiden Fenstern eine Meldung über den geänderten Zustand der USV erhalten.

Nächste Schritte

Im nächsten Tutorial werde ich euch zeigen wie ihr auf dem Client, bzw. im klassischen auf dem Host selbst den nut-Adapter im ioBroker einrichtet, neben dem Polling, Änderungen direkt gepusht bekommt und per E-Mail oder diversen Notifikationsdiensten über Stromausfall, Batteriewechsel sowie Shutdown informiert werdet.

Falls Ihr Fragen, Wünsche, Videoideen oder andere Anregungen habt, stellt diese gerne in Form eines Kommentars oder schreibt eine Mail an info@iot-blog.net.