MQTT
MQTT (Message Queuing Telemetry Transport) ist ein leichtgewichtiges Messaging-Protokoll, das speziell für die Kommunikation zwischen Geräten mit begrenzten Ressourcen und unzuverlässigen Netzwerkverbindungen entwickelt wurde. Es bildet heute das Rückgrat vieler IoT-Anwendungen (Internet of Things) und ermöglicht die effiziente Datenübertragung zwischen Sensoren, Aktoren und zentralen Systemen.
Stell dir MQTT wie einen intelligenten Postboten vor: Anstatt dass jedes Gerät ständig nachfragen muss, ob neue Nachrichten vorliegen, werden Nachrichten automatisch zugestellt, sobald sie verfügbar sind. Das spart Energie und Bandbreite - zwei kritische Ressourcen in IoT-Umgebungen.
Geschichte und Entwicklung von MQTT
Das MQTT-Protokoll wurde 1999 von Dr. Andy Stanford-Clark (IBM) und Arlen Nipper (Cirrus Link Solutions) entwickelt. Die Entstehungsgeschichte ist eng mit der Öl- und Gasindustrie verbunden: Die Ingenieure benötigten ein System zur Fernüberwachung von Ölpipelines an abgelegenen Standorten, wo nur teure Satellitenkommunikation verfügbar war.
Aus dieser praktischen Anforderung entstand ein Protokoll mit einem klaren Designziel: minimale Bandbreitennutzung und minimaler Energieverbrauch bei gleichzeitiger Zuverlässigkeit.
Die wichtigsten Meilensteine:
- 1999: Erste Entwicklung durch IBM und Arlen Nipper
- 2010: Veröffentlichung als offenes Protokoll (MQTT 3.1)
- 2013: Standardisierung durch OASIS (Organization for the Advancement of Structured Information Standards)
- 2016: ISO-Standardisierung als ISO/IEC 20922:2016
- 2019: Veröffentlichung von MQTT 5.0 mit erheblichen Verbesserungen
Seit Version 3.1.1 ist MQTT übrigens kein Akronym mehr, sondern der offizielle Name des Protokolls.
Funktionsweise: Das Publish-Subscribe-Modell
Das Herzstück von MQTT ist das Publish-Subscribe-Modell (Pub/Sub). Anders als bei klassischen Client-Server-Modellen, bei denen Clients aktiv beim Server nach Daten anfragen müssen, arbeitet MQTT nach einem Push-Prinzip.
Die drei Rollen im MQTT-System
- Publisher: Geräte oder Anwendungen, die Daten an das System senden (z.B. ein Temperatursensor)
- Subscriber: Geräte oder Anwendungen, die an bestimmten Daten interessiert sind (z.B. eine Heizungssteuerung)
- Broker: Der zentrale Vermittler, der alle Nachrichten empfängt und an die richtigen Empfänger weiterleitet
Topics: Die Adressierung von Nachrichten
Topics sind hierarchisch strukturierte Zeichenketten, die durch Schrägstriche getrennt werden. Sie fungieren als Adressierungssystem für Nachrichten:
Haus/Wohnzimmer/Temperatur
Fabrik/Halle1/Maschine5/Vibration
Gebaeude/Etage2/Buero12/Licht
Clients können Topics abonnieren (Subscribe) und erhalten dann automatisch alle Nachrichten, die zu diesem Topic veröffentlicht werden. Der Broker übernimmt die Zustellung.
Wildcards für flexible Abonnements
MQTT unterstützt zwei Wildcard-Typen:
- + (Plus): Ersetzt genau eine Hierarchieebene →
Haus/+/Temperaturempfängt Temperaturdaten aus allen Räumen - # (Hash): Ersetzt beliebig viele Ebenen →
Haus/#empfängt alle Nachrichten aus dem Haus
Quality of Service (QoS) Level
MQTT definiert drei Quality of Service-Level, die die Zuverlässigkeit der Nachrichtenlieferung bestimmen:
| QoS-Level | Name | Beschreibung | Anwendungsfall |
|---|---|---|---|
| QoS 0 | At Most Once | Nachricht wird einmal gesendet, keine Bestätigung | Unkritische Sensordaten, wo Verlust akzeptabel ist |
| QoS 1 | At Least Once | Nachricht wird bestätigt, bei Ausbleiben wiederholt | Wichtige Daten, wo Duplikate verarbeitet werden können |
| QoS 2 | Exactly Once | Handshake-Verfahren garantiert genau einmalige Zustellung | Kritische Transaktionen, Abrechnungsdaten |
Die Wahl des QoS-Levels ist ein Kompromiss zwischen Zuverlässigkeit und Ressourcenverbrauch. Je höher das Level, desto mehr Nachrichten werden zwischen Client und Broker ausgetauscht.
Weitere wichtige MQTT-Features
Retained Messages
Der Broker speichert die letzte Nachricht eines Topics und sendet sie automatisch an neue Subscriber. Das ist praktisch, wenn ein neuer Client sofort den aktuellen Zustand kennen soll, ohne auf die nächste Aktualisierung warten zu müssen.
Last Will and Testament (LWT)
Clients können beim Verbindungsaufbau eine "letzte Nachricht" hinterlegen. Wenn der Client unerwartet die Verbindung verliert, sendet der Broker diese Nachricht automatisch. Das ermöglicht anderen Systemen, auf Ausfälle zu reagieren.
Keep-Alive-Mechanismus
Regelmäßige PING-Nachrichten halten die Verbindung aktiv und ermöglichen die Erkennung von Verbindungsabbrüchen, auch wenn keine Daten übertragen werden.
MQTT 5.0: Neue Features
Mit der 2019 veröffentlichten Version 5 wurden erhebliche Verbesserungen eingeführt:
- Erweiterte Fehlerbehandlung: Detaillierte Fehlercodes ermöglichen besseres Debugging
- Message Expiration: Nachrichten können mit einer Gültigkeitsdauer versehen werden
- Shared Subscriptions: Mehrere Subscriber teilen sich eine Subscription für Load-Balancing
- User Properties: Benutzerdefinierte Metadaten können zu Nachrichten hinzugefügt werden
- Request-Response-Pattern: Direkte Antwortmöglichkeiten zwischen Clients
Vergleich mit anderen Protokollen
| Aspekt | MQTT | HTTP/REST | WebSocket |
|---|---|---|---|
| Kommunikationsmodell | Publish-Subscribe | Request-Response | Bidirektional |
| Overhead | Sehr gering (2 Byte Header) | Hoch (HTTP-Header) | Mittel |
| Verbindung | Persistent | Kurzlebig | Persistent |
| Ideal für | IoT, Sensoren | APIs, Webservices | Echtzeit-Web-Apps |
| Batteriefreundlich | Sehr gut | Schlecht (Polling) | Gut |
MQTT wurde für ressourcenbegrenzte Geräte und instabile Netzwerke optimiert, während HTTP für klassische Web-Kommunikation konzipiert wurde.
Typische Einsatzgebiete
MQTT hat sich in mehreren Bereichen als Standardprotokoll etabliert:
- Internet of Things (IoT): Sensoren und Aktoren in verteilten Systemen kommunizieren effizient über MQTT
- Smart Home und Hausautomation: Lichter, Heizungssysteme, Kameras und andere intelligente Geräte werden über MQTT zentral gesteuert
- Industrieautomation (Industrie 4.0): Produktionsmaschinen, Überwachungssysteme und SCADA-Systeme nutzen MQTT zur Echtzeit-Datenübertragung
- Telemetrie und Remote Monitoring: Überwachung von Geräten an abgelegenen Standorten mit schlechter Netzwerkanbindung
- Mobile Anwendungen: Chat-Apps und Push-Benachrichtigungen profitieren vom geringen Energieverbrauch
Praxisbeispiel: Smart Home Temperaturüberwachung
# Publisher: Temperatursensor sendet alle 5 Minuten
import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect("broker.local", 1883)
client.publish("haus/wohnzimmer/temperatur", "21.5", qos=1, retain=True)
# Subscriber: Heizungssteuerung empfängt Temperaturdaten
def on_message(client, userdata, msg):
temperatur = float(msg.payload.decode())
if temperatur < 20:
heizung_einschalten()
client = mqtt.Client()
client.on_message = on_message
client.connect("broker.local", 1883)
client.subscribe("haus/+/temperatur")
client.loop_forever()
Sicherheitsaspekte
Bei der ursprünglichen Entwicklung stand Sicherheit nicht im Vordergrund, da MQTT primär für kontrollierte Umgebungen konzipiert war. Moderne Implementierungen bieten jedoch umfangreiche Sicherheitsfunktionen:
TLS/SSL-Verschlüsselung
TLS verschlüsselt die gesamte Kommunikation zwischen Client und Broker. Der Standard-Port für MQTT über TLS ist 8883 (statt 1883 für unverschlüsselte Verbindungen).
Authentifizierung
- Benutzername/Passwort: Der Client übermittelt Anmeldedaten beim Verbindungsaufbau
- Zertifikat-basiert: X.509-Zertifikate für sichere Identifizierung
- Token-basiert: JWT oder OAuth für moderne Cloud-Umgebungen
Access Control Lists (ACLs)
Der Broker kann Regeln definieren, welcher Client zu welchen Topics publishen oder subscriben darf. Das verhindert unbefugten Zugriff auf sensible Daten.
Populäre MQTT-Broker
- Mosquitto: Open-Source-Broker der Eclipse Foundation, ideal zum Lernen und für kleine Projekte
- HiveMQ: Enterprise-Broker mit Clustering und Management-Tools
- EMQX: Hochskalierbarer Broker für große IoT-Deployments
- AWS IoT Core, Azure IoT Hub, Google Cloud IoT: Cloud-basierte MQTT-Services
MQTT in der IT-Praxis
MQTT begegnet dir in der IT-Praxis besonders häufig bei IoT-Projekten und der Vernetzung von Geräten. Wer als Fachinformatiker für Anwendungsentwicklung oder Fachinformatiker für Systemintegration im Bereich Smart Building, Industrieautomation oder vernetzte Systeme arbeitet, wird mit MQTT in Berührung kommen.
Das Protokoll eignet sich besonders gut, um das Konzept von ereignisgesteuerter Architektur (Event-Driven Architecture) zu verstehen - ein Paradigma, das auch in anderen Bereichen wie Microservices-Architekturen Anwendung findet.