MQTT: Leichtgewichtige Nachrichten für das Internet der Dinge
Kurz: MQTT ist ein schlankes Publish/Subscribe-Protokoll, mit dem Sensoren und Geräte kleine Nachrichten über einen Broker austauschen, auch bei schwacher Verbindung.
Genauer: Ein Temperatursensor mit kleinem Mikrocontroller soll Messwerte senden, ein Smartphone sie anzeigen. HTTP wäre für so kleine Geräte und schlechte Verbindungen zu schwerfällig. MQTT (Message Queuing Telemetry Transport) hat nur zwei Byte Mindestkopf und läuft über TCP. Es ist Standard in Smart Home (Home Assistant, Zigbee2MQTT) und Industrie (IIoT).
Im Detail
Prinzip: Broker und Topics
Alle Teilnehmer verbinden sich mit einem Broker (zum Beispiel Mosquitto, EMQX). Nachrichten werden unter Topics veröffentlicht, hierarchisch benannt:
haus/wohnzimmer/temperatur -> 21.5
haus/kueche/licht/set -> ON
Wer ein Topic abonniert, bekommt jede neue Nachricht. Mit Wildcards abonniert man mehrere: + für eine Ebene (haus/+/temperatur), # für alles darunter (haus/#).
Zuverlässigkeit: QoS und Retain
- QoS 0: höchstens einmal, ohne Bestätigung (schnell).
- QoS 1: mindestens einmal (kann doppelt kommen).
- QoS 2: genau einmal (aufwendiger).
- Retained Messages: Der Broker behält die letzte Nachricht eines Topics, neue Abonnenten erhalten sie sofort (zum Beispiel aktueller Zustand).
- Last Will: Eine Nachricht, die der Broker bei unerwartetem Verbindungsabbruch des Geräts veröffentlicht („offline“).
Beispiel
Mit dem Programm mosquitto auf der Kommandozeile:
mosquitto_sub -h broker.local -t 'haus/+/temperatur'
mosquitto_pub -h broker.local -t 'haus/wohnzimmer/temperatur' -m '21.5'
In Arduino/ESP32-Programmen genügt eine Bibliothek wie PubSubClient.
Sicherheit
Standard-MQTT sendet im Klartext auf Port 1883. Verwende TLS (Port 8883), Benutzername und Passwort oder Zertifikate und lege Zugriffsrechte je Topic fest (ACL). Ein offener Broker im Internet wird schnell von Fremden genutzt. Veröffentliche Broker nur, wenn nötig, und halte sie aktuell. Das Protokoll hat inzwischen MQTT 5 mit besseren Fehlercodes und Eigenschaften.
Siehe auch: Publish/Subscribe, ESP32, Smart Home, TLS