Heute verabschieden wir uns von meiner USV. Meine alte APC Back-UPS 700 hat nach gut sechs Jahren mit einem piependen Dauerton den Dienst quittiert. Weil mein Homelab inzwischen gewachsen ist, sollte die nächste USV mehr Akku und mehr Ausgabeleistung in Watt mitbringen.
In diesem Artikel zeige ich, wie ich die neue Green Cell USV 2000VA, 1200W, Hersteller-Modell UPS05, trotzdem mit meinem NAS zusammenbringe. Das NAS erkennt das Gerät zwar, liest aber kaum brauchbare Werte aus. Die Lösung ist ein kleiner Umweg: Die USV hängt per USB an einem Mini-PC, ein NUT-Server in einem Docker-Container liest sie aus und stellt den Status über das Netzwerk bereit. Die Synology liest dann die Werte der USV per Netzwerk.
Nach den Schritten kennt die NAS den Zustand der USV wieder und kann sich rechtzeitig herunterfahren. Die Messwerte kannst du dir bei Bedarf zusätzlich in PeaNUT ansehen.
Warum die neue USV an der NAS fast nichts liefert
Die alte USV wurde an der NAS direkt erkannt und lieferte die erwarteten Informationen. Bei der neuen Green Cell USV 2000VA sieht es anders aus: Sie wird zwar erkannt, Synology liest jedoch nahezu keine Werte aus. Okay, das Gerät steht auch nicht in Synologys Kompatibilitätsliste für USV.
Erkannt heißt hier also nicht unterstützt. Die USB-Verbindung steht, doch Synology bekommt aus den Daten kaum etwas heraus. Für einen sauberen Shutdown reicht das vermutlich nicht, denn ohne Werte kann die NAS den Ladezustand nicht einschätzen.
Der Umweg über das Netzwerk
Statt die USV direkt an die NAS zu hängen, schließe ich sie an einen der Mini-PCs in meinem Homelab an. Den USB-Port mappe ich in Proxmox auf die Ubuntu-VM, in der ich den nut-upsd Docker Container laufen lassen werde. Unter Datacenter, Node, VM, Hardware, Add, USB-Device wähle ich die USV am besten mit Use USB Vendor/Device ID aus. Dann bleibt das Mapping bestehen, auch wenn die USV später an einem anderen USB-Port steckt.
In der VM läuft ein Container mit Network UPS Tools, kurz NUT. Der Treiber liest die USV per USB aus, der Daemon stellt den Status über das Netzwerk bereit. Synology verbindet sich anschließend nicht mehr mit einer USB-USV, sondern mit diesem NUT-Server.

Den Container einrichten
Als Basis nutze ich das Docker-Image von instantlinux/nut-upsd. Die Compose-Datei folgt der Struktur, mit der der Treiber bei mir funktioniert:
services:
nut-upsd:
container_name: nut-upsd
image: instantlinux/nut-upsd
environment:
- TZ=${TZ:-Europe/Berlin}
- "API_USER=admin"
- "API_PASSWORD=<passwort-admin>"
- "DESCRIPTION=Greencell Micropower 2000"
- "DRIVER=blazer_usb"
- "GROUP=nut"
- "NAME=ups"
- "PORT=auto"
- "SECRET=<secret>"
- "VENDORID=0001"
- "PRODUCTID=0000"
devices:
- /dev/bus/usb:/dev/bus/usb
volumes:
- "./nut:/etc/nut"
privileged: true
restart: always
ports:
- "3493:3493"Danach starte ich den Container einmal mit:
docker compose up -d
Die Konfiguration liegt anschließend im Verzeichnis ./nut auf dem Host. Dort passe ich upsd.users an. Neben dem Admin-Zugang für den Daemon tragen wir dort den Benutzer ein, den Synology erwartet:
[admin]
password = <passwort-admin>
upsmon primary
[monuser]
password = secret
upsmon slaveSynology bietet im DSM keine Möglichkeit, eigene Zugangsdaten einzutragen. Beim Verbinden nutzt Synology fest den Benutzer monuser und das Passwort secret. Das ist Synologys feste Vorgabe und kein Geheimnis aus meinem eigenen Aufbau.
In ups.conf muss die USV ebenfalls mit dem Namen ups angelegt sein:
[ups] driver = blazer_usb port = auto desc = "Greencell Micropower 2000" vendorid = 0001 default.battery.voltage.low = 20.8 default.battery.voltage.high = 27.0 default.battery.voltage.nominal = 24 runtimecal = 300,100,720,50
Der Name der Gruppe/das Device müssen ups heißen, sonst findet Synology die USV nicht. Die vier Zahlen in runtimecal und die drei Spannungswerte gehören zum 2000VA-Modell. Bei einem kleineren oder größeren Modell müssen diese Werte angepasst werden.
runtimecal = value,value,value,valueParameter used in the (optional) runtime estimation. This takes two runtimes at different loads. Typically, this uses the runtime at full load and the runtime at half load. For instance, if your UPS has a rated runtime of 240 seconds at full load and 720 seconds at half load, you would enter
runtimecal = 240,100,720,50Quelle: NUT manual on blazer_usb
Nach den Änderungen starte ich den Container neu, damit die Konfiguration eingelesen wird. Der Netzwerkdienst lauscht auf Port 3493.
Das NAS als Netzwerk-USV-Client
In DSM öffne ich Systemsteuerung, Hardware und Energie, USV. Als USV-Typ wähle ich Synology USV-Server und trage die IP-Adresse des Rechners ein, auf dem der Container läuft.

Was ich zuerst probiert habe
Eigentlich wollte ich zunächst Nutify verwenden. Das Projekt ließ sich bei mir jedoch nicht dazu bewegen, den NUT-Treiber zu laden. Mit denselben Treiber-Einstellungen lief nut-upsd sofort. Gewonnen hat am Ende das Werkzeug, das sich ohne Diskussion starten ließ.
Zum Anschauen der Werte nutze ich PeaNUT. Für einen kurzen Blick auf den Status reicht damit die Weboberfläche, ohne dass ich in die Kommandozeile muss.
Fazit
Die neue USV musste nicht zurück, nur weil das NAS aus der direkten USB-Verbindung kaum Informationen bekam. Mit USB-Passthrough auf die VM, NUT im Container und der NAS als Netzwerk-Client funktioniert die Trennung sauber: Der Mini-PC spricht mit der USV, die NAS bekommt den Status über das Netzwerk.
Wichtig sind dabei die Details, die leicht untergehen: das USB-Mapping per Vendor- und Device-ID, der Name ups, Synologys feste Zugangsdaten und die modellabhängigen Spannungs- und Laufzeitwerte. Wer diese Stellen korrekt setzt, muss der USV nicht mehr beim Piepen zuhören, um zu wissen, wie es ihr geht.



