IOTstack – apcupsd v Dockeru

Máte záložní zdroj (UPS) od firmy APC, má USB port a chtěli byste jej monitorovat přímo z Raspberry Pi a mít možnost notifikací na mobil v případě nenadálých stavů? Řešením je nasadit si apcupsd. A protože máme rádi IOTstack, tak rovnou do virtuálky!

Tento článek nepřímo navazuje na předchozí článek věnovaný dalším službám přes IOTstack.

Vzhledem k faktu, že chceme mít vše v Dockeru, tak využijeme hotového připraveného řešení od ValMati:

https://github.com/ValMati/apcupsd-docker


Pro zakomponování projektu apcupsd nejprve zeditujeme soubor docker-compose.yml:

sudo mcedit ~/IOTstack/docker-compose.yml

Následně na jeho konec, respektive před sekci network: stačí vložit následující kód:

  apcupsd:
    container_name: apcupsd
    image: valmati/apcupsd:0.1.1
    hostname: RPi4B
    ports:
      - "3551:3551"
    environment:
      - TZ=Europe/Prague
      - BOT_TOKEN=doplnit

      - CHAT_ID=doplnit

      - HEALTH_CHECK=https://hc-ping.com/doplnit

      - SCHEDULE=37 3 * * *
    volumes:
      - ./volumes/apcupsd:/tmp/apcupsd-docker
      - ./volumes/apcupsd/etc/apcupsd/doshutdown:/etc/apcupsd/doshutdown
      - ./volumes/apcupsd/etc/apcupsd/changeme:/etc/apcupsd/changeme
      - ./volumes/apcupsd/etc/apcupsd/commfailure:/etc/apcupsd/commfailure
      - ./volumes/apcupsd/etc/apcupsd/commok:/etc/apcupsd/commok
      - ./volumes/apcupsd/etc/apcupsd/offbattery:/etc/apcupsd/offbattery
      - ./volumes/apcupsd/etc/apcupsd/onbattery:/etc/apcupsd/onbattery
      - ./volumes/apcupsd/etc/apcupsd/apcupsd.conf:/etc/apcupsd/apcupsd.conf
    devices:
      - /dev/hidraw0:/dev/hidraw0
      - /dev/usb/hiddev0:/dev/usb/hiddev0
    restart: unless-stopped

Věci, které jsou označeny na doplnění, tak je potřeba buď doplnit nebo odmazat. První dvě doplnění se týkají notifikací na Telegram, kdy je potřeba založit vlastního bota a získat tak jeho token a tzv. ChatID. Bohužel tato problematika je rozsáhlejší a je nad rámec tohoto článku a proto zájemce odkážu například na tento návod.

Poslední doplnění se týká tzv. health checku, pro který je využíván web https://hc-ping.com/. Po rozkliknutí si zde můžete vytvořit účet a vygenerovat ID, které následně doplníte do URL adresu výše.


Nezapomeneme propojit USB kabel přímo s Raspberry Pi a ověříme si, že je UPS v systému viditelná příkazem:

lsusb

Jeden z řádků by měl odpovídat minimálně názvem American Power Conversion Uninterruptible Power Supply, což značí, že systém UPS vidí:

Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply

Poslední věcí je nakonfigurování UPS v souboru apcupsd.conf, zapneme tedy editor příkazem:

sudo mcedit ~/IOTstack/volumes/apcupsd/etc/apcupsd/apcupsd.conf

Já osobně použil toto nastavení, ale samozřejmě nemusí s vaší UPS fungovat, chce to vyzkoušet:

UPSCABLE usb

UPSTYPE usb
LOCKFILE /var/lock
SCRIPTDIR /etc/apcupsd
PWRFAILDIR /etc/apcupsd
NOLOGINDIR /etc


ONBATTERYDELAY 1
BATTERYLEVEL 5
MINUTES 5
TIMEOUT 0

ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0

NETSERVER on
NISIP 127.0.0.1
NISPORT 3551

EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS standalone
UPSMODE disable
STATTIME 0
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0

Zbylé soubory můžete případně použít z projektu z Githubu, kde si je kupříkladu můžete přeložit do češtiny a následně nahrát do adresáře vedle konfiguračního souboru. Na Telegram vám notifikace potom můžou chodit v mateřském jazyce. Pokud je použít nechcete, tak odmažte i příslušné řádky z volumes:.


Nyní již máme vše připraveno a můžeme apcupsd probudit příkazem PULL a následně UP. Máte-li aktualizované aliasy, tak můžete zkusit alias APCUPSD_SHELL a následně si příkazem apcaccess ověřit, že jsou z UPS vyčítány reálná data.


A nyní si již můžete užívat a budete automaticky informování přes Telegram, pokud dojde například k výpadku energie. Skript také automaticky každý den ráno posílá souhrn dat, ze kterého je patrno, že je vše v pořádku.

Zanechat komentář