Datenströme visualisieren mit Node-RED
Vorraussetzungen
Dieses Kapitel setzt vorraus, dass Sie:
- Einen Raspberry Pico W mit der Micropython Firmware geflasht haben.
- Einen DHT11 Sensor zur Verfügung haben
- Node-RED auf einem Computer oder Raspberry Pi installiert haben.
- Ein WLAN Netzwerk vorhanden ist.
Datenströme visualisieren
Sensoren erfassen Messwerte als fortlaufende Datenströme. Damit diese Werte nutzbar werden, müssen sie in strukturierter Form übertragen, inhaltlich ausgewertet und so aufbereitet werden, dass sie schnell überprüfbar und verständlich dargestellt werden können. Dieses Kapitel befasst sich mit der Visualisierung von Datenströmen.
Für die Umsetzung wird die No Code/Low Code Software Node-RED genutzt. Node-RED stellt eine grafische Entwicklungsumgebung bereit, in der Datenflüsse aus vorgefertigten Bausteinen zusammengesetzt werden. Dadurch wird ein niedrigschwelliger Umgang mit Daten möglich, weil informatische Verarbeitungsschritte ohne umfangreiche Programmierkenntnisse umgesetzt und transparent nachvollzogen werden können.
Ziel
Ziel dieses Kapitels ist es, grundlegende Arbeitsschritte kennenzulernen, die in späteren Abschnitten erneut benötigt werden.
Daten werden:
- in einem verbreiteten Austauschformat wie JSON bereitgestellt
- in Node-RED eingelesen, gezielt gefiltert oder umgerechnet
- in einem Dashboard visualisiert.
Dabei geht es nicht um eine vollständige Datenanalyse, sondern um ein Verständnis dafür, wie Messwerte als Datenfluss verarbeitet werden und wie aus Rohdaten eine übersichtliche Darstellung entstehen kann.
JSON-Daten verstehen und visualisieren
JSON als Datenformat für Datenströme
Viele Datenströme im Netz werden im Format Java Script Object Notation (JSON) übertragen. JSON ist ein textbasiertes Austauschformat, das sowohl für Menschen gut lesbar ist als auch von Maschinen verarbeitbar ist. Es ist sprachunabhängig, dadurch können sehr unterschiedliche Systeme Daten im gleichen Format senden und empfangen. Einen kompakten Überblick bietet der Wikipedia-Artikel zu JSON.
Ein JSON Objekt besteht aus Schlüssel-Wert-Paaren. Der Schlüssel ist ein Name in Anführungszeichen, der Wert kann zum Beispiel eine Zahl, ein Text, true oder false oder auch wieder ein weiteres Objekt sein. Dadurch sind auch verschachtelte Strukturen möglich:
JSON in Node-RED simulieren und visualisieren
Um einen Datenstrom ohne Hardware zu simulieren, kann dieser in Node-RED erstellt und dann in einem Dashboard visualisiert werden. Laden Sie dazu den bereitgestellten Flow 01-mock-flow herunter und importieren Sie ihn in Node-RED. Beim Import kann es sein, dass Node-RED zusätzliche Nodes nachinstallieren muss, um den Flow korrekt darzustellen. Folgen Sie dazu den Anweisungen in Node-RED.

Nach dem Import sehen Sie die drei Bausteine:
- Ein Inject-Node
timerals Taktgeber, der alle 3 Sekunden auslöst. - Ein Function-Node
generate JSON, der bei jedem Takt ein einfaches JSON-Objekt mit zwei Wertepaaren generiert. Die Werte werden mit jedem Takt neu generiert und leicht verändert, damit im Dashboard eine Bewegung im Verlauf sichtbar wird. - Zwei Dashboard-Chart-Nodes, die jeweils einen der beiden Werte aus dem Payload als Zeitreihe darstellen.

