Powerwalker UPS unter Debian 9 Stretch

Mit der Umstellung meines Homeservers auf Debian 9 Stretch war es auch an der Zeit, sich einmal um die daran angeschlossene Unterbrechungsfreie Stromversorgung (“UPS”: Uninterruptible Power Supply) zu kümmern. Mit dem Kauf der UPS hatte ich die Herstellersoftware zur Überwachung und zum Automatischen Herunterfahren des Servers auf selbigem installiert. Nach kurzer Zeit gefiel mir die aufgeblähte und schlecht gepflegte Java-Lösung allerdings nicht mehr und ich verzichtete auf eine UPS-Softwarekomponente auf dem Server. Das hatte zwar den Nachteil, dass der Server bei Stromausfall nicht automatisch heruntergefahren würde, aber eine Gewisse Überbrückungszeit war durch die UPS ja noch gegeben.

Nachdem letzte Woche der Strom für etwa eine Stunde ausgefallen war, und die UPS wegen eines zu alten Akkus nicht mehr funktionstüchtig war, kam das Thema “UPS” bei mir wieder auf, und ich wollte einmal sehen, was ich mit einem neuen Akku und einer Kopplung mit meinem Linux-Server anrichten kann. Als Alternative zu der Herstellersoftware “ViewPower” (die sich übrigens nicht mehr installieren ließ) stieß ich auf NUT - Network UPS Tools. Meine PowerWalker VI 600 LCD ist auf der Liste der kompatiblen Geräte zwar nur als “mäßig kompatibel” markiert, aber solange ich Messwerte auslesen konnte, und der Server bei schwach werdender Batterie automatisch heruntergefahren würde, war ich zufrieden. Also gab ich NUT eine Chance. Die Einrichtung von NUT will ich in diesem Beitrag kurz beleuchten.

UPS-Monitoring mit NUT

Alle notwendigen Softwarepakete werden durch

apt install nut

installiert. Dazu gehören die 3 Komponenten eines NUT Systems: Der passende Treiber für die UPS, upsd und upsmon. Upsd ist der Daemon, der mithilfe des Treibers die Verbindung zur UPS herstellt (Server). Upsmon greift als Client auf upsd zu, überwacht die Messwerte und leitet Aktionen wie z.B. Herunterfahren des Systems ein. Damit keine Verwirrung entsteht, sollte man diese Dreiteilung im Hinterkopf behalten.

(Hintergrund: upsd und upsmon sind getrennte Softwarekomponenten, damit sich mehrere UPS-Monitore/Server über des Netzwerk zu einem upsd / zu einer UPS verbinden können. Das ist sinnvoll, wenn mehrere Server an einer UPS hängen.)

Treiber einrichten und UPS verfügbar machen

Um ein einfaches Setup mit NUT zu realisieren, wird in der Konfigurationsdatei /etc/nut/nut.conf MODE auf standalone gesetzt:

MODE=standalone

Dann wird der passende Treiber für die UPS aktiviert. In meinem Fall muss der “blazer_usb” Treiber aktiviert werden. Welcher Treiber zu welchem UPS-Modell passt, kann man auf der Kompatibilitätsliste des NUT Projekts nachschlagen. In der Konfigurationsdatei /etc/nut/ups.conf wird unten folgendes Snippet angehängt:

[powerwalker]
    driver = blazer_usb
    port = auto  
    desc = "Meine Powerwalker UPS"

Damit wird die UPS bekannt gemacht und der passende Treiber aktiviert. Auf meinem Debian-System hatte NUT standardmäßig keinen Zugriff auf das USB-Device der UPS. So konnte NUT nicht funktionieren. Also habe ich mir via lsusb eine Liste der angeschlossenen USB-Geräte ausgeben lassen. Zur UPS gehörte der folgende Eintrag:

Bus 004 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial

Aus Vendor- und Product-ID (0665, 5161) konnte ich nun in /etc/udev/rules.d/90-nut-ups.rules eine neue Udev-Regel erstellen, welche NUT beim Anschließen des USB-Geräts die passenden Rechte für das Device gibt:

ACTION=="add", \
SUBSYSTEM=="usb", \
ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", \
MODE="0660", GROUP="nut"

Vendor-ID und Product-ID müssen in der Konfiguration auf die Ausgabe von lsusb angepasst werden. Die Udev-Regelsätze habe ich anschließend via

udevadm control --reload-rules
udevadm trigger

aktiviert. Das “trigger” Kommando hat bei mir nicht auf Anhieb funktioniert, also habe ich die UPS kurzerhand nochmal getrennt und neu via USB verbunden.

Mit dem upsdrvctl start Kommando kann nun überprüft werden, ob die UPS korrekt erkannt wurde. Wenn alles okay ist, ist folgende Zeile in der Ausgabe zu lesen:

Supported UPS detected with mustek protocol

UPSd konfigurieren

Im nächsten Schritt wird der UPS-Daemon - der UPS-Server - eingerichtet. Dazu wird in /etc/nut/upsd.conf unten das folgende Snippet angefügt, welches nur lokale Zugriffe auf upsd erlaubt:

ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACCEPT localhost
REJECT all

In /etc/nut/upsd.users wird außerdem ein neuer Benutzer angelegt, der Zugriff auf den Daemon haben soll. (folgendes unten anfügen:)

[local_mon]
    password = mypass
    allowfrom = localhost
    upsmon master
    instcmds = ALL

das Passwort “mypass” kann dabei natürlich frei gewählt werden.

UPSMon konfigurieren

Damit der UPS Monitor die neu eingerichtete UPS überwacht, wird in /etc/nut/upsmon.conf der folgende Abschnitt angefügt:

MONITOR powerwalker@localhost 1 local_mon mypass master
POWERDOWNFLAG /etc/killpower
SHUTDOWNCMD "/sbin/shutdown -h now"

Das Passwort entspricht dabei dem oben gewählten.

NUT starten

Die NUT-Dienste für Server und Monitor werden jetzt gestartet:

systemctl start nut-server
systemctl start nut-client

Es lohnt sich, via systemctl status nut-server bzw. systemctl status nut-client einen kurzen Blick auf den aktuellen Status der Dienste zu werfen, um zu sehen, ob die Konfiguration korrekt ist, und die Dienste ordnungsgemäß arbeiten.

UPS-Werte ausgeben

Aktuelle Werte zu Batteriespannung, Netzspannung und -Frequenz und eine menge weiterer Statusinformationen können jetzt mit

upsc powerwalker

ausgegeben oder via

watch -n 1 upsc powerwalker

beobachtet werden.

Auch Einstellungen wie z.B. die Aktivierung des Alarmsignals bei einer Netzstörung können verändert werden:

upscmd -u local_mon -p mypass powerwalker@localhost beeper.toggle

(auf das Passwort “mypass” achten!). Ein kurzer Batterietest kann via

upscmd -u local_mon -p mypass powerwalker@localhost test.battery.start.quick

duchgeführt werden. Eine Liste aller sog. “Instant commands” findet ihr hier: http://networkupstools.org/docs/developer-guide.chunked/apas02.html


Referenzen: https://blog.shadypixel.com/monitoring-a-ups-with-nut-on-debian-or-ubuntu-linux/