USV-NUT Einstellungen Configuration

Markus 7

New Member
Jul 20, 2023
10
1
3
Hallo zusammen,

ich habe seit ein paar Wochen Proxmox für mich entdeckt und habe den privaten "Klassiker" ioBroker, InfluxDB und Grafana zur Hausautomation laufen. Basis ist ein kleiner Lenovo M910q, die einzelnen Programme laufen unter Proxmox in Containern. Soweit alles gut :)

Woran ich gerade verzweifle: Wie konfiguriere ich meine USV sinnvoll? Ich habe bereits sowohl den NUT Host als als auch Client installiert, die Abfrage der USV läuft problemlos über die Shell (mit upsc), in ioBroker und in meinen Synology NAS.

Ich habe bereits einige Parameter in der upsmon.conf nach diversen Anleitungen gesetzt, habe aber leider keine wirkliche Ahnung, ob das alles so sinnvoll ist, da ich sehr wenig deutsche Quellen über die NUT-Konfiguration und die einzelnen Befehle gefunden habe.

Folgendes ist aktuell in der upsmon.conf bei mir aktiv:

Code:
RUN_AS_USER upsmaster
MONITOR ups@192.168.0.200:3493 1 upsmaster upsmaster primary
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 10
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

NOTIFYMSG ONLINE        "UPS %s on line power"
NOTIFYMSG ONBATT        "UPS %s on battery"
NOTIFYMSG LOWBATT       "UPS %s battery is low"
NOTIFYMSG FSD           "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK        "Communications with UPS %s established"
NOTIFYMSG COMMBAD       "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN      "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT      "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM        "UPS %s is unavailable"
NOTIFYMSG NOPARENT      "upsmon parent process died - shutdown impossible"

NOTIFYFLAG ONLINE       SYSLOG+WALL
NOTIFYFLAG ONBATT       SYSLOG+WALL
NOTIFYFLAG LOWBATT      SYSLOG+WALL
NOTIFYFLAG FSD          SYSLOG+WALL
NOTIFYFLAG COMMOK       SYSLOG+WALL
NOTIFYFLAG COMMBAD      SYSLOG+WALL
NOTIFYFLAG SHUTDOWN     SYSLOG+WALL
NOTIFYFLAG REPLBATT     SYSLOG+WALL
NOTIFYFLAG NOCOMM       SYSLOG+WALL
NOTIFYFLAG NOPARENT     SYSLOG+WALL

RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

