Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Mittwoch
06
Juni 2018

Ubuntu - APC BackUPS USV

Nachdem neulich der FI-Schutzschalter ausgelöst hatte und damit die komplette Wohnung inklusive aller Server aus war habe ich beschlossen dass eine USV her muss. Habe mich für ein günstiges Modell, der APC BackUSV 950 entschieden.

Habe bisher noch nicht herausgefunden wie diese extremen Preisunterschiede bei den USV zustandekommen. Dieses Modell hier ist, was das Gehäuse angeht, ziemlich spartanisch. Keine Anzeige wie lang der Akku noch hält noch sonst irgendwelche Informationen. Lediglich die Betriebsanzeigeleuchte und eine Akku-Tauschen Leuchte. Sämtliche Informationen über das Gerät sind nur über USB abzufragen, was für mich OK ist.

Gerät per USB verbinden

Um sicherzustellen dass die USV tatsächlich erkannt wurde kann man nach dem Einstecken des USB Kabels die Ausgabe von

Bash
lsusb

ansehen. Dort sollte dann sowas stehen wie:

Bus 002 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply

Wenn nicht hilft manchmal die Ausgabe von dmesg weiter.

Dienst installieren

Für Windows liefert APC Software für die USV mit, unter Linux benötigt man dafür das Paket apcupsd. Dieses kann man folgendermaßen aus dem Paketquellen installieren:

Bash
sudo apt-get install apcupsd

Konfiguration

Konfiguriert wird der Dienst über die Datei /etc/apcupsd/apcupsd.conf.

Bash
sudo nano /etc/apcupsd/apcupsd.conf

Folgede Einstellungen habe ich für die Back-UPS 950 an dem Rechner an dem die USV direkt angeschlossen ist verwendet:

UPSNAME Back-UPS 950
UPSCABLE usb
UPSTYPE usb
DEVICE
LOCKFILE /var/lock
SCRIPTDIR /etc/apcupsd
PWRFAILDIR /etc/apcupsd
NOLOGINDIR /etc
ONBATTERYDELAY 6
BATTERYLEVEL 5
MINUTES 5
TIMEOUT 0
ANNOY 0
ANNOYDELAY 0
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
STATTIME 0
LOGSTATS off
DATATIME 0

Anschließend muss man noch in der Datei /etc/default/apcupsd folgende Zeile ändern:

ISCONFIGURED=yes

Nach der Konfiguration kann der Dienst gestartet werden.

Bash
sudo /etc/init.d/apcupsd start

Gui installieren

Es gibt eine Web-GUI um den aktuellen Status der USV anzuzeigen. Installiert wird die UI mittels:

Bash
sudo apt-get install apcupsd-cgi apcupsd-doc 

Damit das CGI Script ausgeführt werden kann muss das Apache-Modul installiert und aktiviert sein. Dies macht man mit:

Bash
sudo a2enmod cgi 

Die Web-UI ist anschließend unter http://myserver/cgi-bin/apcupsd/multimon.cgi erreichbar.

Testen

Um die USV zu testen gibt es da kleine Kommandozeilenwerkeug apctest. Bevor man das Programm ausführen kann muss allerdings der Dienst angehalten werden.

Bash
sudo systemctl stop acupsd
sudo apctest

Das Prorgamm meldet sich mit einer Auswahl an Tests:

2018-06-07 19:18:37 apctest 3.14.10 (13 September 2011) debian
Checking configuration ...
Attached to driver: usb
sharenet.type =
cable.type = USB Cable
mode.type = USB UPS Driver
Setting up the port ...
Doing prep_device() ...

You are using a USB cable type, so I'm entering USB test mode
Hello, this is the apcupsd Cable Test program.
This part of apctest is for testing USB UPSes.

Getting UPS capabilities...SUCCESS

Please select the function you want to perform.

1)  Test kill UPS power
2)  Perform self-test
3)  Read last self-test result
4)  View/Change battery date
5)  View manufacturing date
6)  View/Change alarm behavior
7)  View/Change sensitivity
8)  View/Change low transfer voltage
9)  View/Change high transfer voltage
10) Perform battery calibration
11) Test alarm
12) View/Change self-test interval
 Q) Quit

Select function number:

Nicht vergessen den Dienst anschließend wieder zu starten.

Bash
sudo service acupsd start

Wenn man den NIS Server wie in der Konfig weiter oben aktiviert hat (NETSERVER on), kann man die NAS Daten auch mit dem Programm apcaccess abfragen.

