Sensor database op de Raspberry Pi

Iedereen die sensorgegevens over een lange periode wil vastleggen, wordt onvermijdelijk geconfronteerd met een probleem: hoe kunnen de verzamelde gegevens worden opgeslagen en gepresenteerd?
InfluxDB en Grafana zijn in feite hulpmiddelen die ontworpen zijn voor het monitoren van grote servers, netwerken en websites.

In deze tutorial wordt uitgelegd hoe deze combinatie kan worden gebruikt om de sensorgegevens thuis te visualiseren.

Het project

Geschikt voor: geavanceerd

Benodigde tijd: ten minste 2 uur

Wat u nodig heeft: Raspberry Pi (model 2 of nieuwer aanbevolen), sensoren of andere interessante gegevensbronnen

De software heeft in dit stadium nog geen Nederlandse vertaling, dus een goede kennis van het Engels is een voordeel voor de inrichting.

De tools

InfluxDB

InfluxDB is een Time Series Database (TSDB), een database die speciaal is ontwikkeld voor tijdreeksen. Vergeleken met conventionele databases zoals mySQL hebben TSDB’s verschillende voordelen:

  • Betere prestaties en lagere eisen aan de middelen
  • Speciale functies voor de downsampling van meetreeksen
  • Betere compressie van gegevens

InfluxDB omvat ook het programma Telegraf, dat meetwaarden uit vele bronnen verzamelt en doorstuurt naar InfluxDB. In deze tutorial wordt Telegraf gebruikt om gegevens te verzamelen zoals het CPU-gebruik van de Raspberry Pis. Als dit niet gewenst is, is de installatie van Telegraf niet nodig.

Grafana

Grafana is een platform voor de visualisatie van tijdreeksen. De gegevens kunnen bijvoorbeeld worden gepresenteerd met grafieken, tabellen en heatmaps. Een grote selectie van plugins biedt vele mogelijkheden voor uitbreiding. Als u voor de installatie de interface wilt bekijken, kunt u gebruik maken van de live demo op https://play.grafana.org.

Installatie op de Raspberry Pi

Vanwege de hogere schrijfbelasting op de SD-kaart, veroorzaakt door de database, wordt aanbevolen om het besturingssysteem op een betere gegevensdrager te installeren, bijvoorbeeld een USB-SSD.
Er moet op zijn minst een SD-kaart worden gebruikt die ontworpen is voor een hoge schrijfbelasting (bijvoorbeeld een kaart voor Dashcams).

De installatie van Raspbian wordt hier niet verder besproken, de tutorial is gebaseerd op de “Raspbian Buster Lite” versie.

Het installeren van de pakketten

De pakketten in de officiële Raspbian repositories zijn verouderd, dus de repositories van de respectievelijke ontwikkelaars moeten worden toegevoegd:

```bash
curl -sL https://packages.grafana.com/gpg.key | sudo apt-key add -
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -

echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
echo "deb  stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

sudo apt-get update
sudo apt-get install -y grafana influxdb telegraf

sudo systemctl enable influxdb grafana-server telegraf
sudo systemctl start influxdb grafana-server telegraf
```

Configuratie

Standaard start Grafana een webserver op poort 3000, zodat de frontend met de browser bereikbaar is onder de URL http://:3000. De login is “admin”/”admin” en moet direct bij de eerste login worden gewijzigd. Daarna wordt het homedashboard al weergegeven.

Home Dashboard

Eerst moet Grafana worden aangesloten op InfluxDB. Hiervoor wordt een nieuwe gegevensbron aangemaakt door te klikken op “Add Data Source”, in de selectie daarna moet “InfluxDB” worden geselecteerd. De meeste instellingen kunnen eerst op de standaardwaarden blijven staan, alleen de URL moet worden ingevoerd: http://localhost:8086. Daarnaast moet de database ‘telegraf’ worden ingevoerd onder “InfluxDB Details”. Een klik op “Save & Test” slaat de instellingen op, de bevestiging “Data source is working” zou moeten verschijnen.

Dashboards

Daarna kunt u al het eerste dashboard aanmaken, dit gebeurt door te klikken op de “New Dashboard” knop op het homedashboard. Het eerste paneel is al automatisch aangemaakt, klik op “Add Query” om naar het paneelmenu te gaan.

Telegraf zou sinds de installatie al wat gegevens over de Raspberry Pi moeten hebben verzameld, zoals CPU-belasting, RAM-gebruik, enz. Om de CPU-belasting weer te geven, moet bijvoorbeeld de meetreeks “cpu” worden geselecteerd in de regel “FROM” onder “select measurement”. Daarna kan in de regel “SELECT” onder “value” het veld “usage_system” of “usage_user” worden geselecteerd.

First Panel

Zodra de gegevens zijn geselecteerd, brengen de knoppen aan de linkerkant u naar andere menu’s waar u de grafische weergave kunt configureren.

Extra gegevensbronnen in Telegraf

Telegraf heeft een veelvoud aan “Input Plugins”, die het mogelijk maken om verschillende gegevens te verzamelen. De meeste plugins zijn ontworpen voor servers en meten statistieken over verschillende servertoepassingen. Een grappige uitzondering hierop is de ‘minecraft’ plugin, die de scoreborden van spelers van een minecraft server verzamelt. Een gedetailleerde lijst is beschikbaar in de Telegraf broncode.

Om plugins in te schakelen moet het configuratiebestand /etc/telegraf/telegraf.conf worden aangepast. Als u dieper in Telegraf wilt duiken, raadpleeg dan de documentatie.

Integratie van sensorgegevens

Gegevensformaat

InfluxDB accepteert gegevens in de vorm van HTTP-verzoeken, zodat alle netwerkcompatibele apparaten gemakkelijk meetwaarden naar de database kunnen sturen. Hier wordt ‘curl’ gebruikt als voorbeeld voor een sensor:

```bash
curl -i -XPOST 'http://<IP-des-Pis>:8086/write?db=mydb' --data-binary 'sensor,ort=kueche temperatur=24.7'
```

Deze query slaat een meetwaarde op in de meetreeks ‘sensor’, met de extra markering ‘location=kitchen’ en het veld ‘temperature’, met de waarde ‘24,7’. Deze meetwaarde verschijnt onmiddellijk in Grafana na het instellen van een dashboard.

ESP8266 / ESP32

Om kleinere sensoren op de database aan te sluiten, moeten ze door een microcontroller naar de database worden gestuurd. De eenvoudigste manier om dit te doen is met de ESP8266 en ESP32 controllers van Espressif, omdat deze direct met de Raspberry kunnen communiceren via WLAN. Er is ook een geschikte Arduino-Library, zodat dezelfde meetwaarde in een paar regels code kan worden verzonden:

```c++
InfluxData measurement("sensor");
measurement.addTag("ort", "kueche");
measurement.addValue("temperatur", 24.7);

influx.write(measurement);
```

Een groot nadeel van deze twee regelaars is het hoge stroomverbruik door de WLAN-verbinding (ongeveer 80mA bij 3,3V). Voor het gebruik van de batterij is het daarom absoluut noodzakelijk om de slaapstanden te gebruiken. Bovendien is het bereik beperkt door het bereik van het WLAN-netwerk.

LoRaWAN

De beste oplossing voor het stroomverbruik en het bereik is het relatief nieuwe draadloze protocol LoRa (Long Range). Een soortgelijke sensor met een LoRa-zender meet al bijna een jaar lang onvermoeibaar de temperatuur in de tuin van de auteur (met twee mignoncellen en elke minuut) en was in staat om met succes gegevens over meerdere kilometers in bereiktests over te brengen. Voor LoRa zijn echter speciale zenders en ontvangers nodig, waarvan de opzet in de komende How-To’s zal worden toegelicht.

Sensor Outside

Verdere mogelijkheden

Het artikel liet zien hoe een Raspberry Pi met InfluxDB en Grafana gebruikt kan worden om data van sensoren te verzamelen en op een aansprekende manier te presenteren. Zo’n opstelling wordt al ongeveer twee jaar door de auteur gebruikt. Hier zijn enkele interessante toepassingen, die allemaal in het systeem zijn geïntegreerd:

  • Stroom-, water- en gasverbruik
  • Binnentemperatuur, vochtigheid en CO2-concentratie
  • Weerstation (temperatuur, luchtvochtigheid en druk en vermogen van het zonnepaneel)

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *