Sensordatenbank auf dem Raspberry Pi  

Sensordatenbank auf dem Raspberry Pi

Jeder, der über eine längere Zeit Sensordaten aufnehmen möchte, steht unweigerlich vor einem Problem: Wie können die gesammelten Daten gespeichert und präsentiert werden? InfluxDB und Grafana sind eigentlich Tools, welche für das Monitoring von großen Servern, Netzwerken und Websites entworfen wurden.

In diesem Tutorial wird erklärt, wie diese Kombination auch im Heimbereich zur Visualisierung von Sensordaten eingesetzt werden kann.

Das Projekt

Geeignet für: Fortgeschrittene

Zeitaufwand: mind. 2 h

Das benötigen Sie: Raspberry Pi (Modell 2 oder neuer empfohlen), Sensoren oder andere interessante Datenquellen

Die Software besitzt zu diesem Zeitpunkt noch keine deutsche Übersetzung, daher sind für die Einrichtung gute Englischkenntnisse vorteilhaft.

Die Tools

InfluxDB

InfluxDB ist eine Time Series Database (TSDB), eine Datenbank, welche speziell für Zeitreihen entwickelt wurde. Im Vergleich zu herkömmlichen Datenbanken wie mySQL bringen TSDBs einige Vorteile mit sich:

  • Bessere Performance und geringerer Ressourcenbedarf
  • Spezielle Funktionen für das Downsampling von Messreihen
  • Bessere Kompression von Daten

Zu InfluxDB gehört außerdem das Programm Telegraf, das Messwerte aus vielen Quellen sammelt und an InfluxDB weiterleitet. In diesem Tutorial wird Telegraf verwendet, um Daten wie die CPU-Auslastung des Raspberry Pis zu sammeln. Wird dies nicht gewünscht, ist die Installation von Telegraf nicht notwendig.

Grafana

Grafana ist eine Plattform zur Visualisierung von Zeitreihen. Daten können z.B. mit Grafen, Tabellen und Heatmaps präsentiert werden. Eine große Auswahl an Plugins bietet viele Möglichkeiten zur Erweiterung. Wer sich die Oberfläche vor der Installation anschauen möchte, kann die Live-Demo auf https://play.grafana.org verwenden.

Einrichtung auf dem Raspberry Pi

Aufgrund der höheren Schreiblast auf der SD-Karte durch die Datenbank empfiehlt es sich, das Betriebssystem auf einem besseren Datenträger, zum Beispiel einer USB-SSD, zu installieren.
Zumindest sollte eine SD-Karte, die für hohe Schreiblast ausgelegt ist, verwendet werden (zum Beispiel eine Karte für Dashcams).

Auf die Installation von Raspbian wird an dieser Stelle nicht weiter eingegangen, das Tutorial geht von der Version „Raspbian Buster Lite“ aus.

Installation der Pakete

Die Pakete in den offiziellen Raspbian-Paketquellen sind veraltet, deshalb müssen die Paketquellen der jeweiligen Developer hinzugefügt werden:

```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 https://packages.grafana.com/oss/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
```

Konfiguration

Standardmäßig startet Grafana einen Webserver auf Port 3000, das Frontend ist also mit dem Browser unter der URL http://<IP-des-Pis>:3000 zu erreichen. Der Login ist „admin“/“admin“ und sollte bei der ersten Anmeldung direkt geändert werden. Danach wird auch schon das Home-Dashboard angezeigt.

Home Dashboard

Zunächst muss Grafana mit InfluxDB verbunden werden. Dafür wird mit einem Klick auf „Add Data Source“ eine neue Datenquelle erstellt, in der Auswahl danach muss „InfluxDB“ ausgewählt werden. Die meisten Einstellungen können zunächst auf den Standardwerten gelassen werden, nur die URL muss angegeben werden: http://localhost:8086. Außerdem muss unter „InfluxDB Details“ die Datenbank `telegraf` eingetragen werden. Ein Klick auf „Save & Test“ speichert die Einstellungen, es sollte die Bestätigung „Data source is working“ erscheinen.

Dashboards

Danach kann auch schon das erste Dashboard erstellt werden, dies geschieht über den „New Dashboard“-Knopf auf dem Home-Dashboard. Das erste Panel wurde schon automatisch erzeugt, über „Add Query“ gelangt man in das Menü des Panels.

