Diese Tutorial-Reihe dreht sich ganz um MQTT – dem Nachrichtenprotokoll, das sich hervorragend dafür eignet, Daten zwischen Geräten auszutauschen. Stell dir vor, du möchtest die Temperatur in deinem Gewächshaus überwachen. Dazu installierst du Temperatursensoren, die ihre Messwerte per MQTT an einen zentralen Broker senden. Der Broker verteilt die Daten dann an alle “interessierten” Empfänger, wie einen Mikrocontroller, der die Bewässerung steuert.
In dieser Einführung klären wir zunächst, worum es sich bei MQTT überhaupt handelt und wie es grundlegend funktioniert.
Was ist MQTT?
MQTT steht für “Message Queuing Telemetry Transport”. Es handelt sich um ein leichtgewichtiges, offenes Nachrichtenprotokoll, das sich ideal für die M2M-Kommunikation (Machine-to-Machine) eignet. MQTT ermöglicht es Geräten, auf einfache und effiziente Weise Daten auszutauschen.
Das Protokoll wurde 1999 von Andy Stanford-Clark (IBM) und Arlen Nipper (Cirrus Link) entwickelt. Heute hat sich MQTT zu einem Standard im IoT-Bereich entwickelt.
MQTT bietet einige Vorteile, die es für IoT-Anwendungen besonders attraktiv machen:
- Leichtgewichtig: MQTT kommt mit minimaler Netzwerk-Bandbreite und geringen Hardwareanforderungen aus.
- Publish/Subscribe-Modell: MQTT entkoppelt Sender (Publisher) und Empfänger (Subscriber) von Nachrichten. Geräte kommunizieren nicht direkt miteinander, sondern über einen Broker.
- Skalierbarkeit: Das Protokoll ist hervorragend für große Netzwerke mit vielen Geräten geeignet.
- Zuverlässigkeit: MQTT bietet drei Quality of Service (QoS) Levels, um unterschiedliche Anforderungen zu erfüllen.
- Flexibilität: MQTT lässt sich leicht in bestehende Systeme integrieren und ist mit vielen Programmiersprachen und Plattformen kompatibel.
Wie funktioniert MQTT?
Um die Funktionsweise von MQTT zu verstehen, ist wie so oft ein Schaubild ganz hilfreich:
Dieses Schaubild zeigt ein mögliches Smart-Home-Szenario. Lass uns die einzelnen Elemente durchgehen:
- Broker: Im Zentrum des Bildes siehst du einen grünen Kreis mit der Beschriftung “Broker”. Der Broker ist das Herzstück des MQTT-Systems und fungiert als zentraler Vermittler zwischen allen Geräten.
- Publisher (Sender): Auf der linken Seite sind drei blaue Kreise mit Thermometer-Symbolen zu sehen. Diese stellen die Publisher dar – in diesem Fall Temperatursensoren an verschiedenen Orten:
- Ein Sensor im Haus (home/temperature) misst 19°C
- Ein Sensor in der Garage (garage/temperature) misst 15°C
- Ein Sensor im Garten (garden/temperature) misst -4°C
- Subscriber (Empfänger): Auf der rechten Seite befinden sich zwei rote Kreise mit Chip-Symbolen. Diese repräsentieren die Subscriber – Geräte, die Temperaturinformationen empfangen und verarbeiten:
- Ein Gerät, das sich für die Haustemperatur interessiert und z.B. die Temperatur regelt.
- Ein Gerät, das die Gartentemperatur überwacht und z.B. die Rollläden herunterlässt, um das Haus besser zu isolieren.
- Publish-Vorgang: Die schwarzen Pfeile von den Publishern zum Broker zeigen den Publish-Vorgang. Jeder Sensor sendet seine Messwerte mit einem spezifischen Topic (z.B. “home/temperature”) an den Broker.
- Subscribe-Vorgang: Die grauen Pfeile vom Broker zu den Subscribern zeigen den Subscribe-Vorgang. Die Subscriber teilen dem Broker mit, für welche Topics sie sich interessieren (z.B. “home/temperature” oder “garden/temperature”).
- Nachrichtenverteilung: Die schwarzen Pfeile vom Broker zu den Subscribern zeigen, wie der Broker die empfangenen Nachrichten an die interessierten Subscriber weiterleitet.
Das Besondere an MQTT ist die Entkopplung von Sendern und Empfängern. Die Temperatursensoren (Publisher) wissen nicht, wer ihre Daten empfängt. Die Empfangsgeräte (Subscriber) wissen nicht, woher die Daten genau kommen. Alles läuft über den zentralen Broker.
Dieses System ermöglicht eine flexible und effiziente Kommunikation in IoT-Netzwerken. Neue Geräte können einfach hinzugefügt werden, indem sie sich beim Broker für die relevanten Topics registrieren, ohne dass andere Geräte angepasst werden müssen.
Topics und Topic-Hierarchie
In MQTT werden Nachrichten immer zu einem bestimmten “Topic” (Thema) veröffentlicht. Topics sind Zeichenketten, die hierarchisch aufgebaut sein können, ähnlich wie Verzeichnispfade.
Ein paar Beispiele für Topics hast du bereits im Schaubild kennengelernt:
- home/temperature
- garage/temperature
- garden/temperature
Topics werden mit Schrägstrichen (/) strukturiert. Das ermöglicht eine übersichtliche Ordnung und erleichtert das Abonnieren verwandter Themen.
Ein Subscriber kann nicht nur einzelne Topics, sondern auch ganze Topic-Zweige abonnieren. Dazu gibt es zwei Platzhalter:
- Plus (+): Ersetzt eine einzelne Hierarchieebene. Beispiel: home/+/temperature.
- Raute (#): Ersetzt beliebig viele Hierarchieebenen. Beispiel: home/#.
Quality of Service (QoS) Levels
Neben den Topics sind Quality of Service Levels ein wichtiger und interessanter Aspekt von MQTT. Unterschieden werden 3 Level, die die Zustellung und Verarbeitung von Nachrichten steuern:
QoS 0 (At most once):
- Dies ist das einfachste und schnellste Level.
- Der Sender schickt die Nachricht einmal an den Broker und vergisst sie dann.
- Der Broker leitet die Nachricht an die Subscriber weiter, ohne eine Bestätigung zu erwarten.
- Es gibt keine Garantie, dass die Nachricht ankommt.
- Verwendung: Ideal für häufig gesendete, nicht kritische Daten wie regelmäßige Sensorwerte.
- Beispiel: Ein Temperatursensor, der alle 5 Sekunden einen Wert sendet. Wenn mal ein Wert verloren geht, ist das nicht schlimm.
QoS 1 (At least once):
- Der Sender speichert die Nachricht, bis er eine Bestätigung (PUBACK) vom Broker erhält.
- Wenn keine Bestätigung kommt, sendet er die Nachricht erneut.
- Der Broker leitet die Nachricht an Subscriber weiter und erwartet ebenfalls eine Bestätigung.
- Die Nachricht kommt mindestens einmal an, kann aber auch mehrfach ankommen.
- Verwendung: Gut für wichtige Nachrichten, bei denen Duplikate kein Problem sind.
- Beispiel: Ein Schalter, der seinen Status meldet. Es ist wichtig, dass die Änderung ankommt, auch wenn sie vielleicht doppelt gemeldet wird.
QoS 2 (Exactly once):
- Das zuverlässigste, aber auch komplexeste und langsamste Level.
- Verwendet ein 4-Wege-Handshake zwischen Sender und Empfänger.
- Garantiert, dass die Nachricht genau einmal ankommt, ohne Verlust oder Duplikate.
- Verwendung: Für kritische Nachrichten, bei denen jede Nachricht wichtig ist und Duplikate Probleme verursachen würden.
- Beispiel: Finanztransaktionen oder kritische Steuerungsbefehle in industriellen Anlagen.
Die Wahl des passenden QoS-Levels hängt also von den Anforderungen deiner Anwendung ab. In vielen Fällen reicht bereits der einfachste Level QoS 0 aus.
Retained Messages und Last Will and Testament
Zuletzt noch zwei weitere nützliche MQTT-Funktionen:
Retained Messages
Stell dir einen digitalen Notizzettel vor, der an einer Pinnwand (dem Broker) hängt. Jeder, der vorbeikommt (sich subscribt), kann sofort den letzten Stand sehen, ohne warten zu müssen, bis jemand eine neue Notiz macht.
Beispiel:
- Du hast eine smarte Glühbirne im Wohnzimmer.
- Der Lichtschalter sendet eine Retained Message “AN” oder “AUS” an das Topic “haus/wohnzimmer/licht”.
- Wenn du eine neue App auf deinem Smartphone installierst und sie sich mit dem MQTT-Broker verbindet, weiß sie sofort, ob das Licht an oder aus ist, ohne auf die nächste Zustandsänderung warten zu müssen.
Last Will and Testament (LWT)
Stell dir vor, du gehst auf eine Party und sagst dem Gastgeber: “Wenn ich in der nächsten Stunde nicht wiederkomme, sag allen, ich musste plötzlich nach Hause.” Das ist im Prinzip das LWT.
Beispiel:
- Du hast einen Temperatursensor im Gewächshaus.
- Bei der Verbindung zum Broker richtet der Sensor ein LWT ein: “Gewächshaussensor offline”.
- Wenn der Sensor unerwartet die Verbindung verliert (z.B. wegen eines Stromausfalls), sendet der Broker automatisch diese Nachricht.
- So wissen alle interessierten Geräte, dass der Sensor nicht mehr aktiv ist, ohne auf ein Timeout warten zu müssen.
Das soll es zunächst mit Teil 1 der Reihe gewesen sein. Der nächste Teil beschäftigt sich mit dem Broker – dort erfährst du, wie du diesen auf einem Raspberry Pi einrichtest und wie das Senden und Abonnieren von Daten in der Praxis aussieht.