Toen ik een week geleden schreef over het automatisch opslaan van sensordata in Google Sheets gaf ik al aan dat dat zeker niet een optimale oplossing was. Inmiddels wordt dat ook meer dan duidelijk omdat de spreadsheet zich blijft vullen en het opbouwen van de grafieken duidelijk meer tijd kost.
In dat bericht verwees ik al naar InfluxDB, een database die specifiek ontwikkeld is voor het opslaan van tijdreeksen, data dus die gekoppeld is aan een datum/tijd. Het is dan ook niet zo vreemd dat InfluxDB populair is als database om de data die vanuit de verschillende sensoren die je aan OpenHAB koppelt op te slaan. OpenHAB is een gratis tool/omgeving waarmee je zelf je huis kunt automatiseren. Je kunt er lampen of schakelaars mee aansluiten, de data van sensoren zoals thermometers verzamelen en weergeven, je kunt acties koppelen aan die sensoren (bv zet de ventilator op de badkamer automatisch aan als de luchtvochtigheid boven de 50% komt) etc.
Ik gebruik OpenHAB al een tijd en hoewel er ook hier discussies zijn over wat de beste omgeving is (er zijn meer gratis alternatieven op dit gebied), werkt het voor mij en heb ik geen reden om over te stappen. Wat ik echter wel wil doen is overstappen van mijn huidige 1.8 versie naar de recente 2.2 versie. Dat is op papier een eenvoudige upgrade, ik had vooral al begrepen dat het in praktijk niet helemaal zo zou zijn. Daarom wilde ik dat voorzichtig aanpakken. Het voordeel van het gebruik van OpenHAB op een Raspberry Pi is dat het niet veel geld kost om er een tweede Raspberry Pi naast te zetten met de nieuwe versie (zeker als je er al een paar in huis hebt).
Een tweede ontwerpkeuze waar ik veel voordeel van gehad heb is dat ik MQTT gebruik voor zo ongeveer alles wat met sensordata te maken heeft en ook voor het aansturen van schakelaren in huis. De Mosquitto-server (een gratis server voor MQTT) die ik daarvoor gebruik staat op dezelfde server als OpenHAB. Dat zou een probleem kunnen zijn, alle sensoren sturen namelijk hun data naar dat IP-adres, maar het is gelukkig heel eenvoudig om de Mosquitto-server te vertellen dat alle ontvangen data ook doorgestuurd moet worden naar de Mosquitto-server die op de “nieuwe” (test-)server met OpenHAB 2.2 staat. Zo kon ik de bestaande productieserver helemaal met rust laten (op het toevoegen van die ene doorverwijzing in het mosquitto.conf bestand (zie ook de schermafdruk hiernaast voor de benodigde aanpassing, voor het IP-adres gebruik je het eigen IP-adres van de nieuwe server, de naam van de connection is vrij te kiezen). Daarna moest ik de Mosquitto-server even herstarten met systemctl status mosquitto.service -l
Goed, terug naar de tijdseriedata en InfluxDB. Er zijn tutorials beschikbaar voor het installeren van InfluxDB op de Raspberry Pi (bv hier). Maar omdat het mij om de combinatie InfluxDB, Mosquitto, OpenHAB én Grafana ging, heb ik gekozen voor openHABian. Daar heb je namelijk al die tools (inclusief o.a. Node-RED, ook heel handig in combinatie met sensoren) ter beschikking in één download. Er is wat discussie over de vraag of je dat wel allemaal op één Raspberry Pi moet willen installeren. Dat zal waarschijnlijk een beetje afhangen van het gebruik. Ik heb het geheel nu draaien op 1 Raspberry Pi 2 en het werkt voor nu voldoende snel. Ik moet wel nog even uitzoeken hoe snel de database groeit, maar met een 16GB micro-SD kaartje is er nog wel wat ruimte over voor groei.
Ik heb InfluxDB ingesteld als “persistence” service waarbij de data elke minuut en bij elke wijziging wordt opgeslagen. Als je de setup-instructies van openHABian volgt dan heb je na afloop ook Grafana draaien en daar is het slechts een kwestie van definiëren van dashboards en panels voor de data die je wilt weergeven (zie ook screenshot hierboven). Je kunt data van verschillende sensoren combineren in een grafiek, je kunt data bv zowel in een grafiek als in een tabel met bv maximale, minimale, gemiddelde, huidige waarde weer te laten geven. Die tabel wordt dan aangepast aan de tijdsperiode die je hebt geselecteerd. Dus als je data laat zien van de laatste 6 maanden, dan geeft de tabel ook max, min. gem. etc weer over de laatste 6 maanden, toont het dashboard (en de grafiek) de laatste 24 uur, dan de tabel ook etc.
Als je meerdere reeksen in dezelfde grafiek hebt staan, dan kun je door het er op klikken, 1 tijdreeks selecteren door er op te klikken, dan wordt (tijdelijk) alleen die tijdreeks weergegeven.
Kortom, Grafana is eigenlijk het geheime wapen hier. Het zorgt er namelijk voor dat de data uit de InfluxhDB op een mooie, handige manier aangeboden wordt. De nieuwe data wordt nu automatisch door OpenHAB in de database opgeslagen, maar ik had natuurlijk ook al bestaande data. De ‘oude’ data uit de OpenHAB 1.8 installatie heb ik nog niet over gezet. De data uit Google Sheets wél al. Die kon ik exporteren naar CSV en dan via een Python-script en de HTTP-interface van InfluxDB automatisch importeren.
Omdat ik data van fijnstofmetingen die door een #ESP8266 tijdelijk in Google Sheets opgeslagen waren, na export naar CSV m.b.v. Python script via JSON wilde importeren in @InfluxDB zodat ik in @grafana de grafieken kan zien op mijn @Raspberry_Pi => daarom leerde ik programmeren! pic.twitter.com/1lusf6sHzm
— Pierre Gorissen (@PeterMcAllister) January 3, 2018
Ik maak vaak discussies mee over het nut van het kunnen programmeren. Ook ik ben geen programmeur van beroep. Maar omdat ik kan programmeren ben ik nu in staat om dit soort data tussen systemen te “verplaatsen”, mijn ict-vaardigheden zorgen er sowieso voor dat ik zulke systemen in de lucht kan brengen en houden. En ik moet zeggen, het geeft me toch heel wat meer voldoening én controle over de systemen die in mijn (ons) huis terecht komen.
Het geheel is nog niet af, maar omdat de systemen naast elkaar kunnen functioneren kan ik op mijn gemak verder bouwen en ervaring opdoen met de nieuwe versie. Daarnaast wil ik kijken hoe ik de InfluxDB database ook veilig kan gebruiken als alternatief voor MySQL voor de backup van TTN data. Genoeg om uit te testen dus. Maar de vakantie is weer voorbij, dus het moet weer even in de avonduren en de weekenden in plaats van overdag.
Sensordata opslaan in InFluxDB https://t.co/XMMi7PT4TH
Tijdens de volgende “vakantie” is het misschien interessant om eens te kijken naar een Open Source Time series database van Nederlands bodem: http://siridb.net
Zie ook onze blogpost over integratie van SiriDB met Grafana:
http://siridb.net/blog/using-grafana-with-siridb/
Hoi Rik,
Dank je voor de tip! Kende ik niet, ziet er interessant uit. Ik vind “drop shards” wel een handige optie die bij InfluxDB ontbreekt terwijl juist zo’n goedkope sensor af en toe wel eens een extreme waarde doorstuurt (hele hoge temperatuur of zo) die ik er liever dan achteraf weer uit gooi. Gaat bij InfluxDB heel moeizaam omdat ze het verwijderen van individuele waarden ontmoedigen.
De webinterface ziet er handig uit.
Ik kon niet zo snel info vinden over de retention policy en het maken van backups van de database.