Ok, Node-RED hat also arge Probleme mit der Menge an Daten, die es z.B. in einem Linienchart anzeigen soll. Ich konnte bisher keine Grenze ausmachen. Aber bei der Darstellung von vier Charts mit jeweils 2000 Werten geht die Darstellung im Browser extrem in die Knie.

Verschaffe ich mir doch erstmal einen Überblick über das, was ich im Endergebnis sehen möchte.

  1. Sammeln von Daten (Node-RED)
  2. Ablage der Daten in eine Datenbank zur Langzeitspeicherung (InfluxDB)
  3. Visualisierung dieser Daten in geeigneter Darstellung (Grafana)

Mein Konstrukt würde demnach in etwa so aussehen:

 

Dabei wird Node-RED lediglich als Sammelstelle benutzt und benötigt im Grunde keine eigene Darstellung mehr. Der Vorteil liegt klar in der Nachverfolgbarkeit der Daten, gewisser Manipulationen (z.B. Berechnen des reduzierten Luftdrucks aus dem Absolutwert eines Sensors) und Weitersenden in einer selbst definierten Struktur an die Influx-Datenbank.

Da ist nun vor den drei Komponenten noch eine weitere Instanz aufgeführt. Nämlich ein MQTT-Broker. Was das ist, kann man hier https://mqtt.org nachlesen.

MQTT-Broker

Ein MQTT-Broker verteilt Daten an sogenannte Subscriber. Man könnte sie auch Abonnenten nennen. Ein solcher Broker ist ein Service, der auf einem Rechner entweder im Hamnet, im Internet oder zuhause im LAN betrieben wird. Er hat ständig ein offenes Ohr für seine Publisher, die ihm Daten schicken und informiert seine Subscriber, sobald neue Daten vorliegen. Dies geschieht in Echtzeit und unterliegt lediglich von der Geschwindigkeit nur den Verzögerungstaktiken der Plattformen, über die die Daten ausgetauscht werden. Der Datenaustausch basiert dabei auf dem Mosquitto-Protokoll (MQTT).

Mal ein Beispiel:

In einem Reisbunker in China messe ich in einem Intervall von 5 Minuten mit einem ESP8266 und einem angeschlossenen BME280 die Temperatur, die rel. Luftfeuchte und den Luftdruck. Der ESP-Controller hat eine Internetverbindung und sendet die Daten an meinen bevorzugten MQTT-Broker.

Ein Mosquitto-Client auf meinem Raspberry Pi lauscht wartend auf die Meldungen vom MQTT-Broker. Sobald neue Daten vom Reisbunker vorliegen, werden sie unverzüglich zugestellt und können weiter verarbeitet werden.

Dass die Richtung auch gewechselt werden kann, macht das Ganze noch etwas attraktiver. Somit könnte man z.B. bei Über- oder Unterschreiten der Temperatur (Sensor) ein Klimagerät ein- bzw. ausschalten (Aktor). Der ESP-Controller im Reisbunker hat sicher noch einen GPIO-Port frei, über den sich ein Relais schalten ließe. In dieser Überlegung wäre nun der Mosquitto-Client auf meinem Raspberry Pi der Publisher und der ESP-Controller der Subscriber. Natürlich könnte der Controller das auch gleich selbst machen, abhängig vom Sketch. Aber wozu einfach, wenn’s auch überirdisch geht?

Dass das alles in geordnete Bahnen gebracht werden muss, ist ja klar.

Installation von Mosquitto-Service und Mosquitto-Client

Alles ganz einfach:

$ sudo apt install mosquitto mosquitto-clients

Damit der Dienst auch immer startet, folgendes eingeben

$ sudo systemctl enable mosquitto.service

$ sudo systemctl start mosquitto.service

Damit stehen auf dem Raspberry Pi nun einige neue Befehle, wie z.B. mosquitto_pub (etwas publizieren) und mosquitto_sub (etwas abonnieren) zur Verfügung.

Mosquitto im Node-RED

Die erforderlichen Komponenten sind bereits im aktuellen Nodered als Input und Output Knoten vorhanden.

Input

Output

Um den Transport von Daten zu testen, starte ich auf dem Raspberry Pi eine Konsole und starte den Subscriber (den Abonnenten) mit dem Topic Datentransport mit

