USB USV mit Raspi Remote fähig machen

Die Twitter Anfrage meines lieben Kollegen @vmw_rguske brachte mich dazu mich mal wieder um meine USVs zu kümmern. Dabei muss wohl irgendwas schief gegangen sein, denn keine meiner USVs war mehr vernünftig erreichbar.

Daher setze ich nun die USVs neu auf.

Der Ansatz ist, die APC USVs (XS 1400) mittels je eines Raspberry Pis remote fähig zu machen.

Ich nutze zwei dieser Modelle, da ich sowohl meine Server, als auch mein Netzwerk Rack Puffern möchte. Diese Geräte sind preislich interessant, bieten aber nur USB Anschlüsse. Daher muss für das Remote Management eine Lösung her. Der einfachste Ansatz ist, dies via NUT zu machen, da hier viele USVs unterstützt werden und der Aufsatz einfach geht.

Raspi Vorbereitung

Zunächst wird der Raspi mit dem aktuellen Raspien OS Image bespielt. Die Lite Version reicht hier völlig aus. Die SD Karte wird wie bekannt mittels BalenaEtcher bespielt. Der Raspi steckt in einem selbst gedruckten Gehäuse.

Raspi im Gehäuse

Erste Amtshandlung nach der Installation ist natürlich das Upgrade mittels „sudo apt update;sudo apt -y upgrade“. Danach folgen einige obligatorische Einstellungen:

  • SSH aktivieren
  • Lokalisation auf de_DE (eigentlich optional, da Zugang via SSH)
  • Zeitzone auf Europe/Berlin
  • WLAN via dtoverlay=disable-wifi in /boot/config.txt deaktivieren (der Raspi hängt am LAN)
  • Fixe IP setzen (DNS Eintrag nicht vergessen, bzw. überprüfen) (/etc/dhcpcd.conf)
  • Login via SSH; ändern des standard PW
  • Ändern des Hostname (/etc/hostname)
  • NTP installieren
  • ntp.conf auf lokalen NTP Server umbiegen (/etc/ntp.conf)
  • Syslog Meldungen an Loginsight Server schicken (/etc/rsyslog.conf)

NUT Konfigurieren

Nachdem die vorarbeiten erledigt sind, werden die USVs an den Raspi angeschlossen.

In meiner früheren Konfiguration konnte NUT nicht mit zwei identischen USVs umgehen. Ich habe mir vorgenommen, dieses mal mit einem USV Server beide USVs zu verwalten.

Also, erstmal die USVs mittels USB anschliessen und schauen, ob sie gefunden wurden:

root@usv1:/home/pi# lsusb
 Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
 Bus 001 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
 Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
 Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Voilá. Nun nochmals das Kommando im verbose mode, damit man an die Seriennummern kommt, da diese für die Unterscheidung benötigt wird.

