MQTT ist das Kommunikationsprotokoll für IoT-Projekte – egal ob du mit einem ESP32 Sensordaten überträgst, ein Dashboard mit Node-RED aufbaust oder komplexe Smart-Home-Systeme betreibst.
Doch nicht nur im Hobbybereich spielt MQTT eine Rolle: Auch in Enterprise-Projekten, Industrieanwendungen und skalierbaren Cloud-Systemen ist MQTT längst etabliert. Immer dann, wenn viele Geräte zuverlässig und effizient miteinander kommunizieren müssen, kommt dieses Protokoll ins Spiel.
👉 MQTT ist ein leichtgewichtiges Publish/Subscribe-Protokoll zur Übertragung von Nachrichten zwischen Geräten.
Dieser Beitrag ist der Auftakt zu einer mehrteiligen MQTT-Serie.
Wir starten mit den Grundlagen und bauen direkt ein erstes kleines Testsystem auf. In den folgenden Teilen greifen wir dann Daten aus verschiedenen smarten Systemen ab, übertragen diese per MQTT und verarbeiten sie weiter – z. B. in Node-RED oder eigenen Anwendungen.
Was bedeutet MQTT eigentlich?
Bevor wir tiefer einsteigen, stellt sich erstmal eine einfache Frage:
👉 Wofür steht MQTT eigentlich?
MQTT steht für Message Queuing Telemetry Transport.
Klingt im ersten Moment etwas sperrig – lässt sich aber ziemlich einfach herunterbrechen:
- Message → es werden Nachrichten übertragen
- Queuing → Nachrichten werden nicht direkt von Gerät zu Gerät gesendet, sondern über eine zentrale Stelle gesammelt und verteilt
- Telemetry → meist Sensordaten (z. B. Temperatur, Luftfeuchte, Statuswerte)
- Transport → die Übertragung zwischen Geräten
Vereinfacht gesagt bedeutet das:
MQTT ist ein Protokoll, das speziell dafür entwickelt wurde, Daten effizient zwischen Geräten auszutauschen, ohne dass diese direkt miteinander verbunden sein müssen.
Und genau das macht es so interessant für IoT-Projekte.
Ein Mikrocontroller wie ein ESP32 kann seine Daten einfach „in den Raum senden“, ohne zu wissen, wer diese später empfängt – sei es ein Dashboard, eine Datenbank oder ein anderes Gerät.
Damit das Ganze funktioniert, braucht MQTT im Hintergrund eine zentrale Instanz, die alle Nachrichten entgegennimmt und verteilt.
Genau diese Rolle übernimmt der sogenannte Broker.
Und genau diesen setzen wir jetzt gemeinsam auf.
MQTT Broker – Mosquitto mit Docker Compose
Damit wir unser Testsystem sauber und dauerhaft betreiben können, benötigen wir einen sogenannten MQTT-Broker. Dieser übernimmt die zentrale Rolle in unserem Setup und verteilt später alle Nachrichten zwischen den Geräten.
Eine der bekanntesten und leichtgewichtigen Lösungen ist Eclipse Mosquitto.
Eine sehr gute und ausführliche Beschreibung zum offiziellen Docker-Image findest du direkt auf Docker Hub: https://hub.docker.com/_/eclipse-mosquitto
Image herunterladen
Zunächst laden wir uns das offizielle Image:
docker pull eclipse-mosquitto
Docker Compose Datei erstellen
Jetzt erstellen wir eine eigene Docker-Compose-Datei:
nano mosquitto-docker-compose.yml
Füge folgenden Inhalt ein:
services:
mosquitto:
image: eclipse-mosquitto
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
mosquitto.conf anlegen
Die Datei mosquitto.conf wird nicht automatisch erstellt und muss daher einmalig von dir angelegt werden.
Zuvor muss jedoch die Verzeichnisstruktur angelegt werden, dafür gibt es zwei Möglichkeiten:
Variante 1: Der bequeme Weg
Du kannst den Container einmal kurz starten, damit die Verzeichnisstruktur automatisch angelegt wird:
docker compose -f mosquitto-docker-compose.yml up -d
Anschließend stoppst du den Container wieder:
docker compose -f mosquitto-docker-compose.yml down
👉 Danach sind die benötigten Ordner vorhanden und du kannst die Konfigurationsdatei hinzufügen.
Variante 2: Manuell anlegen
Alternativ kannst du die Struktur direkt selbst erstellen:
mkdir mosquitto; cd mosquitto; mkdir config; mkdir data; mkdir log;
Berechtigungen auf die Verzeichnisse geben
Damit der Mosquitto Broker Service in die Verzeichnisse schreiben kann, müssen die berechtigungen angepasst werden.
sudo chown -R 1883:1883 config
sudo chown -R 1883:1883 data
sudo chown -R 1883:1883 log
Konfigurationsdatei erstellen
Im Verzeichnis: ./mosquitto/config legst du nun die Datei mosquitto.conf an:
edit ./mosquitto/config/mosquitto.conf
listener 1883
allow_anonymous true
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
Broker erneut starten
Jetzt kannst du den Container wieder starten:
docker compose -f mosquitto-docker-compose.yml up -d
Status prüfen
docker compose -f mosquitto-docker-compose.yml ps
Logs anzeigen
docker compose -f mosquitto-docker-compose.yml logs -f
Zugriff auf den MQTT Broker im Docker Container
Da wir den MQTT-Broker in einem Docker-Container betreiben, müssen wir für einige Befehle direkt innerhalb des Containers arbeiten.
Dafür können wir uns eine interaktive Shell im Container öffnen.
In den Container wechseln
Zunächst schauen wir uns an, wie unser Container heißt:
docker ps --format "{{.Names}}"
In der Regel haben wir ihn bereits mosquitto genannt.
Nun wechseln wir in den Container:
docker exec -it mosquitto sh
Erstes Praxisbeispiel: Temperaturwert senden und empfangen
Nachdem unser MQTT-Broker läuft und wir Zugriff auf den Container haben, schauen wir uns jetzt ein erstes praxisnahes Beispiel an.
Ein klassisches Beispiel: Temperaturwerte.
Terminal 1 – Publisher
Der Publisher sendet eine Nachricht an den MQTT-Broker.
Dieser verteilt die Nachricht anschließend automatisch an alle Subscriber, die das entsprechende Topic abonniert haben.
mosquitto_pub -h localhost -t sensor/temperature -m "22.5"
Gibt es keinen Subscriber für dieses Topic, wird die Nachricht zwar vom Broker entgegengenommen, aber nicht gespeichert und somit verworfen.
Retain-Flag
Mit dem Parameter retain kannst du dieses Verhalten beeinflussen.
Wird dieser auf true gesetzt, speichert der Broker die letzte gesendete Nachricht und liefert sie automatisch an neue Subscriber aus, sobald diese das Topic abonnieren.
mosquitto_pub -h localhost -t sensor/temperature -m "22.5" -r
Hinweis: Es wird dabei immer nur die letzte Nachricht gespeichert.
Sobald eine neue Nachricht mit gesetztem Retain-Flag gesendet wird, ersetzt diese die vorherige.
Terminal 2 – Subscriber
Der Subscriber lauscht auf ein bestimmtes Topic und empfängt automatisch alle Nachrichten, die darauf veröffentlicht werden.
In unserem Beispiel ist das Topic:
sensor/temperature
Der Subscriber wird mit folgendem Befehl gestartet:
mosquitto_sub -h localhost -t sensor/temperature
Sobald nun eine Nachricht auf dieses Topic gesendet wird, erscheint sie direkt im Terminal.
Wichtig zu verstehen: Der Subscriber muss den Publisher nicht kennen.
Er „hört“ einfach auf das Topic und bekommt alle Nachrichten, die dort ankommen.
Topics strukturieren: Geräte und Sensoren gruppieren
Ein großer Vorteil von MQTT ist die Möglichkeit, Topics hierarchisch zu strukturieren. Dazu werden die einzelnen Ebenen mit einem / getrennt.
So lassen sich Geräte und Sensoren logisch gruppieren, zum Beispiel nach Ort und Funktion:
erdgeschoss/steckdosen
erdgeschoss/lampen
erdgeschoss/kueche/steckdosen
erdgeschoss/kueche/lampen
erdgeschoss/kueche/sensoren/temperatur
erdgeschoss/kueche/sensoren/luftfeuchtigkeit
erdgeschoss/wohnstube/steckdosen
erdgeschoss/wohnstube/lampen
erdgeschoss/wohnstube/sensoren/temperatur
erdgeschoss/wohnstube/sensoren/luftfeuchtigkeit
Wildcards in MQTT: Mehrere Topics gleichzeitig abonnieren
Bisher haben wir einzelne Topics gezielt abonniert, zum Beispiel:
mosquitto_sub -h localhost -t erdgeschoss/kueche/lampen
Doch was passiert, wenn wir nicht nur einen Raum, sondern mehrere gleichzeitig überwachen möchten?
👉 Genau hier kommen sogenannte Wildcards ins Spiel.
Beispiel: Alle Lampen im Erdgeschoss
Mit folgendem Topic kannst du alle Lampen im Erdgeschoss abonnieren:
mosquitto_sub -h localhost -t erdgeschoss/+/lampen
Damit würdest du z. B. folgende Topics empfangen:
erdgeschoss/kueche/lampenerdgeschoss/wohnstube/lampen
Wildcard # – mehrere Ebenen gleichzeitig abonnieren
Neben der + Wildcard gibt es noch eine zweite, sehr mächtige Möglichkeit: die # Wildcard
Bedeutung von #
Die Wildcard # steht für beliebig viele Ebenen innerhalb eines Topics. Damit kannst du komplette Bereiche auf einmal abonnieren.
Wichtige Regel
Die # Wildcard darf nur am Ende eines Topics stehen.
Typischer Effekt bei Retained Messages
Wenn du ein Topic abonnierst und sofort alte Nachrichten angezeigt bekommst, liegt das in der Regel an sogenannten Retained Messages.
Der MQTT-Broker speichert dabei die letzte Nachricht pro Topic, wenn diese mit dem Retain-Flag (-r) gesendet wurde.
Beispiel
Du abonnierst: mosquitto_sub -h localhost -t erdgeschoss/# -v
👉 Und erhältst direkt mehrere Nachrichten, obwohl aktuell nichts gesendet wurde.
Warum passiert das?
Für jedes Topic unterhalb von erdgeschoss/... kann eine retained Nachricht gespeichert sein.
Zum Beispiel:
erdgeschoss/kueche/lampenerdgeschoss/kueche/sensoren/temperaturerdgeschoss/wohnstube/lampen
👉 Für jedes dieser Topics wird die letzte gespeicherte Nachricht sofort ausgeliefert.
Retained Nachrichten löschen
Um eine retained Nachricht zu löschen, sendest du einfach eine leere Nachricht auf das gleiche Topic – ebenfalls mit gesetztem Retain-Flag:
mosquitto_pub -h localhost -t erdgeschoss/kueche/lampen -n -r
Alternativ:
mosquitto_pub -h localhost -t erdgeschoss/kueche/lampen -m "" -r
Fazit
Wenn du das Prinzip von Publish und Subscribe einmal verstanden hast und weißt, wie Topics aufgebaut sind und mit Wildcards funktionieren, ist der Einstieg in MQTT bereits geschafft.
Viele Dinge wirken am Anfang vielleicht etwas abstrakt – spätestens nach den ersten eigenen Tests wird jedoch schnell klar, wie einfach und flexibel dieses System eigentlich ist.
Gerade die Möglichkeit, Daten unabhängig voneinander zu senden und zu empfangen, macht MQTT so leistungsfähig und perfekt für IoT-Projekte.
Ausblick
Im nächsten Beitrag gehen wir einen Schritt weiter in die Praxis:
Ich zeige dir anhand eines ESP32, wie du echte Sensordaten erfassen und auf ein MQTT-Topic senden kannst.
Diese Daten werden wir anschließend weiterverarbeiten – zum Beispiel in Node-RED oder anderen Anwendungen.
👉 Damit baust du dir Schritt für Schritt dein eigenes kleines IoT-System auf.
FAQ – MQTT einfach erklärt
Was ist MQTT einfach erklärt?
MQTT ist ein leichtgewichtiges Kommunikationsprotokoll, mit dem Geräte Nachrichten untereinander austauschen können.
Dabei senden Geräte ihre Daten an ein sogenanntes Topic, ohne zu wissen, wer diese empfängt. Andere Geräte können diese Topics abonnieren und die Daten verarbeiten.
Was ist ein MQTT Broker?
Ein MQTT-Broker ist die zentrale Instanz im System.
Er nimmt Nachrichten von Sendern (Publishern) entgegen und verteilt diese an alle Empfänger (Subscriber), die das entsprechende Topic abonniert haben.
Ein häufig verwendeter Broker ist Eclipse Mosquitto.
Was ist ein Topic bei MQTT?
Ein Topic ist eine Art „Adresse“ oder „Kanal“, über den Nachrichten gesendet werden.
Beispiel: sensor/temperature
Geräte können gezielt auf bestimmte Topics hören und so nur die für sie relevanten Daten empfangen.
Was bedeutet Publish und Subscribe?
- Publish bedeutet, eine Nachricht an ein Topic zu senden
- Subscribe bedeutet, ein Topic zu abonnieren und Nachrichten zu empfangen
Dieses Prinzip nennt man Publish/Subscribe-Modell.
Was ist der Unterschied zwischen MQTT und HTTP?
Der wichtigste Unterschied liegt im Kommunikationsmodell:
- HTTP arbeitet mit Anfrage und Antwort (Request/Response)
- MQTT arbeitet mit Publish/Subscribe
MQTT ist dadurch deutlich effizienter und besser für IoT-Projekte geeignet, bei denen viele Geräte gleichzeitig Daten austauschen.
Was sind Wildcards in MQTT?
Wildcards ermöglichen es, mehrere Topics gleichzeitig zu abonnieren.
+steht für genau eine Ebene#steht für mehrere Ebenen (nur am Ende erlaubt)
Beispiel: erdgeschoss/+/lampen
Damit können alle Lampen in verschiedenen Räumen gleichzeitig empfangen werden.
Was ist das Retain-Flag bei MQTT?
Mit dem Retain-Flag kann eine Nachricht beim Broker gespeichert werden.
Neue Subscriber erhalten diese Nachricht sofort, sobald sie das Topic abonnieren.
👉 Wichtig: Es wird immer nur die letzte Nachricht gespeichert.
Wann sollte ich MQTT einsetzen?
MQTT eignet sich besonders gut für:
- Systeme mit vielen Geräten
- IoT-Projekte mit Mikrocontrollern (z. B. ESP32)
- Smart Home Anwendungen
- Echtzeit-Datenübertragung
Kann ich mehrere Geräte gleichzeitig verbinden?
Ja, genau das ist einer der größten Vorteile von MQTT. Mehrere Publisher und Subscriber können gleichzeitig über einen einzigen Broker kommunizieren.
Letzte Aktualisierung am: 10. April 2026















1 thought on “MQTT einfach erklärt: Was ist MQTT und warum ist es perfekt für IoT?”