
MQTT Raspberry Pi Einführung
25.05.2018
Tutorial, Raspberry Pi Smart Home
MQTT ist ein Protokoll, mit dem im Smarthome System ganz einfach Daten geteilt werden können. Das Protokoll basiert auf dem Publish Subscribe-System, das heißt, dass es verschiedene Kanäle gibt, die man "abonnieren" kann und in die man Daten senden kann. Diese Daten werden dann an alle Netzwerkteilnehmer gesendet, die diesen Kanal abonniert haben. In meiner MQTT Raspberry Pi Einführung möchte ich dir das MQTT-Protokoll etwas näher bringen und die Funktionsweise in einigen Beispielen demonstrieren.Benötigte Dinge für die MQTT Raspberry Pi Einführung
Raspberry Pi Mosquitto installieren
Um Daten senden und empfangen zu können, muss man sich mit einem MQTT-Broker verbinden, der sich um den Datenversand kümmert. Ein Raspberry Pi lässt sich sehr günstig als MQTT-Broker verwenden. Dazu musst du nur die folgenden Befehle im Terminal ausführen und etwas warten:
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install
mosquitto mosquitto-clients -y
Daten mit MQTT auf dem Raspberry Pi empfangen
Um Daten per MQTT auf deinem Raspberry Pi empfangen zu können, gibst du einfach den folgenden Befehl ins Terminal ein. Der Parameter -t /home/data gibt an, dass du alle Daten aus dem Kanal /home/data empfangen möchtest. Nachdem du den Kanal abonniert hast, schreibt der Pi alle Daten auf die Kommandozeile, die er in diesem Kanal empfangen konnte. Im nächsten Schritt werden dann Daten in diesen Kanal geschrieben.
mosquitto_sub -d -t /home/data
Daten mit dem Raspberry Pi per MQTT versenden
Möchtest du stattdessen Daten mit deinem Raspberry Pi versenden, so musst du den folgenden Befehl ins Terminal eingeben. Der Parameter -t /home/data gibt hierbei wieder den Kanal an und der Parameter -m "Hello World" legt die Nachricht fest, die verschickt werden soll.
mosquitto_pub -d -t /home/data -m "Hello World"
Um das Senden und Empfangen von Nachrichten zu verdeutlichen, habe ich zwei Terminal-Fenster geöffnet und in einem den Kanal abonniert und im anderen eine Nachricht in den Kanal gesendet.
Im ersten Screenshot siehst du, wie der Pi den Kanal /home/data abonniert und auf Nachrichten wartet.
Anschließend wurde mit dem Befehl mosquitto_pub eine Nachricht in diesen Kanal gesendet.
Diese Nachricht wird von Abonnenten des Kanals ausgegeben.
Daten per MQTT mit Python empfangen und senden
Um MQTT in deinem Smarthome-System auch sinnvoll nutzen zu können, sollte auch mit einer Programmiersprache darauf zugegriffen werden können. Dazu wird hier Python benutzt. Python wird auf deinem Pi schon standardmäßig unterstützt. Damit du mit Python über MQTT Daten senden und empfangen kannst, muss noch eine Bibliothek eingebunden werden. Gib dazu einfach die folgenden Befehle ins Terminal ein:
sudo apt-get install python-pip -y
sudo pip install paho-mqtt
Jetzt kannst du ein neues Python-Skript erstellen, dem Daten gesendet werden können, damit es darauf reagiert. In diesem Skript wird erst einmal immer nur die erhaltene Nachricht ausgegeben. Mit wenig Aufwand könnte man aber z.B. alle Werte eines Temperatursensors ganz einfach in eine Datenbank schreiben und so den Verlauf der Werte in einem Graphen anzeigen lassen.
Öffne das Skript mit dem Befehl sudo nano mqtt_test.py und füge den folgenden Code ein:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
def on_message(client, userdata, message):
msg = str(message.payload.decode("utf-8"))
print("message received: ", msg)
print("message topic: ", message.topic)
def on_connect(client, userdata, flags, rc):
client.subscribe('/home/data')
BROKER_ADDRESS = "localhost"
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER_ADDRESS)
print("Connected to MQTT Broker: " + BROKER_ADDRESS)
client.loop_forever()
Dieses Skript verbindet sich mit einem MQTT-Broker und wartet auf Nachrichten. Wird eine Nachricht an den Kanal /home/data gesendet, so wird der Inhalt der Nachricht ausgegeben.
Speichere das Skript ab und führe es mit dem folgendem Befehl im Terminal aus:
sudo python mqtt_test.py
Dann öffnest du ein zweites Terminal-Fenster und sendest mit dem Befehl von vorher wieder den Text "Hello World" an den Kanal /home/data:
mosquitto_pub -d -t /home/data -m "Hello World"
Das Skript erhält nun die Nachricht per MQTT und gibt den Namen des Knals, sowie den Inhalt der Nachricht aus. Das Ganze sollte ungefähr so aussehen:
Daten per MQTT zwischen Raspberry Pi und ESP8266 austauschen
Im nächsten Tutorial zeige ich dir, wie du mit dem MQTT-Protokoll ganz einfach Daten zwischen deinem Raspberry Pi und einem ESP8266 austauschen kannst. Dann kannst du beispielsweise mit dem ESP8266 verschiedene Sensorwerte messen und sie zur Verarbeitung an den Pi senden oder der Pi übernimmt das "Denken" in deinem System und sendet Steuerbefehle an den ESP8266, die dieser dann ausführt. Sobald das neue Tutorial online ist, erscheint hier ein Button, der dich direkt dorthin bringt. Falls du Fragen zu diesem Tutorial hast, kannst du gerne einen Kommentar hinterlassen.Dieser Beitrag hat dir gefallen?
Dann abonniere doch unseren Newsletter!