Som trochu posadnutý trackovaním všetkého a sledovaním grafov, kam patrí aj spotreba elektriny v byte, kde bývam. Ale pravidelná ručná kontrola a zapisovanie údajov do tabuľky je únavné. Našťastie som našiel tento návod a po väčších úpravách som schopný sledovať aktuálnu spotrebu, posielať dáta na Prometheus server a sledovať grafy v Grafane.
Na začiatok treba zopár vecí
- elektromer s pulzným výstupom
- NodeMCU modul alebo kompatibilný (NodemMCU alebo D1 mini)
- Analog Light Intensity Sensor Module 5528 Photo Resistor for AVR Arduino UNO
- USB powerpack alebo 5V zdroj v blízkosti elektromeru
- zopár káblikov (Dupont)
- server, kde beží Prometheus.io a pushgateway
- Grafana alebo PromDash na vykresľovanie grafov
Ako to funguje
Novšie elektromery majú pulzný výstup na nepriame meranie spotreby, je to dioda, ktorá blikne každých x spotrebovaných Wh, v mojom prípade to je 1Wh (alebo 1000 imp/kWh). Tieto impulzy sa dajú sledovať fototranzistorom alebo fotorezistorom. S každým impulzom sa zvýši hodnota počítadla a po uplynutí špecifikovaného času sa dáta pošlú na server. Tam sa uloží a ďalej sa môže zobraziť, či vykresliť priebeh zmien v grafe.
Softvér
Stiahni si a flashni NodeMCU build z nodemcu-build.com.
Budeš potrebovať vetvu dev
s týmito modulmi: adc
, file
, gpio
,
net
, node
, timer
, wifi
. Teraz si stiahni lua skripty z repozitára
nodemcu-elog.
git clone git@github.com:ra100/nodemcu-elog.git
Uprav súbor config.default.lua
a ulož ho ako config.lua
.
Mal by vyzerať nejak takto (hodnoty uprav podľa nastavenia tvojej stiete):
PIN = 1 -- signal pin
MIN_PW = 20 -- miliseconds
SSID = 'MyNetwork'
PASSWORD = 'MyWifiPassword'
GATEWAYIP = '192.168.0.1'
IP = '192.168.0.50'
RESTARTINTERVAL = 30 -- in seconds
PUSHGATEWAY = 'http://192.168.0.2:9091/metrics/job/power/instance/HOSTNAME'
PUSHINTERVAL = 60 -- in seconds
DEBUG = false
Viac informácií o konfigurácii nájdeš v súbore README-
Všetky .lua súbory nahraj na NodeMCU modul.
Hardvér
Zapojenie je jednoduché
NodeMCU | Senzor |
---|---|
GND | GND |
3V | VCC |
D1 | SIG |
Teraz použi lepiacu pásku alebo čokoľvek iné, čím prichytíš senzor priamo na pulzný výstup elektromeru. Zapoj napájanie a sleduj údaje o spotrebe.
Nastavenie Grafany
server.lua
skript exportuje 4 hodnoty, nájdeš ich vo funkcii get_metrics()
.
- power-meter - hodnota počítadla, zvyšuje sa s každým impulzom
- nodemcu_heap - na debuggovanie, sleduje "volnú pamäť" na NodemMCU
- nodemcu_vdd33 - napätie na V3 výstupe
- nodemcu_uptime - uptime od posledného reštartu modulu
Na zobrazenie pekného grafu budeš potrebovať prometheus query, niečo takéto
rate(power_meter{exported_instance="power"}[5m])
Pri sledovaní postreby budeš chcieť vidieť rýchlosť/zmenu spotreby za čas a nie surovú hodnotu počítadla. Po použití query uvidíš v Prometheus grafe namiesto tohto
niečo takéto
a po vložení do Grafany to môže vyzerať takto pekne
Problémy, ktoré treba odstrániť
Najväčším problémom je spotreba energie samotného modulu (a senzoru). Myslel som
si, že 1000mAh powerpack vydrží zopár dní. Mýlil som sa. Vydržal niečo okolo 20
hodín. Tak som ho vymenil za 18Ah (už má zopár rokov, takže reálna kapacita bude
pod 10Ah) a aj tak ho musím vymieňať asi každé 4 dni. Problémom je asi senzor,
ktorý musí byť stále aktívny, aby zachytil každý impulz. Alebo je problémom WiFi,
ktorá asi nemá čas sa uspať, keďže každých 60s odosielam dáta na server. Možno by
pomohlo zvýšiť hodnotu PUSHINTERVAL
, aby mala WiFi šancu šetriť energiu. Poslednou
vecou môže byť sila signálu, teda slabosť, elektromer je v hrubej stene za kovovými
dvierkami, kde sa čudujem, že nejaký WiFi signál je.
Druhým problém neviem localizovať, z času na čas prestane senzor prijímať (posielať?)
signál, čiže sa nezvyšuje počítadlo. Preto som pridal timer, ktorý každých RESTARTINTERVAL
sekúnd kontroluje, či sa počítadlo zvýšilo a ak nie, tak preventívne reštartuje modul.