(die ganzen #-Remarks mit Erklärungen und Beispielen habe ich jetzt hier nicht mit aufgeführt).

Ich möchte im Prinzip folgende Parameter:

  • Bei Stromausfall 10 Sekunden Überbrückungszeit, bevor über NUT überhaupt eine Meldung an die Clients ausgegeben wird
  • Anschließend 10 Minuten Überbrückung, bevor der Proxmox-Server das Signal zum Herunterfahren bekommt (und damit erstmal seine VMs bzw. CTs herunterfährt, richtig?).
  • Alternativ bei 50% Batteriekapazität das System herunterfahren.

Der Befehl upcs gibt aktuell folgende Parameter aus:
Code:
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 20
battery.mfr.date: 1
battery.runtime: 1920
battery.runtime.low: 300
battery.type: PbAcid
battery.voltage: 27.0
battery.voltage.nominal: 24
device.mfr: 1
device.model: 2200
device.serial: 000000000000
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.version: 2.8.0
driver.version.data: CyberPower HID 0.6
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
input.frequency: 50.0
input.transfer.high: 290
input.transfer.low: 162
input.voltage: 233.0
input.voltage.nominal: 0
output.frequency: 50.0
output.voltage: 2.6
ups.beeper.status: disabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.load: 11
ups.mfr: 1
ups.model: 2200
ups.productid: 0601
ups.realpower.nominal: 1320
ups.serial: 000000000000
ups.status: OL
ups.timer.shutdown: -60
ups.timer.start: -60
ups.vendorid: 0764

Was muss ich in welche Datei schreiben, dass meine gewünschten Parameter Anwendung finden?

Viele Grüße
Markus
 
Da muss noch ein "+EXEC" für "ONLINE", "ONBATT" und "LOWBATT" sein, damit der dir ein Script ausführt, wenn die USB auf Akku geht, wieder ans Netz kommt oder der Akku gegen Ende geht. Dann halt das Script erstellen, was dann regelt, wann was passiert. Über die upssched.conf z.B. beim Wechsel von ONLINE auf ONBATT einen 10-minütigen Timer starten. Beim Wechsel von ONBATT auf ONLINE den Timer resetten lassen. Und wenn der Timer nach 10-Minuten dann triggert oder die UPS von ONBATT auf LOWBATT wechselt dann über das Script ein Shutdown oder "upsmon -c fsd" absetzen.
 
  • Like
Reactions: Markus 7
Da muss noch ein "+EXEC" für "ONLINE", "ONBATT" und "LOWBATT" sein, [...]

Danke für die Hinweise, Dunuin. Ich habe schon viel gesucht und versucht, wie und wo ich die entsprechenden Scripte erstellen oder konfigurieren kann. Leider erfolglos. Ich sollte vielleicht auch noch erwähnen, dass ich in Linux ein absoluter Newbie bin und mich gerade mit ein paar rudimentären Befehlen auf der Shell bewegen kann :(.

Muss ich in der upssched-cmd Datei was machen?

Gibt es hierzu vielleicht eine "einfache" Anleitung/Zusammenfassung, nach der ich mich durcharbeiten kann?
 
Last edited:
Die beiden Seite (und noch vieeeele mehr) kenne ich und hab meine Grundkonfiguration (NUT-Server/Client) daraus aufgebaut.
Nur eben die Befehle bzw. der Ablauf zum automatischen Abschalten fehlen mir und ich hätte auf eine Beispielsdatei gehofft, an der ich mich entlanghangeln kann.
 
Die beiden Seite (und noch vieeeele mehr) kenne ich und hab meine Grundkonfiguration (NUT-Server/Client) daraus aufgebaut.
Nur eben die Befehle bzw. der Ablauf zum automatischen Abschalten fehlen mir und ich hätte auf eine Beispielsdatei gehofft, an der ich mich entlanghangeln kann.
Ist doch da beschrieben:

upssched verwenden​

Dazu editiert man die Datei /etc/nut/upssched.conf oder legt sie neu an.

CMDSCRIPT /etc/nut/upssched/upsscript
Ist der Pfad zu dem Skript, was ausgeführt werden soll, wenn die Trigger (Schalter) gesetzt werden.

PIPEFN /etc/nut/upssched/upssched.pipe
LOCKFN /etc/nut/upssched/upssched.lock
Diese Dateien werden genutzt, um mit den Prozessen zu agieren. Sie werden automatisch erzeugt und gelöscht.

AT ONBATT * START-TIMER onbatt 90
AT ONLINE * CANCEL-TIMER onbatt
AT LOWBATT * EXECUTE battleer
In diesem Fall wird ein Timer gestartet, wenn die USV auf Batterie umschaltet. Dieser wartet 90 Sekunden, bevor er den Parameter onbatt an das CMDSCRIPT weiter gibt. Schaltet die USV wieder ONLINE, so wird der Timer abgebrochen. Wenn die USV Batterie niedrig ist, wird sofort das Skript mit dem Parameter battleer ausgeführt.

Beispiel-Skript für upssched​

Das Skript ist ein einfaches Beispiel für die Konfiguration:

1
2
3
4
5
6
7
8
9
#!/bin/sh
case $1 in
onbatt)
/sbin/shutdown -h +0;;
battleer)
/sbin/upssched fsd;;
*)
echo "Falscher Parameter";;
esac
Wenn du dem folgst schaltet dir der NUT server die NUT clients ab wenn die USV 90 sekunden auf Batterie läuft oder wenn der Akku deiner USV ans Limit kommt.
 
Last edited:
  • Like
Reactions: Markus 7
Ist doch da beschrieben:

Wenn du dem folgst schaltet dir der NUT server die NUT clients ab wenn die USV 90 sekunden auf Batterie läuft oder wenn der Akku deiner USV ans Limit kommt.

Danke, werde ich mal so probieren :)
 
Ist doch da beschrieben:

[...]

Ok ... ich habe die Datei /etc/nut/upssched.conf wie oben beschrieben bearbeitet und ein Verzeichnis /etc/nut/upssched/ angelegt, darin dann die Datei upssched-cmd mit folgendem Inhalt erstellt:

Code:
#!/bin/sh
case $1 in
  onbatt)
    /sbin/shutdown -h +0;;
  battleer)
    /sbin/upssched fsd;;
  *)
    echo "Falscher Parameter";;
esac

Soweit ok? Und wie geht es jetzt weiter? Sorry für die vielen Fragen, aber in den ganzen Hinweisen gibt es keine für mich schlüssige Schritt-für-Schritt-Anleitung. Ich hatte anfangs auch gehofft, über die nut-cgi mittels Webbrowser etwas komfortabler auf die Einstellungen zugreifen zu können. Nur habe ich das auch nicht hinbekommen.
 
Soweit ok?
Und in deiner upsmon.conf hast du auch schon das +EXEC gesetzt? Ohne das wird ein Event das Script nicht triggern. Also...
Code:
NOTIFYFLAG ONLINE       SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT       SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT      SYSLOG+WALL+EXEC

Dann mal rebooten und über systemctl status DeinJeweiligerService die ganzen NUT services abchecken, ob die ordnungsgemäß laufen. Und dann kann man mal den Stromstecker ziehen und gucken, on dann PVE runterfährt.

