MQTT
MQTT Message Queuing Telemetry Transport ist ein offenes leichtgewichtiges Netzwerkprotokoll, das besonders gut für den Informationsaustausch zwischen resourcen-beschränkten Geräten (IoT, Embedded Systems) oder auch bei begrenzter Bandbreite geeignet ist (Machine-to-Machine-Kommunikation M2M).
Das Protokoll läuft in der Regel über TCP/IP, kann aber auch jedes andere verlustfreie und bidirektionale Netzwerkprotokoll unterstützen. Bei TCP/IP ist der standardmäßige unverschlüsselte MQTT-Port 1883. Der TLS-verschlüsselte Port ist 8883.
Broker und Clients
MQTT definiert sogenannte Vermittler (Broker) und eine Reihe von Clients. Ein MQTT-Broker ist ein Server, der Nachrichten von den Clients (Publisher) zu bestimmten Themen (Topics) empfängt und dann die Nachrichten nur an diejenigen Zielclients weiterleitet, die diesen Topic abonniert haben. Zwischen den Clients findet keine Kommunikation statt:

MQTT Message Flow - Diagramm https://en.wikipedia.org/wiki/MQTT (23.01.2022)
Hierdurch hält der MQTT-Broker alleine die gesamte Kommunikation unter Verwendung einer Zustands-Datenbank. Das entlastet die kleinen unperformante MQTT-Clients, die nur senden oder empfangen. Die komplexe Nachrichten- bzw. Kommandostruktur auf dem MQTT-Broker dagegen, kann von einem entsprechend leistungsfähigen Kommunikationspartner auf dem Localhost oder von einer anderen Machine abgerufen und ausgewertet werden.
Retained Message
Wenn ein Broker eine Nachricht zu einem Topic empfängt, für das es keine aktuellen Abonnenten gibt, verwirft er die Nachricht, es sei denn, der Publisher der Nachricht hat die Nachricht als "retained message" gekennzeichnet (s.o.). Dann wird die Nachricht solange behalten, bis sie zugestellt werden kann.
Quality of Service
Daneben werden Nachrichten mit einer Quality of Service QoS versendet. Es werden unterstützt:
- at most once: die Nachricht wird einmal gesendet und kommt bei Verbindungsunterbrechung möglicherweise nicht an (fire and forget),
- at least once: die Nachricht wird so lange gesendet, bis der Empfang bestätigt wird (acknowleged delivery)
- exactly once: hierbei wird sichergestellt, dass die Nachricht auch bei Verbindungsunterbrechung genau einmal ankommt (assured delivery).
Hierarchische Struktur der Topics
Topics sind hierarchisch organisiert. Zum Beispiel:
/
/house
house/room/main-light
house/room/side-light house/garage/main-light
Wildcards
Mit dem Zeichen # kann ab einer Hierarchie-Ebene alles, und was darunter liegt, empfangen werden. Zum Beispiel:
house/room/#
abonniert:
house/room/main-light
house/room/side-light
Mit einem + kann ein Wildcard für die Hierarchie-Ebene gesetzt werden. Zum Beispiel:
house/+/main-light
abonniert:
house/room/main-light
house/garage/main-light