Telegraf sollte seit der Installation schon einige Daten wie CPU-Last, RAM-Ausnutzung etc. über den Raspberry Pi gesammelt haben. Um etwa die CPU-Last anzeigen zu lassen, muss in der Zeile „FROM“ unter „select measurement“ die Messreihe „cpu“ ausgewählt werden. Danach kann in der Zeile „SELECT“ unter „value“ das Feld „usage_system“ oder „usage_user“ ausgewählt werden.

First Panel

Nachdem die Daten ausgewählt wurden, gelangt man über die Knöpfe links in weitere Menüs, in denen die grafische Darstellung konfiguriert werden kann.

Zusätzliche Datenquellen in Telegraf

Telegraf besitzt eine Vielzahl von „Input Plugins“, welche die Sammlung verschiedenster Daten ermöglichen. Die meisten Plugins sind für Server ausgelegt und messen Statistiken über verschiedene Serveranwendungen. Eine lustige Ausnahme dazu ist das `minecraft` Plugin, welches die Scoreboards von Spielern eines Minecraft-Servers aufnimmt. Eine ausführliche Liste ist im Telegraf Quellcode verfügbar.

Um Plugins zu aktivieren, muss die Konfigurationsdatei `/etc/telegraf/telegraf.conf` angepasst werden. Wer sich tiefer mit Telegraf befassen möchte, sei an die Dokumentation verwiesen.

Einbindung von Sensordaten

Datenformat

InfluxDB nimmt Daten in Form von HTTP-Anfragen entgegen, daher können alle netzwerkfähigen Geräte problemlos Messwerte an die Datenbank schicken. Stellvertretend für einen Sensor wird hier `curl` verwendet:

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

Diese Anfrage speichert einen Messwert in die Messreihe `sensor`, mit der zusätzlichen Kennzeichnung `ort=kueche` und dem Feld `temperatur`, mit dem Wert `24.7`. Dieser Messwert erscheint, nach Einrichtung eines Dashboards, sofort in Grafana.

ESP8266 / ESP32

Um auch kleinere Sensoren an die Datenbank anzuschließen, müssen diese von einem Microcontroller an die Datenbank geschickt werden. Am einfachsten geht das mit den Controllern ESP8266 und ESP32 von Espressif, da diese direkt über WLAN mit dem Raspberry kommunizieren können. Es existiert auch eine passende Arduino-Library, damit kann derselbe Messwert in wenigen Zeilen Code übertragen werden:

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

influx.write(measurement);
```

Ein großer Nachteil dieser beiden Controller ist der hohe Stromverbrauch aufgrund der WLAN-Verbindung (etwa 80mA bei 3.3V). Für den Batteriebetrieb muss daher unbedingt auf die Schlafmodi zurückgegriffen werden. Außerdem ist die Reichweite durch die Reichweite des WLAN-Netzes begrenzt.

LoRaWAN

Die beste Lösung für Stromverbrauch und Reichweite ist das relativ neue Wireless-Protokoll LoRa (Long Range). Ein ähnlicher Sensor mit LoRa-Sender misst schon seit fast einem Jahr unermüdlich die Temperatur im Garten des Autors (mit zwei Mignonzellen und im Minutentakt) und konnte in Reichweitentests noch über mehrere Kilometer erfolgreich Daten übertragen. LoRa benötigt jedoch spezielle Sender und Empfänger, deren Einrichtung in kommenden How-To’s erklärt wird.

Sensor Outside

Weitere Möglichkeiten

Im Artikel wurde gezeigt, wie ein Raspberry Pi mit InfluxDB und Grafana dafür verwendet werden kann, Daten von Sensoren zu sammeln und ansprechend zu präsentieren. Ein solches Setup wird vom Autor schon seit etwa zwei Jahren eingesetzt. Hier einige interessante Anwendungen, welche inzwischen alle in das System integriert wurden:

  • Strom-, Wasser- und Gasverbrauch
  • Temperatur, Luftfeuchtigkeit und CO2-Konzentration in Innenräumen
  • Wetterstation (Temperatur, Luftfeuchtigkeit und -druck sowie Leistung des Solarpanels)

Weiterer interessanter Artikel:
Hausautomatisierung I – Einstieg in die Software Home Assistant

 

Was denken Sie zu diesem Thema? Schreiben Sie einen Kommentar:

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.