root@usv1:/home/pi# lsusb -d 051d:002 -v
 Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
 Device Descriptor:
   bLength                18
   bDescriptorType         1
   bcdUSB               1.10
   bDeviceClass            0
   bDeviceSubClass         0
   bDeviceProtocol         0
   bMaxPacketSize0         8
   idVendor           0x051d American Power Conversion
   idProduct          0x0002 Uninterruptible Power Supply
   bcdDevice            1.06
   iManufacturer           3 American Power Conversion
   iProduct                1 Back-UPS XS 1400U  FW:926.T2 .I USB FW:T2
   iSerial                 2 4B1935P13171
   bNumConfigurations      1
   Configuration Descriptor:
     bLength                 9
     bDescriptorType         2
     wTotalLength       0x0022
     bNumInterfaces          1
     bConfigurationValue     1
     iConfiguration          0
     bmAttributes         0xe0
       Self Powered
       Remote Wakeup
     MaxPower               24mA
     Interface Descriptor:
       bLength                 9
       bDescriptorType         4
       bInterfaceNumber        0
       bAlternateSetting       0
       bNumEndpoints           1
       bInterfaceClass         3 Human Interface Device
       bInterfaceSubClass      0
       bInterfaceProtocol      0
       iInterface              0
         HID Device Descriptor:
           bLength                 9
           bDescriptorType        33
           bcdHID               1.10
           bCountryCode           33 US
           bNumDescriptors         1
           bDescriptorType        34 Report
           wDescriptorLength    1028
          Report Descriptors:
            ** UNAVAILABLE **
       Endpoint Descriptor:
         bLength                 7
         bDescriptorType         5
         bEndpointAddress     0x81  EP 1 IN
         bmAttributes            3
           Transfer Type            Interrupt
           Synch Type               None
           Usage Type               Data
         wMaxPacketSize     0x0006  1x 6 bytes
         bInterval              10
 can't get debug descriptor: Resource temporarily unavailable
 Device Status:     0x0000
   (Bus Powered)
 Bus 001 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
 Device Descriptor:
   bLength                18
   bDescriptorType         1
   bcdUSB               1.10
   bDeviceClass            0
   bDeviceSubClass         0
   bDeviceProtocol         0
   bMaxPacketSize0         8
   idVendor           0x051d American Power Conversion
   idProduct          0x0002 Uninterruptible Power Supply
   bcdDevice            1.06
   iManufacturer           3 American Power Conversion
   iProduct                1 Back-UPS XS 1400U  FW:926.T2 .I USB FW:T2
   iSerial                 2 4B1838P40056
   bNumConfigurations      1
   Configuration Descriptor:
     bLength                 9
     bDescriptorType         2
     wTotalLength       0x0022
     bNumInterfaces          1
     bConfigurationValue     1
     iConfiguration          0
     bmAttributes         0xe0
       Self Powered
       Remote Wakeup
     MaxPower               24mA
     Interface Descriptor:
       bLength                 9
       bDescriptorType         4
       bInterfaceNumber        0
       bAlternateSetting       0
       bNumEndpoints           1
       bInterfaceClass         3 Human Interface Device
       bInterfaceSubClass      0
       bInterfaceProtocol      0
       iInterface              0
         HID Device Descriptor:
           bLength                 9
           bDescriptorType        33
           bcdHID               1.10
           bCountryCode           33 US
           bNumDescriptors         1
           bDescriptorType        34 Report
           wDescriptorLength    1028
          Report Descriptors:
            ** UNAVAILABLE **
       Endpoint Descriptor:
         bLength                 7
         bDescriptorType         5
         bEndpointAddress     0x81  EP 1 IN
         bmAttributes            3
           Transfer Type            Interrupt
           Synch Type               None
           Usage Type               Data
         wMaxPacketSize     0x0006  1x 6 bytes
         bInterval              10
 can't get debug descriptor: Resource temporarily unavailable
 Device Status:     0x0000
   (Bus Powered)

Nun können wir NUT installieren. Für den Raspi existiert bereits ein Paket, daher können wir direkt mit „apt install nut“ die software installieren.

Die Konfiguration liegt in /etc/nut.

Es gibt folgende Dateien (Der default Inhalt beschreibt den Zweck und die Syntax genauer):

DateiZweck
nut.confModus von NUT. In unserem Fall: MODE=netserver
ups.confAnbindung der USVs. Näheres hier -> Treiber auswählen (oder Modell) und dem Treiber Link für Details folgen.
upsd.confZugriffskontrolle für den NUT Deamon
upsd.usersDefinition der User mit Berechtigungsschema für uspsd.conf. Hier können für verschiedene Zwecke unterschiedliche Benutzer angelegt werden.
upsmon.confKonfiguration des UPS Monitor
upssched.confTasks, die in den verschiedenen USV Stati durchgeführt werden (z.B. Shutdown der Slaves)
NUT Konfigurationsfiles

Nachdem die Konfigurationen durchgeführt sind, sind sowohl der Server als auch der Client zu starten (service nut-server start; service nut-client start).

Mittels upsc kann die aktuelle Konfiguration und der Zustand der USV geprüft werden.

Der wichtige Schritt ist bei mir, dass die Synology NAS die USV, von der sie Strom bekommt auch erreicht. Hierzu ist folgendes in den Konfigurationsdateien zu definieren:

[ups]
driver = usbhid-ups
port = auto
serial = Seriennummer
desc = "Netzwerk und Storage UPS"

ups.conf

LISTEN "IP des NUT Servers" 3493
LISTEN 127.0.0.1 3493

upsd.conf

[monuser]
password = secret
upsmon master

upsd.users

Synology verlangt eine UPS, die via ups@nutserver erreichbar ist und den user „monuser“ das Passwort „secret“ nutzt. Daher diese fixen Einstellungen. Damit die Synology auch an den Server ran kommt, sind die IP Adressen, auf denen der upsd startet, zu definieren. Damit der NUT Server auch selbst Maßnahmen ergreifen kann, sind sowohl 127.0.0.1, als auch die öffentliche IP des Systems zu definieren.

Wichtig ist, dass über upssched die detaillierten Actions definiert werden, die ausgeführt werden, wenn ein Stromausfall eintritt.

Der nächste Schritt ist , den Zustand der USVs via Web sichtbar zu machen und auch die USV Einstellungen via Web ändern zu können.

Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert