Vienintelės mano renkamos metrikos yra temperatūra apie kuria rašiau Protingas namas. 1 Dalis. Temperatūra.. Tiesa nuo tada termometrų padaugėjo ir dabar jų aštuoni. Ir duomenys jau senokai saugomi ne mariadb/mysql, o influxDB. O duomenims peržiūrėti ir analizuoti naudoju Grafana.
Oficealaus influxdb paketo nėra, tad teks susikompiluoti iš AUR:
yaourt -S influxdb
Pirmuosius influxdb žinksnius galima rasti čia. Tikrai nėra nieko sudėtingo.
Mano duomenų bazė vadinasi termometrai, o lentelė temperaturos.
Duomenys atrodo taip (stulpelių yra daugiau, apkirpau, kad tilptu į puslapį):
> select * from temperaturos limit 20 name: temperaturos time 28-0000052D4E36 28-0000052DC554 28-0000052DCA4A ---- --------------- --------------- --------------- 1491421622470175617 20.6875 1491421622933431847 5.6875 1491421624775957066 20.1875 1491421683164960608 20.6875 1491421683725053335 5.6875 1491421685386914026 20.1875 1491421743393921182 20.6875 1491421743956469988 5.6875 1491421745634864667 20.1875 1491421802759609752 20.6875 1491421803239163911 5.6875 1491421804969827574 20.1875
Duomenys taip pabire, nes kiekvienas termometras įrašomas atskirai (skiriasi įrašymo laikas). Viso to išvengti galima surinkus visus duomenis ir įrašinėjant viską vienu metu, viena užklausa. Taip užklausa, nes duomenis įrašinėjami kreipiantis tam tikru portu CURL‘u, WGET‘u ar kita programine įranga darant GET užklausą. Galima tiesiog į naršyklės URL’ą suvesti atitinkama adresą.
Aš duomenis rašau su PHP paCURL‘inant URL‘ą. Kodas žemiau:
//Post to influxDB $ch = curl_init("http://localhost:8086/write?db=termometrai"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,"temperaturos ".$daviklioHWID."=".$tempvalue); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); curl_close($ch);
daviklioHWID yra termometro DS1820 adresas.
time (laiko) reikšmės paduoti nereikia.
Tame viskas ir paprasta, tiesiog aklai padavinėju termometro adresą ir jo reikšmę. Jei sistemoje atsiranda naujas termometras (naujas adresas) nieko daryt papildomai nereikia, stulpelis influxDB atsiranda automatiškai.
Dabar apie duomenų atvaizdavimą. Duomenis grafiškai atvaizduoti naudoju grafana.
sudo pacman -Sy grafana
Kai pradėjau naudoti Grafana tada dar ji nemokėjo skaityti iš mariadb/mysql. Dabar paskutinėse versijose ji tai gali daryti. Bet influxdb veikia akivaizdžiai greičiau, ypač kai db serveris paleistas ant Raspberry Pi model B.
Pirmą kartą prisijungus prie Grafana reikia prisidėti Data source t.y. duomenų šaltinį. Šiuo atveju tai indluxdb.
Turint duomenų šaltinį galima bandyti susikonfiguruoti Dash board t.y. langas kuriame bus grafikas/grafikai.
Maniškis atrodo taip (paspaudus pasididina):
Vienos metrikos (vienos linijos grafike) užklausa atrodo taip:
Atkreipiam dėmesį į GROUP BY. Grupuoju dėl dviejų priežasčių. Pirmoji, tai kaip minėjau aukščiau, duomenis įrašomi ne tuo pačiu momentu (skiriasi keliomis sekundėmis). Panaudojus grupavimą tiesiog skaičiuojamas, šiuo atveju trijų minučių vidurkis (tam ir naudojamas mean()) nesvarbu kiek matavimu per tas tris minutes buvo padaryta. Taip visi grafikai laiko atžvilgiu tampa lygus.
Antroji priežastis, kad termometrai nėra super tikslūs ir esant tomis pačiomis sąlygomis jie atiduota kažkiek kintamus (po kablelio) duomenis. Tad šiuo atveju grafikas kiek sulyginamas ir panaikinami 0.xxx nuokrypiai.