Nachdem wir die Grundlagen und die Architektur von MQTT kennengelernt haben, wird es nun praktisch. In diesem Teil zeige ich dir, wie du deinen eigenen MQTT-Broker installierst, dich mit Clients verbindest und die ersten Nachrichten zwischen Publisher und Subscriber austauschst. Außerdem gehen wir auf typische Fehler beim Einstieg ein und wie du sie beheben kannst.
Einen MQTT-Broker einrichten
Der Broker ist das Herzstück von MQTT. Ohne ihn können Publisher und Subscriber nicht miteinander kommunizieren. Für den Einstieg eignet sich Eclipse Mosquitto, ein Open-Source-Broker, der auf fast allen Plattformen läuft.
Installation unter Linux (Ubuntu/Debian)
sudo apt update
sudo apt install mosquitto mosquitto-clients
sudo systemctl enable mosquitto
sudo systemctl start mosquitto
Installation unter Windows
- Lade den Installer von mosquitto.org/download herunter.
- Während der Installation darauf achten, dass auch die Service-Option aktiviert wird.
- Danach läuft Mosquitto als Windows-Dienst.
Installation unter macOS (Homebrew)
brew install mosquitto
brew services start mosquitto
Nach der Installation lauscht der Broker standardmäßig auf Port 1883.
Mit MQTT-Clients verbinden
Um mit deinem Broker zu arbeiten, brauchst du Clients. Für die ersten Tests reichen Kommandozeilen-Tools oder GUI-Clients.
1. Mosquitto-Clients (CLI)
Bei der Installation von Mosquitto bekommst du zwei nützliche Tools:
mosquitto_pub
→ Publishermosquitto_sub
→ Subscriber
Beispiel: Nachricht senden und empfangen
- Subscriber starten:
mosquitto_sub -h localhost -t "test/topic"
→ wartet auf Nachrichten untertest/topic
. - Publisher senden:
mosquitto_pub -h localhost -t "test/topic" -m "Hallo MQTT"
→ der Subscriber zeigt sofort:Hallo MQTT
Damit hast du deine erste MQTT-Nachricht übertragen 🎉.
2. MQTT Explorer (GUI)
Für einen besseren Überblick empfiehlt sich ein grafisches Tool wie MQTT Explorer (kostenlos für Windows, macOS, Linux).
- Verbindung anlegen:
- Host:
localhost
- Port:
1883
- Host:
- Alle Topics und Nachrichten werden in einer Baumstruktur angezeigt.
- Du kannst Nachrichten manuell publizieren oder live verfolgen, was im Broker passiert.
3. MQTT in Python (Paho-MQTT)
Wenn du eigene Anwendungen schreiben willst, bietet sich die Python-Bibliothek paho-mqtt an.
Installation
pip install paho-mqtt
Subscriber in Python
import paho.mqtt.client as mqtt
def on_message(client, userdata, msg):
print(f"{msg.topic}: {msg.payload.decode()}")
client = mqtt.Client()
client.connect("localhost", 1883, 60)
client.subscribe("haus/wohnzimmer/temperatur")
client.on_message = on_message
client.loop_forever()
Publisher in Python
import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect("localhost", 1883, 60)
client.publish("haus/wohnzimmer/temperatur", "22.5")
client.disconnect()
Ergebnis: Sobald der Publisher sendet, empfängt der Subscriber die Nachricht.
Beispiel-Szenario: Sensor simulieren
Angenommen, du möchtest einen Temperatursensor simulieren, der jede Sekunde einen Wert an den Broker sendet.
import paho.mqtt.client as mqtt
import time
import random
client = mqtt.Client()
client.connect("localhost", 1883, 60)
while True:
temperatur = round(20 + random.random() * 5, 2)
client.publish("haus/wohnzimmer/temperatur", temperatur)
print("Gesendet:", temperatur)
time.sleep(1)
Parallel kannst du dich mit einem Subscriber verbinden:
mosquitto_sub -h localhost -t "haus/wohnzimmer/temperatur"
→ Du siehst die Temperaturwerte in Echtzeit.
Retained Messages testen
Um den Mechanismus der Retained Messages zu verstehen:
- Sende eine Nachricht als retained:
mosquitto_pub -h localhost -t "test/retained" -m "Letzter Wert" -r
- Verbinde dich später mit einem Subscriber:
mosquitto_sub -h localhost -t "test/retained"
→ Sofort nach dem Abo bekommst du „Letzter Wert“, obwohl die Nachricht schon vorher veröffentlicht wurde.
Typische Fehler und Troubleshooting
1. Verbindung verweigert
- Ursache: Broker läuft nicht.
- Lösung:
sudo systemctl status mosquitto sudo systemctl start mosquitto
2. Port nicht erreichbar
- Standard-Port ist 1883.
- Prüfen mit:
netstat -tulpen | grep 1883
3. Keine Nachricht sichtbar
- Prüfe, ob Publisher und Subscriber exakt das gleiche Topic nutzen.
- Groß-/Kleinschreibung beachten (
Temperatur
≠temperatur
).
4. Firewall blockiert
- Stelle sicher, dass Port 1883 (MQTT) oder 8883 (MQTT über TLS) nicht von einer Firewall blockiert wird.
5. Verbindung in Docker
- Wenn Broker in einem Docker-Container läuft, Host und Netzwerk-Konfiguration prüfen (
--net=host
oder Port-Mapping).
Tipps für die Praxis
- Klare Topic-Struktur entwickeln (z. B.
haus/raum/sensor
). - QoS richtig wählen: Für Sensorwerte reicht oft QoS 0. Für kritische Steuerungen QoS 1 oder 2.
- Broker-Logs prüfen: Mosquitto schreibt Logs (z. B. unter
/var/log/mosquitto
). - Clients mischen: CLI für schnelle Tests, GUI für Überblick, Code für Automatisierung.
Schreibe einen Kommentar