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](http://www.thalin.se/2015/05/power-meter-pulse-logger-with-esp8266.html) 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](http://nodemcu.com/index_en.html) alebo [D1 mini](http://www.wemos.cc/Products/d1_mini.html)) - [Analog Light Intensity Sensor Module 5528 Photo Resistor for AVR Arduino UNO](http://www.ebay.com/itm/200982532672) - USB powerpack alebo 5V zdroj v blízkosti elektromeru - zopár káblikov (Dupont) - server, kde beží [Prometheus.io](https://prometheus.io/) a [pushgateway](https://github.com/prometheus/pushgateway) - [Grafana](http://grafana.org/) alebo [PromDash](https://github.com/prometheus/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](http://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](https://github.com/ra100/nodemcu-elog). ```shell 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): ```lua 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](https://github.com/ra100/nodemcu-elog/blob/master/README.md)- 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 ```lua 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.

Galéria