Neben dem reinen Austausch von Nachrichten besitzt MQTT eine Fülle an Features, die es als Kommunikationsprotokoll für das Internet of Things optimal machen, vor allem wenn eine unzuverlässige Verbindung (z.B. via Mobilfunk) zu erwarten ist. MQTT besitzt das Konzept von Quality of Service (QoS) Levels. Diese QoS-Ebenen bestimmen die Übertragungsgarantien für Nachrichten. Es wird zwischen drei QoS-Arten unterschieden:
MQTT benutzt TCP als Transportprotokoll, welches im Normalfall „Exactly-once Delivery“-Garantien bei der Datenübertragung gibt. Es kann jedoch jederzeit passieren, dass die TCP-Verbindung während der Datenübertragung getrennt wird. In einem solchen Fall greifen QoS 1 und QoS 2, da nach einer Wiederherstellung der Verbindung die Datenübertragung fortgesetzt werden kann.
Retained Messages
Ein weiteres Protokoll-Feature von MQTT sind „Retained Messages“. Ein Publisher kann beim Versenden einer MQTT-Nachricht diese als retained markieren. Der MQTT Broker speichert diese Nachricht nun für diesen Topic ab, damit alle neuen Subscriber auf diesem Topic direkt diese Nachricht zugestellt bekommen. Bei einer normalen MQTT Message würde die Nachricht zwar an alle aktiven MQTT Subscriber verschickt werden, am Broker würde jedoch nichts hinterlegt werden, weshalb ein neuer Subscriber warten müsste, bis auf einem Topic eine neue Nachricht versendet wird. Mittels Retained Messages bekommt nun jeder neue Subscriber den letzten Stand auf einem Topic, vorausgesetzt, dass das Retained Flag für eine zu sendende Nachricht vom Client gesetzt wurde.
Nachricht bei Verbindungsabbruch
Durch die stehende TCP-Verbindung der MQTT Clients zum Broker wird eine ereignisgetriebene Kommunikation umgesetzt. Ein weiterer Vorteil dieser stehenden Verbindung ist, dass der MQTT Broker bei einem Verbindungsabbruch eines Client dies sofort erkennen kann. Das Last Will and Testament Feature von MQTT erlaubt einem Client, eine Nachricht am MQTT Broker zu hinterlegen, welche vom Broker versendet wird, sobald die TCP-Verbindung geschlossen wurde. Damit ist es möglich, auf einen Ausfall eines Gerätes zu reagieren, da man den Last Will and Testament Topic dieses Gerätes über MQTT-Bordmittel abonnieren kann.
Persistent Sessions
Speziell Geräte, die per Mobilfunk vernetzt werden, müssen mit häufigeren Verbindungsabbrüchen rechnen, was beim Einsatz von MQTT dazu führt, dass die Verbindung zum Broker gekappt wird. Ein MQTT Client kann daher beim Verbindungsaufbau entscheiden, ob er eine persistente Session anlegen möchte, also eine Session, die über die Lebenszeit einer TCP-Verbindung hinweg bestehen bleibt. Wenn ein Gerät sich nun wieder verbindet, dann kann es seine Session fortführen. Konkret bedeutet das, dass der Broker die Subscriptions eines nicht verbundenen Clients vorhält und somit alle Nachrichten, die der Client verpasst hat, für den Client ausliefert, sobald dieser wieder online ist. Hierbei handelt es sich um das Konzept der „Queued Messages“. Dabei werden alle verpassten QoS-1- und -2-Nachrichten vom Broker für den Client vorgehalten, QoS-0-Nachrichten werden jedoch nicht gespeichert.
Natürlich kann ein Client auch entscheiden, keine langlebigen Persistent Sessions anzulegen. Rein sendende Clients können sich mit einer „Clean Session“ beim Broker anmelden und somit werden alle Daten über diesen Client nach Beendigung der TCP-Verbindung am Broker gelöscht.
MQTT ist ein sehr schlankes IoT-Protokoll mit interessanten Funktionen, die eine ereignisgetriebene Kommunikation ermöglichen. Im Vergleich zu deutlich komplexeren Protokollen versteht sich MQTT als Datentransportprotokoll und entkoppelt dabei Sender und Empfänger von Nachrichten mittels eines MQTT Broker. Neben Brokern für den professionellen Einsatz wie HiveMQ gibt es ein Vielzahl an freier Software, weshalb MQTT sich auch für kostengünstige Entwicklungen eignet. Besonders wenn Kommunikation über das Internet oder eine schnelle und pragmatische IoT-Entwicklung gefordert sind, ist MQTT eine sehr gute Wahl und eine gute Alternative zu schwergewichtigeren Protokollen für die Vernetzung von Geräten und Software.
Dominik Obermaier
ist Geschäftsführer bei dc-square. Das Unternehmen entwickelt hochskalierbare IoT-Lösungen wie den MQTT Broker HiveMQ. Dominik Obermaier berät Unternehmen in den Bereichen MQTT, Messaging und IoT. Er entwickelte MQTT 3.1.1 bei OASIS mit und ist regelmäßiger Autor und Sprecher auf Konferenzen.