Mit Node-Red, InfluxDB und Grafana Daten auf einem Synology NAS sammeln und visualisieren (Teil 1/2)

Wer Smarthome-Komponenten im Einsatz hat weiß, dass diese unglaublich viele Daten liefern können. Diese Daten sind auch im Heimbereich Gold Wert und sollten systematisch protokolliert werden. Aus den Daten ist dann z.B. herleitbar, wie sich z.B. Energiekosten wie Strom, Gas, Wasser senken lassen. Dazu müssen diese Daten möglichst aus verschiedenen Systemen gesammelt und so aufbereitet werden, dass man hieraus das Verhalten eines Systems sowie Verbesserungen ableiten kann.

Aufgabenstellung

Ich möchte ein möglichst einfaches System aus bewährten Software-Komponenten aufbauen, mit dem ich beliebige Inputdaten in eine Datenbank speichern und möglichst vielfältig auswerten kann. Da ich viele Homematic-IP Produkte einsetze und auch verschiedene Sensoren über MQTT kommunizieren lasse, soll das System mindestens diese Inputdaten verarbeiten können. Idealerweise soll der Installations- und Betriebsaufwand möglichst einfach und stabil sein.

Lösungsansatz

Für das Sammeln und Aufbereiten der Daten von verschiedenen Smarthome-Komponenten habe ich mich für Node-Red entschieden. Im Prinzip ist Node-Red eine visuelle Programmierumgebung, die die Kommunikation zwischen vielen IOT Devices ermöglicht. Daneben gibt es auch eine einfache grafische Oberfläche um die Bedienung und Visualisierung von IoT-Devices zu ermöglichen. Für die CCU gibt es bereits ein fertiges Paket Redmatic, mit dem alle Komponenten auf einer CCU eingerichtet werden. Ich möchte allerdings auf der CCU keine zusätzliche Last haben, so dass ich die normale Node-Red Version woanders installiere und dort die notwendigen Pakete ergänzen möchte.

Da relative viele zeitabhängige Daten entstehen (sogenannte Zeitreihen) habe ich mich für ein System entschieden, welches hier eine platzsparende Speicherung sowie einen schnellen Zugriff ermöglicht, nämlich InfluxDB. Dabei wähle ich die 2.x Version von InfluxDB und möchte die Scriptsprache FLUX benutzen (ihr werdet sehen, dass dies einfach ist). Mittlerweile bietet InfluxDB auch eine super Weboberfläche mit Dashboards, Data Exxplorer und Tasks an. Für einfache Aufgaben wird hier schon viel geboten.

Als Visualisierungstool gibt es für mich aber keine Alternative zu Grafana. Mit Grafana kann man beliebige System und Datenbanken anbinden und die grafischen Auswertungsmöglichkeiten lassen kaum Wünsche übrig. Dabei ist das Ganze sehr einfach über ein Webfrontend bedienbar.

Alle Systeme sind frei verfügbar und auf verschiedenen Zielsysteme z.B. auf einem Raspberry PI installierbar. Ich habe mich entschieden, die Systeme als Docker-Versionen jeweils in einer virtuellen Umgebung laufen zu lassen. Dazu nutze ich ein Synology NAS mit einer DSM 7.x Version. Diese Container kann ich recht einfach webbasiert einrichten und immer wieder auf einen neuen Stand bringen, ohne jeweils Daten hin- und her konvertieren zu müssen. Ich setze voraus, dass Docker bereits auf einer Synology DSM installiert ist.

Ich nehme vorweg, dass die Installation aller Pakete sehr einfach war und sich erste Erfolge schnell ergeben haben.

Folgende Links haben mir ebenfalls weitergeholfen:

https://docs.influxdata.com/influxdb/v1.7/introduction/installation/

InfluxDB Container installieren

Image herunterladen

Im folgenden Kapitel beschreibe ich die Konfiguration eines Docker Containers über die Menüführung etwas ausführlicher. Für Node-Red und Grafana ist die Vorgehensweise die gleiche, nur das andere Daten verwendet werden, so dass ich diese Installationen im nächsten Beitrag etwas kompakter beschreiben werde. .

Unter Docker auf dem Synology DSM wir als erstes über den Menüpunkt "Registrierung" das Paket influxdb für die Installation gesucht.

Um zu prüfen, ob es sich um das offiziele Docker-Paket von influxdata handelt kann man den Link hinter dem Namen anklicken. Dort sind dann auch sämtliche Installationsinformationen für sämtliche Zielsysteme vorhanden (siehe Link). Bei der Version empfehle ich immer "Latest" auszuwählen, so dass man das offiziell aktuellste Paket erhält.

Container Parameter einstellen

Nach dem Herunterladen gilt es, den Container mit den richtigen Parametern zu versehen.

Hierzu geht man auf den Menüpunkt "Image", markiert das neue Image und drückt "Starten".

Im folgenden Fenster empfehle ich als Netzwerk "bridge" zu wählen, da man so die Ports nach außen und im Docker Image frei wählen kann.

Im folgenden Fenster vergibt man einen freien Namen und aktiviert die Option "Automatischen Neustart aktivieren", da somit bei einem ungeplanten Herunterfahren der Conmtainer automatisch neu gestartet wird.

Unter "Erweiterte Einstellungen" werden nun die für InfluxDB notwendigen Daten eingegeben. Diese sind:

Variable Wert
DOCKER_INFLUXDB_INIT_USERNAME 'beliebiger Name'
DOCKER_INFLUXDB_INIT_PASSWORD 'beliebiges Passwort'
DOCKER_INFLUXDB_INIT_ORG 'beliebiger Organisationsname'
DOCKER_INFLUXDB_INIT_BUCKET 'beliebiger Bucketname'
DOCKER_INFLUXDB_INIT_MODE setup
TZ Europe/Berlin

Ich habe hier die Timezone (Parameter TZ) manuell auf Europe/Berlin gesetzt, da ich festgestellt habe, dass die TimeZone nicht von Synology DSM 7.x Betriebssystem übernommen wurde und stattdessen eine UTC Zeit eingestellt war, die 2 Stunden zurückliegt.

Merkt Euch Username und Passwort, da diese später auch zum Anmelden erforderlich sind.

Nach dem Speichern drückt Ihr auf "Weiter".  Nun muss noch der Port 8086 für den Zugriff auf InfluxDB angegeben werden. Dies erfolgt auf beiden Seiten in der Tabelle  (ihr könnt auch eine eigene Portnummer setzen, wenn dieser belegt sein sollte). Wichtig ist, dass auf der linken Seitene nicht mehr "automatisch" steht, da  sonst influxdb von außen nicht mehr erreicht werden kann.

Nach dem Klicken auf "Weiter" werden nun die Mountpfade eingegeben. Wählt hier nun "Ordner hinzufügen" aus. Legt anschließend über den Button "Ordner erstellen" den Ordner "influxdb" unterhalb des Ordners "docker" an. Unterhalb von Docker legt Ihr ebenfalls über "Ordner hinzufügen" die beiden Ordner "config" und "data" an.

Wählt nun einzeln die beiden Ordner über "Ordner hinzufügen" aus und ordnet sie den folgenden Mount-Pfaden zu:

Datei/Ordner Mount-Pfad
docker/influxdb/data /var/lib/influxdb2
docker/influxdb/config /etc/influxdb2

Nach dem Drücken des Button "Weiter" werden alle Daten für den Container nochmal zusammengefasst. Durch Betätigen von "Fertig" wird der Container nun gestartet.

Sollte irgendetwas nicht funktionieren (weil man etwas vergessen oder falsch geschrieben hat) ist das kein Problem. Geht auf den Menüpunkt "Container", wählt den gerade erstellten Container aus und drückt im Menüpunkt "Aktion" auf "Stop". Der Container wird nun gestoppt und Ihr könnt über  den Menüpunkt "Bearbeiten" erneut die Einstellungen für den Container aufrufen.

Unter dem Reiter Port-Einstellungen findet Ihr die Angaben zu den Ports, unter Volume-Einstellungen Angaben zu den Mount-Pfaden und unter dem Button "Erweiterte Einstellungen" die Angaben zu den Umgebungsvariabeln. Speichert anschließend die Änderungen und startet über "Aktion" und "Start" den Container neu.

InfluxDB aufrufen

Über die IP-Adresse des NAS (Docker Host) gefolgt von dem Port sollte nun InfluxDB erreichbar sein (z.B. 192.168.178.135:8086). Nach Eingabe des Benuternamens und des Passworts, die oben bei den Umgebungsvariabeln angelegt wurden kommt man auf die schicke und nützliche neue InfluxDB Oberfläche.

Im nächsten Teil werden Node-Red und Grafana installiert sowie Daten gesammelt und ausgewertet.