Node-RED Entwicklungssoftware

Raspi als MQTT-Broker | Node RED | InfluxDB



Quellen:
H. Baumgärtner, P. Kraut, R. Rahm, ZSL Esslingen, 2021
https://de.wikipedia.org/wiki/Node-RED, 2022


Der Raspberry Pi wird als MQTT-Broker eingerichtet, Node-RED und InfluxDB installiert. Hiermit können die MQTT-Daten weiter verarbeitet werden. Mosquitto ist ein MQTT-Broker, InfluxDB eine nicht relationale Datenbank und Node-RED ein Tool, um die Daten in die Datenbank zu schreiben.

In diesem Artikel lernst Du drei verschiedene Tools kennen, um die Daten aus dem Internet of Things zu verarbeiten.

Mosquitto Raspi als MQTT-Broker

Um auf dem Raspberry Pi einen MQTT-Broker laufen zu lassen installieren wir die Serversoftware Mosquitto.
~ $ sudo apt install mosquitto

Zum Testen installieren wir noch den Mosquitto Client:
~ $ sudo apt install mosquitto-clients

Um den Raspberry Pi nun als MQTT-Broker zu verwenden benötigen wir lediglich die IP-Adresse des Raspi. Zum Testen verwenden wir den Client und öffnen zwei Terminalfenstere. In einem Fenster abonnieren (mosquitto_sub) wir, in dem anderen veröffentlichen (mosquitto_pub) wir.

~ $ mosquitto_sub -v -h broker.hivemq.com -t klasse/messwerte/#
~ $ mosquitto_pub -h broker.hivemq.com -t klasse/messwerte/myname -m "Gruss vom Telefonmann" ~ $ mosquitto_pub -h broker.hivemq.com -t klasse/messwerte/myname -m "{"Temperatur": 21.8,"Luftfeuchte": 32.0}"

Man beachte die verschiedenen Optionen wie -h für host oder -t für topic. Weiterführende Informationen findet man unter:

Der Mosquitto Server auf dem Raspberry Pi akzeptiert in der Grundkonfiguration nach der Installation nur lokale Connections. Um ihn auch für externe Clients zu öffnen, muss man diese beiden Zeilen in die mosquitto.conf eintragen:

~ $ sudo nano /etc/mosquitto/mosquitto.conf
listener 1883
allow_anonymous true

Node-RED Verbindungen nach dem Baukastenprinzip herstellen

Node-RED Baukastenprinzip

Node-RED ist eine Serversoftware mit der nach dem Baukastenprinzip bspw. eine Verbindung zwischen MQTT und einer Datenbank hergestellt werden kann. Node-RED wurde von der Firma IBM entwickelt.

Wir installieren Node-RED, aktivieren den Autostart beim Rebooten und starten es.

~ $ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
~ $ sudo systemctl enable nodered.service
~ $ sudo node-red-start

Unter http://meineip:1880 kann man nun auf die Programmieroberfläche von Node-RED zugreifen. In einem Flow können unterschiedliche Ein- und Ausgabenodes miteinander verbunden werden. Weitere Paletten wie die node-red-contrib-influxdb findet man im Hauptmenü.

Palette verwalten>Installation>
influxDB node-red-contrib-influxdb

Falls die Nodes noch einen blauen Kreis haben, müssen diese noch mit dem Übernahme(deploy)-Button bestätigt werden. Bei einem roten Dreieck fehlt noch die Konfiguration. So sind bspw. bei MQTT Hostname und Topic zu konifgurieren. Mit einem Klick auf dem Debug-Button, lässt sich dann die payload anzeigen.

InfluxDB Messwerte in die Datenbank schreiben

Um die MQTT-Messwerte nun in eine Datenbank zu schreiben installieren wird InfluxDB, eine nicht relationale Datenbank, welche die Werte im JSON-Format mit Zeitstempel speichert.

Im ersten Schritt holen wir uns den InfluxDB-Key und fügen InfluxDB zu unserer Respository-Liste hinzu.

~ $ wget -q https://repos.influxdata.com/influxdata-archive_compat.key
~ $ echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
~ $ echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

Wir updaten die Liste und upgraden alle anderen installierten Packages. Abschließend installieren wir influxDB.

~ $ sudo apt update
~ $ sudo apt upgrade
~ $ sudo apt install -y influxdb

Wir starten influxDB und richten den automatischen Systemstart beim Hochfahren des Raspi ein.

~ $ sudo systemctl unmask influxdb
~ $ sudo systemctl enable influxdb
~ $ sudo systemctl start influxdb

InfluxDB lässt sich nun über SQL-Befehle beschreiben. Wir starten influxDB, legen eine Datenbank an, verwenden diese und lassen uns alle Tabellen (MEASUREMENTS) anzeigen.

~ $ influx
influxdb > CREATE DATABASE mylife
influxdb > SHOW DATABASES
influxdb > USE mylife
influxdb > SHOW MEASUREMENTS

Der Tabellenname sei nun sensor und erhält den Primärschlüssel time. Alle weiteren Einträge (Spalten) sind nun entweder Tags (location) oder Fields (temperature, humdity). Wir generieren nun vier Einträge und lassen uns diese anzeigen.

influxdb > INSERT sensor,location=living temperature=23.2,humidity=32.2
influxdb > INSERT sensor,location=living temperature=24.4,humidity=32.4
influxdb > INSERT sensor,location=bedroom temperature=25.2,humidity=32.6
influxdb > INSERT sensor,location=bedroom temperature=25.1,humidity=32.4
influxdb > SELECT * FROM sensor where temperature > 22
influxdb > SELECT * FROM sensor order by time desc limit 5
Ausgabe der influxDB mit dem select-Befehl

Eine genaue Beschreibung aller Befehle findet man unter: