Was ist MQTT?
MQTT (Message Queuing Telemetry Transport) ist ein leichtgewichtiges Publish-Subscribe-Protokoll, das für zuverlässige Datenkommunikation in ressourcenarmen Umgebungen entwickelt wurde. Ursprünglich für Satellitenkommunikation, heute der Standard für IoT-Geräte.
Statt dass Sensoren sich gegenseitig kennen müssen, schicken alle Daten an einen zentralen Broker. Wer Daten braucht, abonniert sie dort — lose Kopplung, einfache Erweiterung.
Das Publish-Subscribe-Prinzip:
publisht Daten
verteilt Nachrichten
abonniert Topics
MQTT-Konzepte verstehen
Topics
Themenpfade für Nachrichten. Hierarchisch aufgebaut mit Schrägstrichen: gewächshaus/raum1/temperatur. Wildcards möglich: # für alles, + für eine Ebene.
Publish
Ein Gerät sendet eine Nachricht an ein Topic. Z.B. schickt der Temperatursensor jede Minute den aktuellen Wert an gewächshaus/klima/temp.
Subscribe
Ein Empfänger (z.B. Home Assistant, Grafana, eigenes Script) abonniert ein Topic und bekommt alle neuen Nachrichten automatisch zugestellt.
QoS Level
0 = höchstens einmal (kein Retry), 1 = mindestens einmal (garantiert aber evtl. doppelt), 2 = genau einmal. Für Sensordaten reicht QoS 1.
Retained Messages
Der Broker speichert die letzte Nachricht eines Topics. Neue Abonnenten bekommen sofort den letzten Wert, ohne auf die nächste Messung warten zu müssen.
Broker aufsetzen (Mosquitto)
Mosquitto ist der meistgenutzte Open-Source MQTT-Broker. Installation auf einem Raspberry Pi oder kleinen Server:
# Installation (Raspberry Pi OS / Debian)
sudo apt update && sudo apt install -y mosquitto mosquitto-clients
sudo systemctl enable mosquitto
sudo systemctl start mosquitto
# Basis-Konfiguration /etc/mosquitto/conf.d/local.conf:
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
# Benutzer anlegen:
sudo mosquitto_passwd -c /etc/mosquitto/passwd sensor_user
Sensor-Daten senden (Python-Beispiel)
"""
Einfacher MQTT-Publisher für Temperatursensor
Abhängigkeit: pip install paho-mqtt
"""
import paho.mqtt.client as mqtt
import json, time
# Konfiguration
BROKER = "192.168.1.100"
PORT = 1883
TOPIC = "gewaechshaus/raum1/klima"
INTERVAL = 60 # Sekunden zwischen Messungen
client = mqtt.Client("sensor-raum1")
client.username_pw_set("sensor_user", "passwort")
client.connect(BROKER, PORT)
while True:
payload = json.dumps({
"temperatur": sensor.read_temperature(),
"feuchtigkeit": sensor.read_humidity(),
"timestamp": time.time()
})
client.publish(TOPIC, payload, qos=1, retain=True)
time.sleep(INTERVAL)
Topic-Struktur empfehlung
# Empfohlene Hierarchie:
gewaechshaus/{standort}/{raum}/{sensor_typ}
# Beispiele:
gewaechshaus/berlin/veg-raum/temperatur
gewaechshaus/berlin/veg-raum/feuchtigkeit
gewaechshaus/berlin/veg-raum/co2
gewaechshaus/berlin/klon-raum/substrat/feuchtigkeit
gewaechshaus/berlin/naehrloesung/ph
gewaechshaus/berlin/naehrloesung/ec
# Wildcards:
gewaechshaus/berlin/# → alles aus Berlin
gewaechshaus/+/+/temperatur → alle Temperaturen
Integration mit anderen Tools
Beste Integration. Auto-Discovery via MQTT möglich. Ideal für Steuerung und Automatisierungsregeln.
Visuelle Programmierung. MQTT-Nodes eingebaut. Ideal für komplexere Ablauflogik ohne Code.
Telegraf-Agent kann MQTT-Topics direkt in InfluxDB schreiben. Für historische Analysen und Dashboards.
Paho-MQTT-Bibliothek für Python, M2Mqtt für C#. Für eigene Verarbeitungslogik.