$ mosquitto_sub -d -t Datentransport

Jetzt lauscht der RPi unter dem Topic “Datentransport”, ob für ihn irgendwelche Daten vorliegen. Das lass ich auch mal so stehen und erstelle einen Flow im Nodered:

Ich brauche dazu einen mqtt output und einen timestamp inject.

Ein Doppelklick auf den mqtt Node öffnet die Einstellungen. Unter Server füge ich einen neuen Server hinzu und setze die Verbindung auf localhost mit dem Port 1883 (Standard). Den Namen setze ich ebenfalls auf localhost. Klick auf Update.

 

Das Feld Topic beschreibe ich mit “Datentransport”. Denn auf diesen Begriff (Topic) lauscht ja der Client auf der Konsole. 

Mit Klick auf “Done” werden diese Eigenschaften für den Knoten gesetzt.

Der Node timestamp bleibt so, wie er ist.

Dieser Flow wird nun über den Button “Deploy” veröffentlicht.

Bei jedem Klick auf den kleinen Button vor timestamp wird der aktuelle Zeitstempel über den mqtt Datentransport an den MQTT-Broker im Raspberry Pi (localhost) veröffentlicht (Publish).

Und auf der Konsole erscheint dann folgendes:

Dreimal geklickt, und der Flow im Nodered hat hier nun also dreimal die aktuelle Uhrzeit im Unixformat gesendet, die der Subscriber hier empfangen hat:
1615812449052
1615812452472
1615812456822

Nun erweitere ich den Flow mit einem mqtt input, den man genauso konfiguriert mit der Verbindung zu localhost und dem Topic Datentransfer. Daran binde ich zum Test einen Debug Knoten.

Im Debug-Fenster sieht das dann so aus:

 

Die Verbindung zwischen dem Output und dem Input Knoten ist also der MQTT-Broker. 

Das schöne an diesem MQTT ist nun aber auch, dass meine Sensordaten aus dem Reisbunker nicht nur an einem Client (1:1) gelesen werden können, sondern von vielen Clients (1:n). So kann man sich die aktuellen Daten auch auf einem Smartphone unterwegs anschauen. Und wenn es nicht nur Sensordaten sind, könnte es auch ein aktuelles Foto vom Reisbunker sein.

Und wenn mein kleines Reisimperium wächst, dann habe ich bald mehrere Reisbunker, deren Umweltbedingungen man auf mehreren Clients verfolgen kann (n:n).

 

Wo findet man öffentliche MQTT-Broker?

  1. Da wir uns im Amateurfunkbereich befinden, liegt die Nutzung eines MQTT-Brokers im Hamnet auf der Hand. Ein Service ist im Hamnet erreichbar unter der Adresse: mqtt.hc.r1.ampr.org (44.148.237.2)
  2. Für den Fall, dass mal grad kein Hamnet zur Verfügung steht, haben sich Internetdienste bereit erklärt die Standardfunktionen eines MQTT-Brokers kostenfrei und öffentlich zur Verfügung zu stellen. Wer seine Daten jedoch nicht öffentlich präsentieren möchte, kann bei diesen Anbietern auch kostenpflichtige Instanzen abgesichert nutzen.
    Eine Internetsuche mit den Begriffen public mqtt bringt schon eine Menge Rückmeldungen.

Ich sage mir aber, wenn ich irgendwelche Zahlen oder Buchstaben hin- und her schicke, ist es weitgehend uninteressant mitgelesen zu werden. Sollte wirklich jemand Interesse an meinen Temperaturdaten haben, so darf sich diese Person die Daten gerne ausdrucken, einrahmen und an die Wand hängen. Sie soll mich aber bitte in Ruhe lassen, wenn sie mit den Zahlen nicht einverstanden ist.

Die beiden T in MQTT stehen übrigens für Telemetry Transfer.

Nun will ich aber nicht nur die Uhrzeit übermitteln, sondern richtige Daten von einem Sensor. Nach einer kurzen Pause geht es weiter mit dem 9. Teil der kleinen Wetterstation.

 

Was braucht ein Funkamateur? Oder: "Hallo, ist da jemand?"
Atmega 328 mit einem Arduino Uno programmieren

Kommentar hinterlassen

Your email address will not be published. Required fields are marked *

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.