Weitere Informationen zum Umgang mit Node-RED finden Sie in der offiziellen Node-RED Dokumentation.
Datenfluss in Node-RED
Node-RED verarbeitet Daten als Nachrichtenobjekte msg, die von Node zu Node weitergereicht werden. Die eigentlichen Nutzdaten liegen dabei in der Regel in msg.payload, zum Beispiel als JSON Objekt. Einzelne Werte können anschließend gezielt aus dem Payload entnommen und an Visualisierungs Nodes übergeben werden.
Realitätsnahe JSON Daten und Base64 Payload
Im nächsten Beispiel wird ein komplexeres JSON Objekt betrachtet, das sich am Aufbau realer LoRaWAN Uplink Events orientiert. Solche Ereignisse enthalten viele Metadaten, zum Beispiel zur Quelle, zum Empfang über Gateways oder zur Funkübertragung. Für die Weiterverarbeitung und Visualisierung sind davon in der Regel nur wenige Felder relevant. Ziel dieses Abschnitts ist es deshalb, aus einem großen JSON Objekt gezielt nur die Daten herauszufiltern, die tatsächlich benötigt werden.
Flow importieren
Laden sie den Flow 02-mock2-flow herunter und importieren Sie ihn in Node-RED.
Flow aufbau
Der Flow besteht aus den folgenden Schritten:
timer: löst alle 3 Sekunden aus und triggert damit den nachfolgenden Node.generate JSON: erzeugt ein realtitätsnahes JSON Objekt, was einen LoRaWAN Uplink Event simuliert.change frm_payload: variiert den Wertfrm_payload.extract payload base64: filtert das JSON Objekt so, dass nur noch der Base64 String übrig bleibt.decode base64 2x 2bytes: decodiert den Base64 String in zwei Werte.- Dashboard Charts und Gauges: dienen der Visualisierung.
JSON Objekt
Wenn Sie das JSON Objekt betrachten, sehen Sie, dass es sehr viele Felder enthält. Für die Visualisierung im Dashboard sind aber nur wenige davon relevant. In diesem Fall ist es der Wert payload.uplink_message.frm_payload, der die eigentlichen Nutzdaten enthält. Dieser Wert wurde als Base64 String codiert.
Base64
Base64 ist ein Kodierungsverfahren, das Daten in eine Zeichenkette umwandelt, die aus 64 verschiedenen Zeichen besteht. Es wird häufig verwendet, um binäre Daten wie Bilder, Zip-Dateien oder Emailanhänge in Textform zu übertragen, zum Beispiel in JSON Objekten. Durch die Codierung wird ein problemloser Transport über diese Textprotokolle ermöglicht.
Auch in diesem Beispiel werden die Nutzdaten varriert, damit bei der Visualisierung im Dashboard eine Veränderung zu sehen ist. Dieser Schritt dient nur dazu, die Nutzdaten durch Variation “echter” aussehen zu lassen. Diese Veränderung erfolgt in dem Node change frm_payload.
Alle anderen Felder außer dem Payload sind für die Visualisierung nicht notwendig. Deshalb wird das JSON-Objekt mit einem Change Node extract payload base64 manipuliert, sodass nur noch der Wert payload.uplink_message.frm_payload als msg.payload übrig bleibt.
Im nächsten Schritt wird der Base64-String mit einem Function Node decode base64 2x 2bytes in die ursprünglichen Nutzdaten zurückverwandelt. In diesem Fall handelt es sich um 2x 2 Byte Werte, die Temperatur und Luftfeuchtigkeit repräsentieren.
Diese Werte werden anschließend im Dashboard auf unterschiedliche Weise visualisiert.
Codierung
Das wissen um die Codierung ist in diesem Fall notwendig, damit die Nutzdaten korrekt decodiert werden können.
Reale Sensordaten visualisieren
Damit die Visualisierung nicht nur auf fiktiven Daten basiert, werden in diesem Kapitel reale Sensordaten von einem DHT11 Sensor verwendet. Der Sensor wird vom Raspberry Pico ausgelseen und über einen Webserver bereitgestellt der wiederum von Node-RED abgefragt wird.
DHT11 verkabeln
Schließen Sie das DHT11 Sensormodul wie folgt an Ihren Raspberry Pico an:

| Raspberry Pico | DHT11 |
|---|---|
| 3,3 V: Pin 36 | + |
| GND: Pin 38 | - |
| GPIO9 (Pin12) | Out |
Webserver mit Sensordaten bereitstellen
Führen Sie den folgenden Code auf ihrem Raspberry Pico aus.
Ersetzen Sie dabei die SSID und das Passwort durch die Zugangsdaten ihres WLANs.
|
|
- Sobald die Verbindung zum WLAN hergestellt ist und der Webserver läuft, sehen Sie die IP-Adresse die der Router dem Pico zugewiesen hat.
- Sobald Sie diese IP-Adresse in einem Browser eingeben, sollten Sie die aktuellen Sensordaten als JSON Objekt sehen. Zum Beispiel:
{"temp": 21, "hum": 45}.
Sensordaten in Node-RED visualisieren
Laden Sie den Flow 03-piko-dht11 herunter und importieren Sie ihn in Node-RED. Der Flow besteht aus den folgenden Schritten:
- Taktgeber: löst alle 2 Sekunden aus und triggert damit den nachfolgenden Node.
- HTTP Request: sendet eine GET Anfrage an den Webserver des Raspberry Pico und erhält ein JSON Objekt mit den aktuellen Sensordaten.
- 2 Change Nodes umd die Daten für die Visualisierung aufzubereiten.
- Dashboard Charts und Gauges: dienen der Visualisierung.
IP-Adresse anpassen
Damit der Flow funktioniert müssen Sie den HTTP Request Node öffnen und die URL anpassen. Geben Sie im Feld URL die IP-Adresse ein, die der Router ihrem Pico zugewiesen hat.