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.
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 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ü.
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.
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
Eine genaue Beschreibung aller Befehle findet man unter: