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

Im zweiten Teil geht es nun um die Installation von Node-Red, Grafana und die Visualisierung erster Daten von einem MQTT-Server.

Node-Red Container installieren

Image herunterladen

Wie im ersten Teil beschrieben wird als erstes das "nodered/node-red"- Paket heruntergeladen.

Unter dem Verzeichnis Docker reicht es diesmal aus, das Verzeichnis "nodered" und "nodered/data" anzulegen. Ich empfehle hierzu, den DSM 7.x Filemanager zu nutzen.

Auf diesem Verzeichnis muss eine zusätzliche Berechtigung für das Schreiben und Lesen  eingerichtet werden. Dies liegt daran, dass hier z.B. weitere Nodes installiert und gespeichert werden müssen. Dies passiert normalerweise über den in Node-Red angelegt Nutzer (mit der UID 1000). Dieser ist aber im Synology NAS nicht bekannt. Daher wird auf dem NAS am einfachsten für "Everyone" ein Lesen und Schreiben ermöglicht.

Dazu geht man über Filemanager  auf das "/docker/nodered"-Verzeichnis, drückt die rechte Maustaste und wählt das Menü "Einstellungen" aus. Über den Reiter "Berechtigungen" wählt man die Gruppe "Everyone" und gibt dieser diesen die vollständigen Rechte auf das "/data"-Verzeichnis.

Nun müssen für den Container nur noch folgende Daten angegeben werden:

  • Beliebiger Name für den Container
  • Netzwerk: bridge
  • Automatischen Neustart aktivieren
  • Lokaler Port 1882 und Container Port 1880, TCP
  • Lokaler Port 2062 und Container Port 2062, TCP (nur notwendig, wenn man eine CCU ansprechen möchte)
  • Lokaler Port 2063 und Container Port 2063, TCP (nur notwendig, wenn man eine CCU ansprechen möchte)

Die Pfade werden wie folgt gesetzt:

Datei/Ordner Mount-Pfad
/docker/nodered/data /data

In den Umgebungsvariabeln habe ich die Timezone (Parameter TZ) manuell auf Europe/Berlin als Umgebungsvariable 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.

Nach dem Starten des Containers kann Node-Red über die IP-Adresse der Synology NAS gefolgt von der Portangabe aufgerufen werden (z.B. 192.168.178.135:1882).

Ich empfehle, noch die Bibliotheken (Nodes) zu installieren, mit denen man InfluxDB und eine CCU ansprechen kann (für andere Systeme gibt es auch andere Nodes, MQTT ist hingegen schon im Standard vorhanden). Dazu geht man oben rechts in Node-Red auf den Menüpunkt "Palette verwalten". Unter dem Reiter "Installation" kann man nun die folgenden Zusatzpakete installieren:

  • node-red-contrib-ccu
  • node-red-contrib-influxdb

Grafana installieren

Auch Grafana lässt sich wie Node-Red und InfluxDB einfach als Docker Container erstellen. Wie in den vorigen Kapiteln beschrieben braucht man hierzu nur das Abbild "grafana/grafana" und die "latest" Version herunterladen.

Für Grafana wird ebenfalls ein Verzeichnis unterhalb von Docker angelegt: "/docker/grafana".

Wie für die Node-Red Installation beschrieben, wird auch hierauf für "Everyone" die volle Berechtigung erteilt.

Für die Installation und das Starten des Containers sollten folgende Parameter angegeben werden:

  • Beliebiger Name für den Container
  • Netzwerk: bridge
  • Automatischen Neustart aktivieren
  • Lokaler Port 3000 und Container Port 3000, TCP

Die Pfade werden wie folgt angegeben:

Datei/Ordner Mount-Pfad
/docker/grafana /var/lib/grafana

In den Umgebungsvariabeln habe ich ebenfalls die Timezone (Parameter TZ) manuell auf Europe/Berlin als Umgebungsvariable 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.

Nach dem Starten des Containers kann Grafana über die IP-Adresse der Synology NAS gefolgt vom Grafana Port aufgerufen (z.B. 1192.168.178.135:3000) und ein Nutzer erstellt werden.

Authentication Key in InfluxDB erzeugen

Um mit InfluxDB kommunizieren zu können ist neben der Organization und dem Bucket auch ein Token erforderlich.

Auf der Synology DSM 7.x Version geht man mit einem Doppeklick auf den  laufenden InfluxDB Container. Neben den Einstellungen zu diesem Container findet man am oberen Bildschirmrand den Menüpunkt "Terminal".

Hier klickt man oben links auf den Menüpunt "Erstellen". Anschließend erscheint in der Liste der Terminals auf der linken Seite der Eintrag "bash". Auf diesen Eintrag wird geklickt und auf der rechten Seite öfnet sich nun das bash-Terminal mit einer Eingabezeile.

Hier wird nun folgender Befehl eingegeben werden (USERNAME bitte durch denLoginnamen ersetzen, der bei der Erstellung des Containers angegeben wurde):

influx auth list -user USERNAME -hide-headers | cut -f 3

TIPP: Im ersten Moment sieht es so aus, als könnte man mit STRG-V keinen Text in das Fenster kopieren. Wenn man aber vorher STRG-A drückt und dann STR-V wird der Text aus der Zwischenablage auch in das bash-Terminal eingefügt.

Anschließend erscheint ein ganz langer Code, der als Token für den Zugriff auf InfluxDB aus Node-Red und Grafana verwendet wird.

MQTT-Nachrichten mit Node-Red auslesen und in influxDB speichern

Unter Node-Red zieht man einen "MQTT in"-Node auf das Arbeitsblatt und klickt doppelt darauf.

Im anschließenden Fenster klickt man auf das Stiftsymbol neben "SERVER" und legt als erstes eine MQTT-Serververbindung an (heißt in Node-Red auch Konfiguration-Node, den man für alle anderen MQTT-Abrufe verwenden kann).

Hier habe ich nun folgende Daten eingestellt:

  • Name: "Beliebiger Name für den MQTT Konfiguration-Node"
  • Server: "Meine MQTT-Server IP-Adresse"
  • Port: "Meinen MQTT-Server Port"
  • Protokoll: "MQTT V3.1 legacy"

Sobald die Daten für den Server erfasst wurden, muss nur noch der "mqtt in"-Node richtig konfiguriert werden. Hier habe ich den Default Parameter bei Ausgang auf "Ein analysiertes (parsed) JSON Objekt" geändert.

Nun wird noch das richtige Topic angegeben, unter dem die Daten auf dem MQTT-Server gespeichert werden und dann kann man sich über einen Debug-Node das payload-Objekt mit den Daten zur Prüfung ausgeben lassen.

Nun möchte ich aus dem erhaltenen payload-Objekt einen Sensorwert (in meinem Beispiel die verbrauchte Stromleistung) in InfluxDB speichern. Da ich einen Objekt mit vielen Werte vom MQTT-Server erhalte, muss ich vor der Weitergabe an InfluxDB den Wert herausfiltern, den ich haben möchte. Dazu verwende ich einen "function"-Node in dem ich per Script nur den Wert, den ich brauche im payload-Objekt speichere (Man findet die Info, wie der Wert genau heißt und wie die Hierarchie ist, im MQTT-Objekt, welches man sich über den Debug-Node ausgeben kann).

Zur Speicherung dieses Werte ziehe ich nun einen "influxDB out"-Node auf das Arbeitsblatt und verbinde dieses mit dem "function"- Node. Nach einem Doppelklick auf den "influxDB out"-Node muss wie bei der Verbindung zu einem MQTT-Server als erstes eine Server-Verbindung zum InfluxDB-Server angelegt werden. Dazu klickt man hinter der SERVER-Zeile auf das Stiftsymbol.

Hier werden nun folgende Parameter angeben:

  • Name: "Beliebiger Name für den InfluxDB Konfiguration-Node"
  • InfluxDB-Version: 2.0 (hiermit ermögliche ich das Speichern von Daten über Abonnements und Bucket).
  • URL: "Meine InfluxDB-Server IP-Adresse (entspricht der IP-Adresse des Docker Containers)"
  • Token "Das im vorigen Kapitel erzeugte InfluxDB Token"

Nun brauche ich nur noch zu spezifizieren, unter welchem Namen die Daten in der InfluxDB gespeichert werden sollen. Folgende Parameter müssen angegeben werden:

  • bucket: "Den Bucketnamen, der bei der Erstellung des InfluxDB-Containers vergeben wurde"
  • Organization: "Die Organization, die bei der Erstellung des InfluxDB-Containers vergeben wurde"
  • Measurement: "Den Feldnamen, unter dem in InfluxDB die Werte gespeichert werden sollen".

Das wars. Nun sollten die Werte kontinuierlich in der InfluxDB gespeichert werden.

Daten mit Grafana visualisieren

Verbindung zu InfluxDB erstellen

Nach dem Einloggen in Grafana wird als erstes eine Verbindung zu InfluxDB erstellt. Über den Menüpunkt "Configuration" wird über das Klicken auf "add data source" die dazu notwendige Konfigurationsseite geöffnet.

Wichtig ist, dass im anschließenden Fenster als Query Language "Flux" angegeben, wird. Nur dann können Daten über Organization und Bucket abgerufen werden. Flux funktioniert in Grafana mittlerweile sehr sicher und hat bei der Verarbeitung von Daten durchaus Vorteile. Zusätzlich werden folgende Parameter angebeben:

  • Name: "Beliebiger Name für die Data Source"
  • URL: "Meine InfluxDB-Server IP-Adresse (hier die Adresse des Docker Containers)"
  • Organization: "Der bei der Einrichtung von InfluxDB angegebene Organization Name"
  • Default Bucket: "Der bei der Einrichtung von InfluxDB angegebene Bucket Name"
  • Token: "Das im obigen Kapitel für den Zugriff auf InfluxDB erzeugte Token"

Nach Drücken auf "Save & test" sollte Grafana das Funktionieren der Verbindung bestätigen.

Dashboard mit Auswertung erstellen

Nun kann ein Dashboard angelegt und dort ein Panel erzeugt werden. Hier muss nun der Flux-Code angegeben werden, um die Daten abzufragen.

Da Grafana noch keinen eigenen Query Builder für Flux mitbringt, empfehle ich folgende Lösung. Man loggt sich in die InfluxDB Oberfläche ein. Hier kann nun über den Menüpunkt "Data Explorer" sehr einfach mit dem Query-Builder von InfluxDB eine Abfrage von Daten (auch sehr komplexe Konstrukte) erzeugt werden. Nach Auswahl der Datenfelder, Filer und Funktioen generiert der Query-Builder bereits eine erste Grafik. Durch Klicken auf "Script Editor" kan man den Code für diese Abfrage einfach kopieren, in Grafana einfügen und dort weiterbearbeiten.

Ich habe nach kurzer Zeit festgestellt, wie einfach aber mächtig dieser Query Builder ist und wie Flux insgesamt funktioniert. Da Grafana deutlich besser visualisiert und umfangreiche Optionen für Anpassungen der Auswertungen besitzt ist, ist dies die einfachste Möglichkeit, schnell voran zu kommen.

Links

Wer eine CCU mit Node-Red ansprechen möchte findet im folgenden Link erste Tipps:

Für die Installation und Nutzung von Grafana können die folgenden Links hilfreich sein:

https://mariushosting.com/how-to-install-grafana-on-your-synology-nas/

Bei der Installation von Node-Red können folgende Links unterstützen:

Und für die Nutzung des Query Builders von InfluxDB ist folgender Link hilfreich: