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/