Wichtige Info

Die Inhalte, die du hier siehst stelle ich dir ohne Werbeanzeigen und ohne Tracking deiner Daten zur Verfügung. Trotzdem muss ich die Server bezahlen sowie Zeit in Recherche, Umsetzung sowie Mail Support stecken.
Um dies leisten zu können, verlinke ich in einigen Artikeln auf die Plattform Amazon. Alle diese Links nennen sich Afiliate Links. Wenn du dir mit diesem Link etwas kaufst, dann erhalte ich eine kleine Provision. Dies ändert jedoch NICHT den Preis, den du bezahlst!
Falls du mich also unterstützen möchtest, kannst du auf den Link zum Produkt klicken und hilfst mir dabei, dieses Hobby weiter zu betreiben.
Da ich Keine Werbung schalte und keine Spenden sammle, ist dies die einzige Möglichkeit, meine Systeme und mich zu finanzieren. Ich hoffe du kannst das verstehen :)



MQTT - Ein Überblick


Disclaimer

Alle folgenden Informationen sind grundsätzlich ohne Gewähr. Ich versuche alle Informationen korrekt zu recherchieren und zusammenzufassen, aber ich bin am Ende nur ein Mensch, der das in seiner Freizeit macht und etwas lernen möchte

– Falls ich einen Fehler gemacht habe oder einfach falsche Informationen veröffentlicht habe, dann schreibe gerne einen Kommentar! – Ich werde diesen Lesen und wenn ich die Information verifizieren kann, meinen Text mit einem Hinweis auf deinen Kommentar entsprechend modifizieren ^^.

Dieser Blog ist für alle da und soll jedem helfen, der etwas lernen möchte. Deshalb bitte ich auch um ein freundliches miteinander

Einleitung

Innerhalb der letzten Jahre habe ich das MQTT Protokoll für viele meiner Projekte verwendet. MQTT ist sehr einfach zu nutzen, setzt auf zumeist ohnehin vorhandene TCP Netzwerke, bietet Sicherheitsfunktionen und ist ein reines M2M (Maschine zu Maschine) Protokoll.
MQTT läuft bis dato immer in irgendeinerform in meinem Smarthome und hat mich, anders als zum Beispiel ZigBee, noch nie im Stich gelassen.
Kurzum ist MQTT, in meiner Meinung, eines der besten Protokolle welche man in der Heimautomatisierung nutzen kann. Die Frage ist hier aber – wieso macht es dann fast niemand?

Dieser Beitrag (und einige weitere) werden sich mit genau dieser Frage beschäftigen und weiterhin auf die Möglichkeiten von MQTT eingehen.

SPOILER: MQTT kann viel, ist eines der ältesten M2M Protokolle (1999 eingeführt) und ist bei weitem nicht aus der mode gekommen.

MQTT ist ein sehr großes Protokoll, mit vielen Möglichkeiten und Fallstricken. Daher werde ich die Posts immer unterteilen und miteinander verlinken. Bitte bedenkt, dass ich das hier in meiner Freizeit mache, daher werde ich wohl nicht im perfekten Wochen rhythmus posten können, aber ich werde versuchen eine gewisse Kontinuität zu halten.

Falls jemand die aktuelle Spezifikation lesen möchten, kann man diese hier finden.

Hauptteil

Was ist MQTT und wie funktioniert es?

Hier fangen wir nochmal von ganz vorne an. MQTT ist wie bereits erwähnt ein M2M (Machine zu Maschine) Protokoll, doch was heißt das? – Maschine zu Maschine Kommunikation beschreibt lediglich, dass die Kommunikation zwischen zwei (oder mehr) Maschinen stattfindet.
Jede MQTT Infrastruktur besteht aus (einem) Broker und Clients. Jeder Client abonniert spezielle topics, welche Informationen enthalten oder erhalten können (dazu später mehr). Clients senden (Publish) und Empfangen Informationen dabei immer über den Broker.

Publish / Subscribe – Was ist das?

MQTT implementiert das sog. Publish and Subscribe Pattern. Dabei werden Informationen durch ein “Publish”, in einem definierten Topic durch den Broker “veröffentlicht”. Jeder der an der gesendeten Information (bzw. grundsätzlich dem Topic) Interessiert ist, kann dieses Topic abonnieren (Subscribe) und erhält die Nachricht durch den MQTT Broker (Dabei können offline Geräte ebenfalls diese Nachricht später empfangen. Mehr dazu in einem der folgenden Posts).

Die Verwendung dieser Infrastruktur ist ebenso einfach, wie genial. Jedes Gerät kann im Grundsatz jedes Topic eröffnen. Dabei müssen lediglich einige Formvorschriften eingehalten werden. Ein Topic kann zum Beispiel das foldende sein: “zuhause/wohnzimmer/temperature” – dieses Topic könnte zum Beispiel genutzt werden um die aktuelle Temperatur im Wohnzimmer bereitzustellen.
Ein Thermometer würde in diesem Fall in das Topic veröffentlichen (Publish). Diese Information wird dort verarbeitet (und ggf. vorgehalten). Alle Clients die an der Temperatur des Wohnzimmer “interessiert” sind, zum Beispiel die Heizungssteuerung des Wohnzimmer, können das Topic abonnieren (Subscribe) und erhalten immer die aktuelle Temperatur im Wohnzimmer. Hier ist zu erwähnen, dass mehrere Geräte in ein Topic senden können und mehrere Geräte ein Topic abonieren können. Den Knotenpunkt bildet dabei immer der Broker. Dies bildet einen Vorteil: Die Clients müssen sich untereinander nicht kennen oder im selben Netzwerk sein. Jeder Client, der senden oder Empfangen möchte, muss lediglich den MQTT Broker erreichen. Der Rest wird durch den Broker erledigt.

