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.
Als erstes wird der Kanal abonniert.
Anschließend wurde mit dem Befehl mosquitto_pub eine Nachricht in diesen Kanal gesendet.
Dann wird eine Nachricht gesendet.
Diese Nachricht wird von Abonnenten des Kanals ausgegeben.
Nach Eingang der Nachricht wird der Inhalt 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:

So sollte die Ausgabe des Skriptes 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.

Zum ESP8266 MQTT Tutorial

Falls du Fragen zu diesem Tutorial hast, kannst du gerne einen Kommentar hinterlassen.

Über den Autor


Sascha Huber

Hallo, ich bin Sascha, der Gründer von Smarthome Blogger.

Mit einer Leidenschaft für Technologie und einem Hintergrund als Software Engineer habe ich 2016 Smarthome Blogger gegründet. Mein Ziel war es schon immer, innovative Lösungen zu entdecken, die unser Leben einfacher und intelligenter gestalten können. In meinem beruflichen Leben arbeite ich täglich mit Software und Technik, aber auch in meiner Freizeit bin ich stets auf der Suche nach neuen technischen Spielereien und Möglichkeiten, mein Zuhause zu automatisieren und zu verbessern.

Auf Smarthome Blogger teile ich mein Wissen, meine Erfahrungen und meine Begeisterung für alles rund um das Thema Smarthome.



Dieser Beitrag hat dir gefallen?

Dann abonniere doch unseren Newsletter!