Greencell USV an Synology: Wenn NAS und USV nicht miteinander reden

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.

Die USV liefert ihre Daten per USB an den Mini-PC, NUT stellt sie für NAS und PeaNUT im Netzwerk bereit.
Die USV liefert ihre Daten per USB an den Mini-PC, NUT stellt sie für NAS und PeaNUT im Netzwerk bereit.

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 slave

Synology 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,value
Parameter 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,50
Quelle: 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.

USV-Einstellungen in DSM als Netzwerk-USV-Client
USV-Einstellungen in DSM als Netzwerk-USV-Client

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.

Raffi

Seit 2011 blogge ich hier über Programmierung, meine Software, schreibe Tutorials und versuche mein Wissen, so gut es geht, mit meinen Lesern zu teilen.

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Sie dient nur dem Spamschutz.