MQTT wurde 1999 für eine Ölpipeline gebaut, deren Sensoren über Satellit gemeldet haben. Satellit kostete pro Byte Geld, also musste das Protokoll mit fast nichts auskommen. Heute läuft darüber unser halbes Haus: die Zigbee-Lampen, das Türschloss, selbstgebaute Sensoren. In der neuen Folge erklären wir das Ding einmal von vorn, und hier ist die Kurzfassung zum Nachlesen.
Niemand redet mit niemandem
Normalerweise stellst du dir vor: Der Schalter redet mit der Lampe. Bei MQTT redet niemand mit niemandem. Es gibt einen Rechner in der Mitte, den Broker, und jedes Gerät kennt nur den. Der Schalter meldet „ich wurde gedrückt”, die Lampe hat vorher gesagt „sag mir Bescheid, wenn das passiert”, und der Broker verteilt. Schalter und Lampe haben sich nie gesehen. Deshalb kannst du morgen ein drittes Gerät dazuhängen, ohne am Schalter irgendwas zu ändern. Und deshalb ist es dem Protokoll egal, ob die Geräte im selben Raum stehen oder auf zwei Kontinenten.
Topics: Adressen wie Dateipfade
Jede Nachricht hat eine Adresse, die aussieht wie ein Dateipfad, bei uns zum Beispiel zigbee2mqtt/Flur_Garderobe_Taster. Das nennt sich Topic, und du denkst dir die Namen selbst aus. Es gibt keine Liste, keine Anmeldung, kein Schema: Du schreibst in einen Pfad, und in dem Moment existiert er. Das ist praktisch, solange du allein baust, und es ist die häufigste Ursache für Chaos, sobald es mehr als zehn Geräte werden. Unsere Konvention: erste Ebene das Programm, das schreibt, zweite Ebene der Gerätename. Mit einer Raute als Platzhalter hörst du dem ganzen Haus auf einmal zu. Das ist der Befehl, den wir am häufigsten benutzen, wenn irgendwas nicht tut.
Das Testament
Ein Sensor, der schweigt, kann tot sein, oder er hat gerade einfach nichts zu sagen. Für dieses Problem gibt es eine Lösung mit makabrem Namen, und der heißt offiziell so: Last Will and Testament. Jedes Gerät hinterlegt beim Anmelden eine Nachricht, und wenn die Verbindung abreißt, ohne dass es sich ordentlich verabschiedet hat, verschickt der Broker diese Nachricht im Namen des toten Geräts. Das ist der Unterschied zwischen einem Bewegungsmelder, der Ruhe gibt, und einem, dessen Batterie seit drei Wochen leer ist und den du seitdem für einen sehr ruhigen Flur gehalten hast.
Drei Dinge, die hängen bleiben
- Dein Saugroboter spricht längst MQTT. Er baut eine Verbindung zu einem Broker des Herstellers auf, und der Mäher hängt an AWS IoT Core, das ist ein sehr großer MQTT-Broker mit Amazon-Logo dran. Dieselben vier Felder wie bei unserer Flurlampe, nur steht bei „wer hört zu” nicht dein Haus, sondern eine App. Ob dein Gerät bei dir mitspielen darf, entscheidet ein einziges Feld in den Einstellungen: die Serveradresse. Ist es da, gehört das Gerät dir. Fehlt es, gehört es dem Hersteller.
- Facebook hat seinen Messenger 2011 über MQTT laufen lassen. Die haben ein Protokoll für Ölpipelines genommen, weil es sparsam mit Akku und Funkzelle umgeht, und damit Milliarden Chatnachrichten verschickt. Steht bis heute in deren Technik-Blog.
- Der kleinste Nachrichtenkopf im Standard ist zwei Byte groß. Zwei. Das ist weniger, als das Wort „Byte” selbst lang ist. Deshalb funktioniert MQTT auch über Funkstrecken, die nach heutigen Maßstäben kaputt sind.
Wann sich ein Broker lohnt und wann nicht
Die ehrliche Antwort zuerst: Wenn bei dir ausschließlich Zigbee-Geräte hängen und du Home Assistant benutzt, nimm ZHA und lass MQTT weg. Ein Dienst weniger, der kaputtgehen kann, und im Alltag merkst du keinen Unterschied. Interessant wird es, sobald mehr als eine Sorte Gerät dazukommt: ein paar Zigbee-Lampen, ein Shelly, ein selbstgebauter Sensor auf einem ESP, das Türschloss. Ohne Broker hat jedes davon eine eigene Anbindung mit eigenen Macken. Mit Broker reden alle über denselben Bus, und wenn Home Assistant neu startet, schreiben die Geräte einfach weiter, als wäre nichts. Der Preis dafür ist überschaubar, aber er ist da: Du hast einen Dienst mehr zu pflegen, und wenn der spinnt, steht das ganze Haus still statt nur ein Gerät.
Zum Loslegen
- Mosquitto installieren, am besten auf dem Rechner, auf dem auch Home Assistant läuft, und direkt ein Passwort vergeben, auch wenn es lästig ist.
- Als Erstes Zigbee2MQTT dranhängen, weil du da sofort siehst, dass es tut.
mosquitto_sub -t '#'starten und dem Haus ein paar Minuten beim Reden zuschauen. Das erklärt mehr als jede Doku.- Dabei gleich überlegen, wie deine Pfade heißen sollen. Das spart dir in einem halben Jahr einen langen Abend.
- Beim nächsten Gerätekauf in den Einstellungen nach dem Feld für die Serveradresse gucken. Ist es da, kannst du das Gerät ins eigene Haus holen.
Wie du Zigbee2MQTT im Detail aufsetzt, zeigt Simon in seinem Video Schritt für Schritt, lokal und ohne Hersteller-Cloud. Wir haben es hier nur benutzt.
Die Live-Demos gibt es im Video: den Taster drücken und die Nachricht im Terminal sehen, dem Nuki beim Reden zuschauen, der Blick in den Quelltext der Saugroboter-Bibliotheken. Und demnächst ziehen wir den Internetstecker und gehen jedes Gerät im Haus einzeln durch: was funktioniert noch, was ist nur noch Deko.
Alle Folgen