Gibt es Alternativen?

Es gibt weiterhin noch sog. Filterqueries. Diese können zum Beispiel Content Based, also abhängig vom gesendeten Inhalt oder Typen Basiert sein. Auf diese beiden Arten der Kommunikation werde ich jedoch nicht bzw. nur am Rande eingehen, da diese in Smarthome Umgebungen eher selten zum Einsatz kommen und mir zumindest im privaten Umfeld niemand bekannt ist, der diese Art von MQTT Kommunikation verwendet.

MQTT Absichern – Geht das?

Je nachdem welche Daten über den Broker laufen, sollen diese ggf. gesichert werden (z.B. durch Verschlüsselung). Dies ist auch mit MQTT problemlos möglich.
MQTT unterstützt im allgemeinen einige Sicherheitsfunktionen. Da MQTT auf L8 arbeitet, wird aber auch darunterliegende Technik verwendet.
Die Schichten darunter bieten bereits Sicherheitsmechanismen, welche sehr breit verwendert werden (z.B. TLS).
MQTT hat den Hauptzweck sehr schnell und zuverlässig zu sein. Dementsprechend ist in dem Standard nur definiert, was benötigt wird. Zudem ist fast alles an Logik auf dem Broker, sodass grundsätzlich jedes Gerät einen MQTT Client verwenden kann.
MQTT bietet von Haus aus keine Transportverschlüsselung an. Dies kann durch TLS auf L5 erreicht werden. Weiterhin gibt TLS die Möglichkeit Clients per Zertifikat gegenüber dem Server zu authentifizieren.
Untere Sicherheitsfunktionen zum Beispiel für die Inter-LAN Kommunikation bilden z.B. Protokolle wie IPSec.
MQTT bietet selbst eine L8 Payload Verschlüsselung, welche die gesendeten Daten verschlüsselt. Zudem ermöglicht MQTT eine User/Password Authentifizierung. Weiterhin auch X.509.
Zuletzt gibt es die Möglichkeit Berechtigungen zu vergeben, sodass zum Beispiel nur bestimmte Geräte ein Topic abonnieren dürfen.
MQTT Security ist ebenfalls ein sehr großes Thema und wird später mit mehr tiefe behandelt :).

Wofür kann ich MQTT verwenden?

MQTT ist gut darin, kleine Nachrichten zu übertragen. Der Fokus liegt dabei auf geringer Latenz. Aus diesem Grund kann MQTT alle Daten innerhalb eines Smarthome transportieren, welche regelmäßig gesendet werden, aber nicht viel Speicher benötigten (zum Beispiel Sensor Werte eines Thermometer, Auto, Regensensor oder anderem). Ich nutzen MQTT zum Beispiel um jede Sekunde meinen momentanten Stromverbrauch an mein Homeassistant zu senden.
Abgesehen davon, sind natürlich auch Anwendungsfälle wie Security möglich um zum Beispiel Türen zu öffnen oder ähnliches.
Daten wie Videos können aber eher nicht per MQTT übertragen werden… Dies ist aber auch nicht der Sinn des Protokolls.

Was wird jetzt noch kommen?

Dieser Beitrag soll so kurz wie möglich alle wichtigen Informationen bündeln. Dementsprechend ist dieser Beitrag sehr Oberflächlich gewesen ohne sonderliche Tiefe, zeigt aber das wichtigste. Themen wie Sessions und QoS (Quality of Service) habe ich aber zum Beispiel nur nebenbei erwähnt.
Die folgenden Artikel werden jeweils einen Aspekt des MQTT Protokoll behandeln. Am Ende möchte ich eine Blog Reihe haben, welche für den derzeitige MQTT 5 Standard einen soliden EInstieg bildet, mit allen relevanten Informationen. Dabei möchte ich dir gleichzeitig genügend technische Tiefe an die Hand legen, sodass du direkt ein eigenes Netzwerk aufbauen und nutzen kannst.
Neben Beispielen aus meinem Netzwerk, werde ich einige Software vorstellen, welche kostenfrei verwendet werden kann.

Fazit

Dieser Beitrag kann nichtmal ansatzweise den Umfang des MQTT Protokoll wiedergeben und sollte es auch nicht. Ich denke aber, dass du jetzt eine grundsätzliche Idee über das Protokoll hast und was es kann.
In den nächsten Posts werde ich auf unterschiedliche Aspekte dieses Protokolls eingehen um zu zeigen, wie großartig MQTT für ein Smarthome verwendet werden kann. Jedoch werde ich auch Nachteile aufzeigen, welche andere Kommunikationsmittel nicht haben, denn MQTT hat durchaus seine Nachteile (zum Beispiel den Broker selbst).
Trotzdem soltle man dieses Protokoll kennen und verstehen, wenn man im Smarthome Bereich unterwegs ist.


Back…