Projekt: NUT-Server installieren und konfigurieren
Ich habe nun schon seit längerem eine USV in meinem Rack verbaut. Diese hat zwar munter die ganzen Synology-Diskstations über einen bevorstehenden Stromausfall informiert, nicht aber meine fhem-Installation. Um noch flexibler sein zu können, habe ich also einen separaten USV-Server neben der Synology DS aufgesetzt, welcher auch wirklich 24/7 läuft (denn das tun meine NAS aktuell nicht). In diesem Beitrag zeige ich, wie man einen NUT-Server installiert und konfiguriert, sodass dieser rund um die Uhr läuft. Die anderen Clients können sich dann gegen dieses System verbinden und den Status abfragen.
Was wird benötigt?
- Ein Raspberry Pi mit Raspbian Stretch
- Eine USV (Unterbrechungsfreie Stromversorgung) mit USB-Anschluss
Video
Befehle
Server konfigurieren
sudo apt-get install nut usbutils
sudo vi /etc/nut/ups.conf
[cyberpower]
driver = "usbhid-ups"
port = "auto"
desc = "CyberPower"
pollinterval = 15
Diese Datei beschreibt die angeschlossene USV. Also wie sie heißt und was für ein Treiber genutzt wird um mit dieser zu sprechen. Theoretisch könnten hier natürlich mehrere Einträge enthalten sein.
sudo upsdrvctl start
sudo cp /lib/udev/rules.d/62-nut-usbups.rules /etc/udev/rules.d/
sudo reboot
sudo upsdrvctl start
sudo vi /etc/nut/nut.conf
MODE=netserver
sudo upsd
sudo upsc cyberpower@localhost
sudo vi /etc/nut/upsd.conf
LISTEN 127.0.0.1 3493
LISTEN 192.168.178.31 3493
Neustart des Dienstes erforderlich
sudo upsd -c stop
sudo upsd
Benutzer anlegen
sudo vi /etc/nut/upsd.users
[upsmaster]
password = XWwsQXeC9DdAMD9Rk
actions = SET
instcmds = ALL
upsmon master
[monuser]
password = secret
upsmon slave
Synology-NAS
Um ein Synology-NAS mit unserem NUT-Server zu verbinden, muss der Name der USV “ups” sein. Leider kann man in der Oberfläche des DSM nicht konfigurieren, nach welcher USV die Synology fragen soll. Daher passen wir uns diesem Standard an. Hat man kein Synology-NAS welches man an den Server koppeln möchte, nutzt man einfach weiter einen beliebigen Namen.
sudo vi /etc/nut/ups.conf
[ups]
driver = "usbhid-ups"
port = "auto"
desc = "CyberPower"
pollinterval = 15
(wichtig ist hier der Name “ups” - danach sucht die DiskStation)
in fhem
define USV NUT ups 192.168.178.31
attr USV asReadings battery.charge,battery.runtime,input.voltage,ups.load,ups.power,ups.realpower,ups.model
attr USV disable 0
attr USV event-on-change-reading .*
attr USV icon power
attr USV pollState 10
attr USV pollVal 60
attr USV stateFormat load: ups.load %
attr USV userReadings runtime-minutes {ReadingsNum($NAME, "battery.runtime", 0) / 60}
Docker
nutserver:
restart: always
expose:
- "3493"
ports:
- "3493:3493"
image: instantlinux/nut-upsd
privileged: true
environment:
- NAME=ups
- DRIVER=usbhid-ups
- PORT=auto
- DESCRIPTION=CyberPower
- API_USER=monuser
- SERVER=master
- SECRET=nut-upsd-password
volumes:
- ./nutserver/nut-upsd-password:/run/secrets/nut-upsd-password
networks:
- fhem-network
define USV NUT ups nutserver
Weitere Clients
sudo apt-get install nut-client
sudo vi /etc/nut/nut.conf
MODE=netclient
sudo vi /etc/nut/upsmon.conf
MONITOR ups@192.168.178.11 1 upsmon secret slave
sudo systemctl restart nut-client.service
sudo systemctl restart nut-monitor.service
upsc -c ups@192.168.178.11
upscmd
upscmd -l ups
upscmd -u upsmaster -p XWwsQXeC9DdAMD9Rk ups beeper.disable
Shutdown-Test
sudo upsmon -c fsd
Zusammenfassung
- upsd: Stellt die Verbindung zu der USV her, nutzt dafür die Treiber und beantwortet Anfragen der Clients
- upsmon: UPS monitor, behält den Status der USV im Auge und handelt entsprechend Konfiguration wenn Batterielevel knapp
- upscmd: Admin-Tool um Befehle zu senden und die USV zu konfigurieren