MQTT (ursprünglich MQ Telemetry Transport) ist ein offenes Netzwerkprotokoll für Machine-to-Machine-Kommunikation (M2M), das die Übertragung von Telemetriedaten in Form von Nachrichten zwischen Geräten ermöglicht, trotz hoher Verzögerungen oder beschränkter Netzwerke. Entsprechende Geräte reichen von Sensoren und Aktoren, Mobiltelefonen, eingebetteten Systemen in Fahrzeugen oder Laptops bis zu voll entwickelten Rechnern.
MQTT war bis zur Version 3.1 ein Akronym für MQ Telemetry Transport, wobei MQ von MQSeries abgeleitet ist und für Message Queueing steht. Mit Version 3.1.1 wurde definiert, dass MQTT für kein Akronym steht. Das MQTT-Protokoll ist auch unter älteren Namen wie „WebSphere MQTT“ (WMQTT), „SCADA-Protokoll“ oder „MQ Integrator SCADA Device Protocol“ (MQIsdp) bekannt.
Die Internet Assigned Numbers Authority (IANA) reserviert für MQTT die Ports 1883 und 8883. MQTT-Nachrichten können mit dem TLS-Protokoll verschlüsselt werden.
Ein MQTT-Server („Broker“) hält die gesamte Datenlage seiner Kommunikationspartner und kann so als Zustands-Datenbank benutzt werden. So ist es möglich, kleine unperformante MQTT-Geräte mit einem MQTT-Broker zu verbinden, wobei die Geräte Daten einsammeln oder Befehle entgegennehmen, während ein komplexes Lagebild nur auf dem MQTT-Broker entsteht und hier oder durch einen leistungsfähigen Kommunikationspartner ausgewertet werden kann. Stelleingriffe können so von einer oder mehreren leistungsfähigen Instanzen an den MQTT-Broker übermittelt und auf die einzelnen Geräte verbreitet werden. Dadurch eignet sich MQTT sehr gut für Automatisierungslösungen und findet im Bereich IoT durch die einfache Verwendung große Verbreitung.
Geschichte Bearbeiten
Das Protokoll wurde 1999 von Andy Stanford-Clark von IBM und Arlen Nipper von Cirrus Link Solutions entwickelt. Das Protokoll wurde ursprünglich entwickelt, um einen Datentransfer von einfachen Geräten zu SCADA-Systemen über eine Satellitenkommunikation zu ermöglichen.
Seit 2013 wird MQTT über die Organization for the Advancement of Structured Information Standards (OASIS) als Protokoll des Internet der Dinge standardisiert.
Spezifikation Bearbeiten
Die MQTT-Spezifikation unterscheidet TCP/IP-basierte und Nicht-TCP/IP-Netzwerke und Systeme.
Protokoll Bearbeiten
MQTT ist ein Client-Server-Protokoll. Clients senden dem Server (“Broker”) nach Verbindungsaufbau Nachrichten mit einem Topic, welches die Nachricht hierarchisch einstuft; zum Beispiel Küche/Kühlschrank/Temperatur
oder Auto/Rad/3/Luftdruck
. Die Topics müssen vorher auch nicht konfiguriert werden. Clients können diese Topics abonnieren, wobei der Server die empfangenen Nachrichten an die entsprechenden Abonnenten weiterleitet.
Nachrichten bestehen immer aus einem Topic und dem Nachrichteninhalt. Nachrichten werden mit einer definierbaren Quality of Service versendet: at most once (die Nachricht wird einmal gesendet und kommt bei Verbindungsunterbrechung möglicherweise nicht an), at least once (die Nachricht wird so lange gesendet, bis der Empfang bestätigt wird, und kann beim Empfänger mehrfach ankommen) und exactly once (hierbei wird sichergestellt, dass die Nachricht auch bei Verbindungsunterbrechung genau einmal ankommt). Außerdem kann mit dem Retain-Flag der Server angewiesen werden, die Nachricht zu diesem Topic zwischenzuspeichern. Clients, die dieses Thema neu abonnieren, bekommen als erstes die zwischengespeicherte Nachricht zugestellt.
Beim Verbindungsaufbau können Clients einen „letzten Willen“ in Form einer Nachricht definieren. Falls die Verbindung zum Client verloren geht, wird diese Nachricht publiziert und dabei an die entsprechenden Abonnenten gesendet.
MQTT wird üblicherweise über TCP benutzt und hat einen 2-Byte-Header. Das erste Byte enthält den Nachrichtentyp (4 Bit), den Quality of Service (2 Bit) und ein Retain-Flag.
Es gibt folgende Nachrichten-Typen:
- CONNECT
- CONNACK
- PUBLISH
- PUBACK
- PUBREC
- PUBREL
- PUBCOMP
- SUBSCRIBE
- SUBACK
- UNSUBSCRIBE
- UNSUBACK
- PINGREQ
- PINGRESP
- DISCONNECT
Das zweite Byte enthält die Länge des restlichen MQTT-Pakets.
Daran schließt sich ein variabler Teil an, der das MQTT-Topic, also das Thema enthält. Abschließend kommt die Payload, also der Dateninhalt, der unter dem Thema veröffentlicht wird.
Die Topics sind hierarchisch organisiert. Zum Beispiel:
Neujahrsansprache/1984/audio/ogg Neujahrsansprache/1984/audio/mp3 Neujahrsansprache/1984/video Neujahrsansprache/1984/text/ascii Neujahrsansprache/1984/text/odt
Die Topics können mit Wildcards gesucht werden:
- Mit dem Zeichen # kann alles ab einer Hierarchie-Ebene – und was darunter liegt – empfangen werden.
- Ein + entspricht einer einzigen, beliebigen Hierarchie-Ebene.
Zum Beispiel:
Neujahrsansprache/1984/# | Alles der Neujahrsansprache von 1984 |
Neujahrsansprache/+/text/ascii | Die ASCII-Texte aller Neujahrsansprachen |
Neujahrsansprache/+/audio/# | Alle Audio-Formate aller Neujahrsansprachen |
Implementierungen Bearbeiten
Weblinks Bearbeiten
- mqtt.org – Offizielle Website
- MQTT-Spezifikation 3.1.1
- MQTT-Spezifikation 5
- heise.de/... – Artikel „MQTT: Protokoll für das Internet der Dinge – Einst für die Ölpipeline, nun offener Standard“ vom 15. April 2014 (abgerufen am 23. April 2015)
- https://www.hivemq.com/blog/mqtt-essentials-part-1-introducing-mqtt – MQTT-Einführung von HiveMQ (abgerufen am 14. Juni 2018)
- https://github.com/hobbyquaker/awesome-mqtt – ständig aktualisierte Übersichtsliste zur Technologie MQTT
Einzelnachweise Bearbeiten
- MQTT v3.1 and MQTT v3.1.1 Differences WD-01. 12. Februar 2015, abgerufen am 31. August 2022 (englisch): „The term MQTT in [MQTTV31] was an acronym for MQ Telemetry Transport. However [mqtt-v3.1.1] strictly renamed the protocol as MQTT and it does not have any acronym.“
- ↑ MQTT V3.1 Protocol Specification. Abgerufen am 31. August 2022.
- (Memento des vom 17. Oktober 2013 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- MQTT Frequently Asked Questions: „How does MQTT relate to SCADA protocol and MQIsdp?“ (abgerufen am 21. April 2015)
- Dominik Obermaier: Was ist MQTT. In: embedded-software-engineer. 19. Juni 2018, abgerufen am 5. August 2020.
- M2M-Protokoll MQTT soll Internet-Standard werden - iX
- http://dennisseidel.de/mqtt-eine-einfuhrung/
- https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=mqtt
- MQTT V3.1 Protocol Specification. Abgerufen am 29. April 2019.
- Evolution der IoT-Kommunikation: MQTT 5. In: heise.de. 16. Januar 2018, abgerufen am 29. April 2019.
- MQTT Version 5.0. Abgerufen am 29. April 2019.
- MQTT for Sensor Networks – MQTT-SN Abgerufen am 3. Juli 2020.
- 14:00-17:00: ISO/IEC 20922:2016. Abgerufen am 6. Juni 2022 (englisch).