IOTstack – apcupsd v Dockeru
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.