Grafana, D1, light sensor
St, 25.5.2016 - 13:53

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í

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.

Light sensor Power meter closeup Power meter

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

Prometheus graph

niečo takéto

Prometheus rate graph

a po vložení do Grafany to môže vyzerať takto pekne

Grafana daily graph

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.

Galéria