Skip to end of metadata
Go to start of metadata

Was ist MQTT?

MQTT steht für "Message Queuing Telemetry Transport" (die Übersetzung "Nachrichten-Warteschlangen-Messdaten-Übertragung" klingt nicht so cool) und ist ein freies, offenes Nachrichten-Übermittlungsverfahren für die Kommunikation zwischen Geräten. Es ist sehr schlank und damit netzwerkschonend, und belastet zur Übertragung die angeschlossenen Geräte wenig. 

MQTT verwendet bei der Übertragung eine Vermittlungsstelle, einen sogenannten "Broker" - alle Geräte des MQTT-Netzwerks sind mit diesem Broker verbunden. Eine herausragende Eigenschaft von MQTT ist, dass übermittelte Daten sowohl gepusht (im MQTT-Jargon "published" - also aktiv gesendet) als auch abboniert (im MQTT-Jargon "subscribed") werden können.

Wird von einem Gerät eine Information übermittelt, und ein verbundener Client hat dieses Gerät abonniert, bekommt der Client diese Daten "frei Haus" zugestellt - ohne ständig nachfragen zu müssen, "Hast du was Neues? Hast du was Neues? ...".

Dieses Abonnieren wird auch deswegen so effizient, weil nicht jedes Gerät mit jedem Gerät direkt sprechen muss (was von der Last auf den Geräten, und auch von der Implementierung, ein erheblicher Aufwand wäre), sondern alle mit der Zentrale, dem Broker, sprechen. 

Warum MQTT?

Der Grund, warum ich (Christian) dieses Protokoll jetzt in meinen Fokus stelle, ist die Art, wie unser Smart Home mit anderen Geräten spricht.

Denken wir an den Loxone Miniserver: Nachdem wir aus einer Auswahl einer Hand voll Loxone-Geräte mit proprietären Systemen wie LoxLink, Air und Tree unser Smart Home aufgebaut haben, wollen wir nicht nur Licht ein- und ausschalten und die Jalousie runterfahren, sondern auch unsere anderen Geräte einbinden.

Loxone bietet uns dafür eine recht kleine Auswahl an Verbindungsmöglichkeiten: HTTP-Ausgänge ohne Verarbeitung des Ergebnisses, HTTP-Eingänge mit statischem Abfragezyklus, ausgehendes TCP ohne bidirektionaler Kommunikation, UDP für eingehende Nachrichten.

Diese recht rudimentäre Unterstützung von Loxone hat - kann man wirklich so sagen - den LoxBerry aufs Tablett gebracht: Dort wird mit unzähligen Plugins die Kommunikation mit externen Geräten in die eingeschränkten Kommunikationsmöglichkeiten des Miniservers umgewandelt.

Geführt hat das zu einer Liste an sehr speziellen Plugins, die sehr spezielle Kommandos absetzen, und, je nach Plugin, auf unterschiedliche Arten an den Miniserver übermitteln, bzw. vom Miniserver an das Gerät übermitteln.

Was macht MQTT so stark:

  • Es ist ein EINHEITLICHES, standardisiertes Protokoll - die Art der Übertragung ist fest geregelt. Jedes Gerät verwendet das gleiche Verfahren bei der Kommunikation mit seinem MQTT Broker.
  • Einige Geräte unterstützen bereits fest eingebaut das MQTT-Protokoll. Derzeit sind die Shelly-Geräte in aller Munde, bereits viel früher haben MQTT die Sonoffs und ESP8266-basierten Geräte mit ESP-Easy und Tasmota MQTT unterstützt.
  • So gut wie jede Hausautomatisierungs-Software unterstützt fest eingebaut das MQTT-Protokoll, beispielsweise FHEM, ioBroker, Home Assistant, Node-Red,  usw.
  • Es gibt eine unzählige Liste an Gateways, die Geräte, die nicht MQTT können, an MQTT anbinden. Im LoxForum haben zwei Mitglieder den Miele@home Geschirrspüler via MQTT und dem MQTT-Plugin an den Miniserver angebunden. Es gibt Philips Hue, Zigbee, Honeywell, und und und.
  • Über dieses Protokoll können jetzt alle Geräte mit allen Geräten sprechen. Bei jedem Gerät ist nur eine Verbindung, die zum MQTT-Broker, einzurichten.
  • Mit dem MQTT Gateway-Plugin für den LoxBerry kommen all diese Informationen auf den vom MQTT-Plugin verwendeten (von Loxone vorgegebenen) Wegen in den Miniserver: Per UDP oder per HTTP, immer in der gleichen Art und Weise, egal welches Gerät es ist.
  • Und mit dem MQTT Gateway-Plugin kann der Miniserver mit allen Geräten im MQTT reden, also auch Befehle senden - immer auf die gleiche Art und Weise, egal welches Gerät es ist.
  • Die Übertragung zum Miniserver und die Last am Miniserver ist minimal! Nur Änderungen werden übertragen. Bei Verbindungsabbrüchen oder Miniserver-Neustarts wird der Status automatisch neu übertragen.
  • Die Laufzeit einer Statusänderung zwischen MQTT-Gerät und Miniserver ist circa 50 Millisekunden. Kein sinnloses Pollen alle 10 Sekunden.


MQTT ist ein offenes Protokoll - keine Firma erhebt dafür Lizenzgebühren oder dergleichen.

MQTT ist in allen Programmiersprachen als Bibliothek verfügbar. Die Übertragungsart ist immer gleich.

Je mehr Geräte direkt (also ohne zusätzliches Gateway) MQTT unterstützen, desto einfacher wird zukünftig die Übertragung von Daten und Schaltbefehlen in unserem Smart Home. Deswegen müssen wir den Herstellern sagen, dass wir dieses Protokoll wollen.

Beim Erwerb von Geräten gleich mitprüfen bzw. berücksichtigen, ob das Gerät vielleicht MQTT spricht. Wenn ja, ist die Einrichtung via LoxBerry MQTT-Gateway Plugin eine Sache auf 5 Minuten.

Bei der LoxBerry Plugin-Entwicklung sollten wir den "Suchradius erweitern", ob es für dieses externe Gerät nicht schon ein Gerät-zu-MQTT-Gateway gibt (es gibt übrigens auch schon ein anderes MQTT-Gateway für Loxone, jedoch mit umgekehrter Prämisse, nämlich andere Geräte steuern den Miniserver, nicht Miniserver steuert Geräte). Wenn es für dieses Gerät ein MQTT-Gateway gibt, könnte das Ziel des neuen Plugins sein, das externe MQTT-Gateway zu installieren und mit dem MQTT-Netz zu verbinden, statt alles neu zu implementieren und dafür wieder einen neuen Übertragungsweg zum Miniserver zu bauen. 


Deswegen MQTT! Ein einheitlicher Weg, wie alle unsere Geräte miteinander kommunizieren können.

Probier es aus: Bring mit dem MQTT Gateway Plugin alle deine Shellys in 10 Minuten in den Miniserver und erfasse in Echtzeit (50ms) dessen Status, den aktuellen Stromverbrauch und schalte sie via MQTT ein und aus.


(PS: Die 50 Millisekunden sind übrigens einstellbar... (Zwinkern) Damit läuft ein Pi2 mit 0% CPU-Belastung. Bei 10ms benötigt das MQTT-Gateway-Plugin 3% CPU-Belastung.)