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…