Bash
apcaccess status

Der Befehl liefert folgende Ausgabe:

APC : 001,037,0896
DATE : 2018-06-07 19:30:30 +0200
HOSTNAME : SRV
VERSION : 3.14.10 (13 September 2011) debian
UPSNAME : Back-UPS 950
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE :
STARTTIME: 2018-06-07 19:21:53 +0200
SHARE :
MODEL : Back-UPS XS 950U
STATUS : ONLINE
LINEV : 228.0 Volts
LOADPCT : 12.0 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 50.4 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 5 Minutes
MAXTIME : 0 Seconds
SENSE : Medium
LOTRANS : 155.0 Volts
HITRANS : 280.0 Volts
ALARMDEL : 30 seconds
BATTV : 13.4 Volts
LASTXFER : Low line voltage
NUMXFERS : 0
TONBATT : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x07000008 Status Flag
SERIALNO : 1A5383P33551
BATTDATE : 2018-03-12
NOMINV : 230 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 480 Watts
FIRMWARE : 925.T2 .I USB FW:T2
END APC : 2018-06-07 19:30:34 +0200

Damit das Programm eine Ausgabe liefert muss der Dienst aktiv sein.

Scripting

Wenn apcupsd eine Änderung an der USV feststellt wird das Script /etc/apcupsd/apccontrol ausgeführt und als Parameter wird der Eventname an das Script übergeben.

Möchte man eigene Scripte zu bestimmten Events ausführen, so legt man im Verzeichnis /etc/apcupsd/ eine Datei mit dem Namen des gewünschten Events an und fügt dort die Anweisungen ein die ausgefürt werden sollen. Für manche Events existieren auch schon Scripte.

Interessant sind z.B. die folgenden Scripte:

  • /etc/apcupsd/onbattery
  • /etc/apcupsd/offbattery
  • /etc/apcupsd/doshutdown

Wenn einer dieser Events eintritt möchte man sicherlich gerne davon erfahren.

Bash
sudo nano /etc/apcupsd/onbattery

Ich habe die Scripte so angepasst dass ich eine Pushmessage aufs Handy bekomme wenn einer der genannten Events eintritt. Dazu habe ich z.B. das onbattery Script folgendermaßen angepasst:

Bash
#!/bin/sh
#
# This shell script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the UPS
# goes on batteries.
# We send an email message to root to notify him.
#
SYSADMIN="me@mydomain.de"
APCUPSD_MAIL="mail"

HOSTNAME=`hostname`
MSG="$HOSTNAME Power Failure !!!"
#
(
   echo "Subject: $MSG"
   echo " "
   echo "$MSG"
   echo " "
   /sbin/apcaccess status
) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN

curl \
        --silent --output /dev/null \
        -X POST https://api.pushbullet.com/v2/pushes \
        --header 'Access-Token: my.Pushbullet/Token' \
        --header 'Content-Type: application/json' \
        --data-binary "{\"type\": \"note\", \"title\":\"$HOSTNAME - On Battery\", \"body\": \"$MSG\"}" || true


exit 0

Master/Slave

Sehr interessant finde ich die Möglichkeit den Daemon mit einem Daemon auf einem anderen Rechner zu verbinden.

Da da der USV auch noch die Raspberries hängen wäre es natürlich toll wenn diese auch herunterfahren wenn die Kapazität der Akkus bei einem Stromausfall erschöpft ist.

Folgende Einstellungen habe ich in der /etc/apcupsd/apcupsd.conf auf den Raspberrys gesetzt:

/etc/apcupsd/apcupsd.conf
UPSNAME Back-UPS 950
UPSCABLE ether
UPSTYPE net
DEVICE myserver:3551
POLLTIME 10
LOCKFILE /var/lock
SCRIPTDIR /etc/apcupsd
PWRFAILDIR /etc/apcupsd
NOLOGINDIR /etc
ONBATTERYDELAY 6
BATTERYLEVEL 8
MINUTES 8
TIMEOUT 0
ANNOY 0
NOLOGON disable
KILLDELAY 0
NETSERVER off
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS standalone
UPSMODE disable
STATTIME 0
LOGSTATS off
DATATIME 0

Ob Daten von dem entsprechenden Server empfangen werden können kann man wieder mit apcaccess testen.

Bash
apcaccess status <NIS Server-IP>