Podłączamy zasilacz awaryjny UPS do routera z OpenWrt

Ostatnio postanowiłem podłączyć zasilacz awaryjny w pracy co jednego z urządzeń, które chodzi 24h na dobę. Zasilacz, którym obecnie dysponujemy to APC Back-UPS 1400 (Back-UPS XS 1400U), oprócz możliwości podłączenia do 6 urządzeń, pozwala na monitorowanie stanu urządzenia za pomocą oprogramowania PowerChute oraz złącza USB.

Problem w tym, że oprogramowanie te nie jest kompatybilne z serwerem, który używamy, w związku z tym, że dostępne jest ono w wersji do użytku osobistego (Personal Edition).

Postanowiłem więc wykorzystać jeden wolny port (inny używamy do dodatkowego połączenia internetowego za pomocą routera 4G), aby podłączyć do niego UPS, by monitorować jego stan (urządzenie to oprócz dwóch diód nie posiada wyświetlacza). Jeżeli uda się zrobić coś więcej, to nawet i lepiej, ale wszystko zależy co da się osiągnąć z wykorzystaniem OpenWrt.

Sprawdzone w wersji OpenWrt 21.02 oraz OpenWrt 22.03

Wstępne wykrycie urządzenia #

Zacznijmy od tego, aby zobaczyć, jak nasz zasilacz wykrywany jest po podłączeniu do naszego routera.

Podłączamy nasz zasilacz i z poziomu terminala wykonujemy komendę dmesg

W moim przypadku otrzymałem następujący wpis:

usb 1-1: new low-speed USB device number 3 using orion-ehci

Jak widzimy, moje urządzenie wykrywane jest jako powolne urządzenie USB a sterownik, który go obsługuje to orion-ehci.

Właściwe wykrycie urządzenia #

W pierwszej kolejności aktualizujemy pakiety w systemie oraz instalujemy pakiet usbutils

opkg update
opkg install usbutils

Sprawdzamy, czy nasz zasilacz jest poprawnie wykryty za pomocą lsusb

Bus 001 Device 003: ID 051d:0002 American Power Conversion Back-UPS XS 1400U  FW:926.T2 .I USB FW:T2

Monitorowanie stanu zasilacza #

Instalujemy pakiet apcusbd (oraz pakiety towarzyszące):

opkg install apcupsd collectd-mod-apcups kmod-usb-hid

Po odłączeniu i podłączeniu kable USB mój zasilacz wykrywany jest (lsusb) w następujący sposób:

usb 1-1: USB disconnect, device number 5
usb 1-1: new low-speed USB device number 6 using orion-ehci
hid-generic 0003:051D:0002.0003: hiddev96,hidraw0: USB HID v1.10 Device [American Power Conversion Back-UPS XS 1400U  FW:926.T2 .I USB FW:T2 ] on usb-f1058000.usb-1/input0

W pliku konfiguracyjnym /etc/apcupsd/apcupsd.conf wprowadziłem następujące zmiany:

UPSNAME ups1
UPSCABLE usb
#UPSTYPE apcsmart
UPSTYPE usb
#DEVICE /dev/ttyS0

Zwróć uwagę na skomentowane (#) linie takie jak DEVICE

Uruchomiamy go za pomocą:

 /etc/init.d/apcupsd start

Następnie wykonując komendę apcaccess gdzie powinniśmy otrzymać następującą odpowiedź:

APC      : 001,036,0873
DATE     : 2022-02-04 12:28:51 +0000
HOSTNAME : WRT3200ACM
VERSION  : 3.14.14 (31 May 2016) unknown
UPSNAME  : ups1
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2022-02-04 12:28:47 +0000
MODEL    : Back-UPS XS 1400U
STATUS   : ONLINE
LINEV    : 228.0 Volts
LOADPCT  : 22.0 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 26.5 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
SENSE    : Medium
LOTRANS  : 160.0 Volts
HITRANS  : 280.0 Volts
ALARMDEL : No alarm
BATTV    : 27.1 Volts
LASTXFER : Automatic or explicit self test
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : xxxxxxxxxxxx
BATTDATE : 2021-12-16
NOMINV   : 230 Volts
NOMBATTV : 24.0 Volts
NOMPOWER : 700 Watts
FIRMWARE : 926.T2 .I USB FW:T2
END APC  : 2022-02-04 12:28:52 +0000

Jak widać z pola STATUS: ONLINE połączenie się powiodło.

Jeżeli natomiast widzimy STATUS: COMMLOST, wówczas nasz zasilacz nie został wykryty lub połączenie nie działa.

Monitorowanie stanu z poziomu panelu administracyjnego (luci-app-statistics) #

Instalujemy pakiet do zbierania statystyk:

opkg install luci-app-statistics

Komenda ta zainstaluje dodatkowo pakiet librrd1, rrdtool1, collectd-mod-rrdtool, collectd-mod-iwinfo, collectd-mod-cpu, collectd-mod-memory, collectd-mod-interface, collectd-mod-load, collectd-mod-network.

Po przejciu do panely administracyjnego naszego routera ujżymy nową opcję Statistic.

Przy pierwszym uruchomieniu i przejściu do zakładki Graphs zostaniemy poinformowani, że część odpowiedzialna za kolekcjonowanie danych nie została skonfigurowana.

No RRD data found

Zostaniemy następnie przekierowani do części Setup w której to tak naprawdę interesuje nas zakładka General plugins gdzie musimy zaznaczyć APC (potwierdzić domyślne ustawienia - Save), po czym zapisać i zastosować zmiany (Save & Apply).

APCUPS Plugin Configuration

Teraz, ponownie przechodząc do części Graphs powinniśmy zobaczyć nasz zasilacz, który z czasem będzie wypełniał nasze wykresy.

Tutaj należy zaznaczyć, że zbierane statystyki zapisywane są domyślnie w pamięci urządzenia i ulegają one straceniu po ponownym jego uruchomieniu. Jeżeli chcemy to zmienić, to w sekcji Setup, zakładce Output plugins konfigurujemy RRDTool i zmieniamy lokalizacje w Storage directory.

I takim sposobem mamy podłączony zasilacz do naszego routera, a z poziomu przeglądarki internetowej możemy monitorować jego stan.


Teraz przydałoby się zrobić nieco więcej, chociażby wyłączyć bezpiecznie router lub inne urządzenia do niego podłączone, jeżeli stan baterii będzie bardzo niski.

W tym celu zainteresowałem się pakietem NUT (Network UPS Tools), który teoretycznie pozwoli na monitorowanie stanu zasilacza (który mamy podłączony za pomocą kable USB do naszego routera) z poziomu urządzeń w sieci. W momencie, gdy oprogramowanie wykryje spadek zasilania oraz przy odpowiednim poziomie baterii zareaguje, wykonując określoną komendę.

Wszystko brzmi fajnie, gdyż można zainstalować to na innym komputerze (serwerze), który zabezpieczony jest przez nasz zasilacz, i mimo że zasilacz nie jest do niego podłączony bezpośrednio, zareagować odpowiednio w zależności od sytuacji bazując na danych z programu.

Ale to zabawa na kiedy indziej.

Jeżeli chcesz spróbować sił z NUT, odsyłam do: Monitoring UPS status with NUT(Network UPS Tools) on OpenWrt – Linux Man (linux-man.org).

Pozdrawiam.

Komentarze