Und wie geht es jetzt weiter? Sorry für die vielen Fragen, aber in den ganzen Hinweisen gibt es keine für mich schlüssige Schritt-für-Schritt-Anleitung. Ich hatte anfangs auch gehofft, über die nut-cgi mittels Webbrowser etwas komfortabler auf die Einstellungen zugreifen zu können. Nur habe ich das auch nicht hinbekommen.
Wenn man einen Linux-Server administriert geht es auch nicht darum blind irgendwelche Befehle abzutippen, sondern soweit zu lernen, dass man versteht, was man da tut. Da heißt es dann Dokumentationen wälzen bis man genug Überblick hat und wenigstens alles grob nachvollziehen kann.
 
Und in deiner upsmon.conf hast du auch schon das +EXEC gesetzt? Ohne das wird ein Event das Script nicht triggern. Also...
Jupp, habe ich eingetragen. Der Vollständigkeitshalber hier nochmal meine upsmon.conf:

Code:
RUN_AS_USER name
MONITOR ups@192.168.0.200:3493 1 name passwort primary
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 10
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

NOTIFYMSG ONLINE        "UPS %s on line power"
NOTIFYMSG ONBATT        "UPS %s on battery"
NOTIFYMSG LOWBATT       "UPS %s battery is low"
NOTIFYMSG FSD           "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK        "Communications with UPS %s established"
NOTIFYMSG COMMBAD       "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN      "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT      "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM        "UPS %s is unavailable"
NOTIFYMSG NOPARENT      "upsmon parent process died - shutdown impossible"

NOTIFYFLAG ONLINE       SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT       SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT      SYSLOG+WALL+EXEC
NOTIFYFLAG FSD          SYSLOG+WALL
NOTIFYFLAG COMMOK       SYSLOG+WALL
NOTIFYFLAG COMMBAD      SYSLOG+WALL
NOTIFYFLAG SHUTDOWN     SYSLOG+WALL
NOTIFYFLAG REPLBATT     SYSLOG+WALL
NOTIFYFLAG NOCOMM       SYSLOG+WALL
NOTIFYFLAG NOPARENT     SYSLOG+WALL

RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5


Die USV kann ich mit upsc abfragen:

Code:
markus@pve:~$ upsc ups@192.168.0.200

Init SSL without certificate database
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 20
battery.mfr.date: 1
battery.runtime: 1920
battery.runtime.low: 300
battery.type: PbAcid
battery.voltage: 27.0
battery.voltage.nominal: 24
device.mfr: 1
device.model: 2200
device.serial: 000000000000
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.version: 2.8.0
driver.version.data: CyberPower HID 0.6
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
input.frequency: 50.0
input.transfer.high: 290
input.transfer.low: 162
input.voltage: 233.0
input.voltage.nominal: 0
output.frequency: 50.0
output.voltage: 0.6
ups.beeper.status: disabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.load: 6
ups.mfr: 1
ups.model: 2200
ups.productid: 0601
ups.realpower.nominal: 1320
ups.serial: 000000000000
ups.status: OL
ups.timer.shutdown: -60
ups.timer.start: -60
ups.vendorid: 0764

Problem: Wenn ich upsd abfrage, bekomme ich einen Fehler:

Code:
markus@pve:~$ sudo upsd

Network UPS Tools upsd 2.8.0
fopen /run/nut/upsd.pid: No such file or directory
Could not find PID file '/run/nut/upsd.pid' to see if previous upsd instance is already running!

not listening on 192.168.0.200 port 3493
not listening on 127.0.0.1 port 3493
no listening interface available

Ist das problematisch? Den Steckerziehtest werde ich morgen durchführen.

Wenn man einen Linux-Server administriert geht es auch nicht darum blind irgendwelche Befehle abzutippen, sondern soweit zu lernen, dass man versteht, was man da tut.

Ja, da gebe ich dir natürlich recht, nur habe ich nicht die Zeit und Muße, mich zuerst ohne jeglichen Praxisbezug und Linux-Maschine hinzusetzen und zu lesen und zu lernen. Da ich mir es ja im Grunde "leisten" kann, auch mal eine produktive Linux-Installation in den Sand zu setzen, probiere und lerne ich halt an meinem Live-System.
Vor 1/2 Jahr wusste ich noch nicht einmal, wie man sich über ssh auf einer Konsole anmeldet und die letzten Monate habe ich Proxmox mit ioBroker, InfluxDB und Grafana-Maschinen installiert, konfiguriert und halte sie im Großen und Ganzen auch fehlerfrei am Laufen.
Mit jedem Tag lerne und verstehe ich besser, was ich wie und warum tue, auch und gerade mit Hilfestellungen wie deinen hier :)
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!