====== USV NUT-Master für APC Smart-UPS SMC1500IC unter Ubuntu einrichten ======
===== Ziel =====
Die APC Smart-UPS SMC1500IC wird über ein USB-Datenkabel mit einem Ubuntu-Server verbunden.
Dieser Server übernimmt folgende Aufgaben:
* Auslesen des USV-Status\\
* Erkennen eines Stromausfalls\\
* Kontrolliertes Herunterfahren des lokalen Servers\\
* Bereitstellen der USV-Informationen für weitere Server im Netzwerk
Der direkt mit der USV verbundene Rechner wird in dieser Anleitung als **NUT-Master** bezeichnet.
\\
Das USB-Datenkabel der USV muss direkt mit dem Ubuntu-Server verbunden sein.
Der SmartConnect-Netzwerkanschluss ersetzt die USB-Verbindung für NUT nicht.\\
===== Voraussetzungen =====
* APC Smart-UPS SMC1500IC\\
* Ubuntu 22.04 oder Ubuntu 24.04\\
* USB-Datenkabel zwischen USV und Server\\
* Feste IP-Adresse für den NUT-Master\\
* Root- oder sudo-Berechtigung
Beispiel-IP des NUT-Masters: 192.168.1.20\
Diese Adresse muss durch die tatsächliche IP-Adresse des Servers ersetzt werden.
===== 1. USB-Verbindung prüfen =====
Die USV mit dem USB-Datenkabel an den Ubuntu-Server anschließen.
Anschließend prüfen, ob die USV erkannt wird:
lsusb | grep -i -E 'APC|American Power Conversion'
Eine mögliche Ausgabe lautet:
Bus 001 Device 004: ID 051d:0003 American Power Conversion \UPS
Die Bus- und Gerätenummern können abweichen.
Die Kennung ''051d'' steht für APC beziehungsweise American Power Conversion.
===== 2. NUT installieren =====
Paketquellen aktualisieren:
sudo apt \update
NUT-Server und NUT-Client installieren:
sudo apt install nut-server nut-\client
Installierte Version anzeigen:
apt-cache policy nut-\server
===== 3. Vorhandene Konfiguration sichern =====
Vor Änderungen sollte das komplette NUT-Konfigurationsverzeichnis gesichert werden:
sudo cp -a /etc/nut "/etc/nut.backup.$(date +%F-%H%M%S)"
Die Sicherung befindet sich anschließend beispielsweise unter:
/etc/nut.backup.2026-07-19-\110000
===== 4. NUT-Betriebsart einstellen =====
Die Datei ''/etc/nut/nut.conf'' öffnen:
sudo nano /etc/nut/nut.\conf
Folgende Einstellung eintragen:
MODE=\netserver
Bei ''MODE=netserver'' werden der USV-Treiber, der NUT-Datenserver und der lokale Überwachungsdienst gestartet.
Zusätzlich können andere Server im Netzwerk auf die USV-Informationen zugreifen.
Beim Eintrag dürfen um das Gleichheitszeichen keine Leerzeichen stehen.
Richtig:
MODE=\netserver
Falsch:
MODE = \netserver
===== 5. APC-USV konfigurieren =====
Die Datei ''/etc/nut/ups.conf'' öffnen:
sudo nano /etc/nut/ups.\conf
Folgenden Abschnitt eintragen:
[apc]
driver = usbhid-\ups
port = \auto
vendorid = \051d
desc = "APC Smart-UPS SMC1500IC"
Bedeutung der Einstellungen:
^ Einstellung ^ Bedeutung ^
| ''[apc]'' | Interner Name der USV |\\
| ''driver'' | USB-HID-Treiber für kompatible APC-USV-Geräte |\\
| ''port = auto'' | Automatische Erkennung des USB-Anschlusses |\\
| ''vendorid = 051d'' | USB-Herstellerkennung von APC |\\
| ''desc'' | Frei wählbare Beschreibung |
Wenn mehrere APC-USV-Geräte am selben Server angeschlossen sind, kann zusätzlich die Produkt-ID angegeben werden:
\\
productid = 0003\\
Eine vollständige Konfiguration kann dann so aussehen:
[apc]
driver = usbhid-\ups
port = \auto
vendorid = \051d
productid = \0003
desc = "APC Smart-UPS SMC1500IC"
===== 6. IP-Adresse des Servers feststellen =====
Die vorhandenen Netzwerkadressen anzeigen:
ip -br \address
Beispiel:
enp3s0 UP 192.168.1.20/\24
docker0 UP 172.17.0.1/\16
Für NUT muss die normale LAN-Adresse verwendet werden:
192.168.1.\20
Nicht verwendet werden sollte eine interne Docker-Adresse wie:
172.17.0.\1
===== 7. NUT-Netzwerkdienst konfigurieren =====
Die Datei ''/etc/nut/upsd.conf'' öffnen:
sudo nano /etc/nut/upsd.\conf
Folgende Zeilen eintragen:
LISTEN 127.0.0.1 \3493
LISTEN 192.168.1.20 \3493
Dabei muss ''192.168.1.20'' durch die tatsächliche LAN-IP-Adresse des Servers ersetzt werden.
NUT verwendet standardmäßig den TCP-Port:
\3493
Die erste Zeile erlaubt lokale Zugriffe:
LISTEN 127.0.0.1 \3493
Die zweite Zeile erlaubt Zugriffe aus dem lokalen Netzwerk:
LISTEN 192.168.1.20 \3493
===== 8. NUT-Benutzer und Passwörter anlegen =====
Für den lokalen Master und die Netzwerk-Clients sollten unterschiedliche Passwörter verwendet werden.
Zwei Passwörter erzeugen:
openssl rand -hex \24
Den Befehl zweimal ausführen und beide Passwörter sicher speichern.
Die Datei ''/etc/nut/upsd.users'' öffnen:
sudo nano /etc/nut/upsd.\users
==== Ubuntu 22.04 beziehungsweise NUT 2.7 ====
[monmaster]
password = \MASTER_PASSWORT_HIER_EINTRAGEN
upsmon master
[monclient]
password = \CLIENT_PASSWORT_HIER_EINTRAGEN
upsmon \slave
==== Ubuntu 24.04 beziehungsweise NUT 2.8 ====
[monmaster]
password = \MASTER_PASSWORT_HIER_EINTRAGEN
upsmon primary
[monclient]
password = \CLIENT_PASSWORT_HIER_EINTRAGEN
upsmon \secondary
Die Platzhalter müssen durch echte Passwörter ersetzt werden.
Die Passwörter sollten nicht in einer öffentlich zugänglichen Dokumentation gespeichert werden.
===== 9. Lokalen NUT-Monitor konfigurieren =====
Die Datei ''/etc/nut/upsmon.conf'' öffnen:
sudo nano /etc/nut/upsmon.\conf
Vorhandene aktive ''MONITOR''-Zeilen sollten auskommentiert oder entfernt werden.
==== Ubuntu 22.04 beziehungsweise NUT 2.7 ====
MONITOR apc@localhost 1 monmaster MASTER_PASSWORT_HIER_EINTRAGEN master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POWERDOWNFLAG /etc/\killpower
==== Ubuntu 24.04 beziehungsweise NUT 2.8 ====
MONITOR apc@localhost 1 monmaster MASTER_PASSWORT_HIER_EINTRAGEN primary
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POWERDOWNFLAG /etc/\killpower
Das Passwort muss mit dem Passwort des Benutzers ''monmaster'' in ''/etc/nut/upsd.users'' übereinstimmen.
Bedeutung der wichtigsten Einträge:
^ Einstellung ^ Bedeutung ^
| ''apc@localhost'' | USV mit dem Namen ''apc'' auf dem lokalen Server |\\
| ''1'' | Power-Wert der USV |\\
| ''monmaster'' | Benutzer aus ''upsd.users'' |\\
| ''master'' beziehungsweise ''primary'' | Rolle des direkt angeschlossenen Servers |\\
| ''MINSUPPLIES 1'' | Mindestens eine Stromversorgung muss verfügbar sein |\\
| ''SHUTDOWNCMD'' | Befehl zum Herunterfahren des Servers |\\
| ''POWERDOWNFLAG'' | Kennzeichnung für das spätere Abschalten der USV |
===== 10. Dateirechte absichern =====
Die Konfigurationsdateien enthalten Passwörter und sollten nur für root und die Gruppe ''nut'' lesbar sein.
\\
sudo chown root:nut /etc/nut/upsmon.conf /etc/nut/upsd.users\\
sudo chmod 640 /etc/nut/upsmon.conf /etc/nut/upsd.\users
Dateirechte kontrollieren:
ls -l /etc/nut/upsmon.conf /etc/nut/upsd.\users
Eine mögliche Ausgabe lautet:
-rw-r----- 1 root nut /etc/nut/upsd.\users
-rw-r----- 1 root nut /etc/nut/upsmon.\conf
===== 11. NUT-Dienste starten =====
==== Ubuntu 22.04 ====
Dienste aktivieren:
sudo systemctl enable nut-server nut-\monitor
NUT-Server neu starten:
sudo systemctl restart nut-\server
NUT-Monitor neu starten:
sudo systemctl restart nut-\monitor
Status anzeigen:
systemctl --no-pager --full status nut-server nut-\monitor
==== Ubuntu 24.04 ====
Unter NUT 2.8 wird zusätzlich der Driver Enumerator verwendet.
sudo systemctl restart nut-driver-enumerator.\service
sudo systemctl restart nut-server.\service
sudo systemctl restart nut-monitor.\service
Status anzeigen:
systemctl --no-pager --full status nut-driver-enumerator.service nut-server.service nut-monitor.\service
===== 12. USV-Status prüfen =====
Alle verfügbaren USV-Werte anzeigen:
upsc apc@\localhost
Einzelne Werte abfragen:
upsc apc@localhost ups.\model
upsc apc@localhost ups.\status
upsc apc@localhost battery.\charge
upsc apc@localhost battery.\runtime
upsc apc@localhost ups.\load
Bei normalem Netzbetrieb sollte der Status Folgendes enthalten:
OL
Wichtige Statusmeldungen:
^Status^Bedeutung| | | | | | | | | | | | | | | | | | | | | |
|''OL'' |Online: Netzversorgung vorhanden| |''OB'' |On Battery: USV läuft auf Batterie| |''LB'' |Low Battery: Batterie fast leer| |''RB'' |Replace Battery: Batterie sollte ersetzt werden| |''CHRG'' |Batterie wird geladen| |''DISCHRG'' |Batterie wird entladen| |''OVER'' |USV ist überlastet| |''OFF'' |USV-Ausgang ist ausgeschaltet|
Mehrere Statuswerte können gleichzeitig angezeigt werden.
Beispiel:
\
OL CHRG\
Das bedeutet:
* Netzversorgung \vorhanden * Batterie wird geladen
===== 13. Netzwerkzugriff mit UFW erlauben =====
Wenn UFW aktiv ist, sollte der NUT-Port nur für das interne Servernetz freigegeben werden.
Beispiel für das Netzwerk ''192.168.1.0/24'':
sudo ufw allow from 192.168.1.0/24 to any port 3493 proto \tcp
Firewallstatus prüfen:
sudo ufw \status
Prüfen, ob NUT auf Port 3493 lauscht:
sudo ss -ltnp | grep \3493
Eine mögliche Ausgabe lautet:
LISTEN 0 16 127.0.0.1:\3493
LISTEN 0 16 192.168.1.20:\3493
===== 14. Zugriff von einem anderen Server testen =====
Auf dem zweiten Ubuntu-Server den NUT-Client installieren:
sudo apt \update
sudo apt install nut-\client
Status des NUT-Masters abfragen:
upsc apc@192.168.1.\20
Wenn die Verbindung funktioniert, werden die USV-Werte angezeigt.
Falls folgende Meldung erscheint:
Error: Connection failure: Connection \refused
sollten folgende Punkte kontrolliert werden:
* Ist ''nut-server'' gestartet?
* Ist die richtige IP in ''upsd.conf'' eingetragen?
* Ist TCP-Port 3493 durch die Firewall freigegeben?
* Ist die IP-Adresse vom Client erreichbar?
===== 15. Vorsichtiger Stromausfalltest =====
Vor dem Test sollte die Batterie vollständig geladen sein.
Die wichtigsten Werte laufend anzeigen:
watch -n 2 'upsc apc@localhost ups.status; upsc apc@localhost battery.charge; upsc apc@localhost battery.runtime'
Anschließend nur den **Netzeingang der USV** kurz vom Stromnetz trennen.
Dabei sollten folgende Änderungen sichtbar sein:
^ Zustand ^ Erwarteter Status ^
| Netzstrom vorhanden | ''OL'' |\\
| Netzstrom getrennt | ''OB'' |\\
| Netzstrom wiederhergestellt | ''OL'' |
Die angeschlossenen Server müssen während des kurzen Tests weiterlaufen.
\\
Nicht die Ausgangsstecker der Server abziehen.
Nur den Netzanschluss der USV testweise vom Stromnetz trennen.\\
===== 16. Gefährliche Testbefehle vermeiden =====
Der folgende Befehl darf nicht während des normalen Betriebs testweise ausgeführt werden:
upsdrvctl shutdown
Dieser Befehl kann den Ausgang der USV abschalten.
Dadurch verlieren alle an der USV angeschlossenen Geräte unmittelbar ihre Stromversorgung.
===== 17. Fehlerdiagnose =====
Ubuntu-Version anzeigen:
lsb_release -\a
USB-Geräte anzeigen:
lsusb
Status der Dienste anzeigen:
sudo systemctl status nut-server nut-monitor --no-\pager
Systemprotokoll anzeigen:
sudo journalctl -u nut-server -u nut-monitor -n 100 --no-\pager
Unter Ubuntu 24.04 zusätzlich:
sudo journalctl -u nut-driver-enumerator.service -u nut-server.service -u nut-monitor.service -n 150 --no-\pager
==== Fehler: Driver failed to start ====
Treiber stoppen:
sudo upsdrvctl \stop
Treiber testweise im Debug-Modus starten:
sudo /lib/nut/usbhid-ups -a apc -\DDD
Den Debug-Modus mit ''Strg+C'' beenden.
Danach den normalen Dienst wieder starten:
sudo systemctl restart nut-\server
==== Fehler: Can't claim USB device ====
Prüfen, ob ein anderer USV-Dienst auf das Gerät zugreift:
ps aux | grep -E 'apcupsd|usbhid-ups|upsd|upsmon'
Falls ''apcupsd'' installiert ist, kann es zu einem Konflikt kommen.
Status prüfen:
systemctl status \apcupsd
Falls NUT verwendet werden soll, ''apcupsd'' stoppen und deaktivieren:
sudo systemctl disable --now \apcupsd
Danach NUT neu starten:
sudo systemctl restart nut-server nut-\monitor
==== Fehler: Data stale ====
Treiberstatus prüfen:
sudo systemctl status nut-server --no-\pager
Protokoll prüfen:
sudo journalctl -u nut-server -n 100 --no-\pager
USB-Gerät prüfen:
lsusb | grep -i -E 'APC|American Power Conversion'
USB-Kabel und Batterieanschluss der USV kontrollieren.
===== 18. Konfigurationsdateien im Überblick =====
^ Datei ^ Aufgabe ^
| ''/etc/nut/nut.conf'' | Legt die NUT-Betriebsart fest |\\
| ''/etc/nut/ups.conf'' | Definiert die angeschlossene USV und den Treiber |\\
| ''/etc/nut/upsd.conf'' | Legt Netzwerkadressen und Port des NUT-Servers fest |\\
| ''/etc/nut/upsd.users'' | Definiert Benutzer, Passwörter und Berechtigungen |\\
| ''/etc/nut/upsmon.conf'' | Konfiguriert Überwachung und automatisches Herunterfahren |
===== 19. Beispiel einer vollständigen Konfiguration =====
==== /etc/nut/nut.conf ====
MODE=netserver
==== /etc/nut/ups.conf ====
[apc]
driver = usbhid-ups
port = auto
vendorid = 051d
desc = "APC Smart-UPS SMC1500IC"
==== /etc/nut/upsd.conf ====
LISTEN 127.0.0.1 3493\
LISTEN 192.168.1.20 3493\
==== /etc/nut/upsd.users für Ubuntu 22.04 ====
[monmaster]
password = MASTER_PASSWORT_HIER_EINTRAGEN\
upsmon master
[monclient]
password = CLIENT_PASSWORT_HIER_EINTRAGEN\
upsmon slave
==== /etc/nut/upsmon.conf für Ubuntu 22.04 ====
MONITOR apc@localhost 1 monmaster MASTER_PASSWORT_HIER_EINTRAGEN master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POWERDOWNFLAG /etc/killpower
===== Ergebnis =====
Nach erfolgreicher Einrichtung sollte folgender Befehl die USV-Daten anzeigen:
upsc apc@localhost
Bei normaler Netzversorgung sollte unter anderem folgender Status erscheinen:
ups.status: OL
Der NUT-Master kann nun:
* die APC Smart-UPS SMC1500IC überwachen\\
* einen Stromausfall erkennen\\
* den lokalen Ubuntu-Server herunterfahren\\
* weitere NUT-Clients im Netzwerk versorgen