HiveMQ
Das Standardprotokoll im IoT?
Im Internet of Things (IoT) hat sich das schlanke Kommunikationsprotokoll MQTT als wichtiges Standardprotokoll etabliert. Die Anwendungsfälle für MQTT reichen von industriellen Anwendungen über vernetzte Fahrzeuge bis hin zu Logistik und Home Automation.
Heute kann so gut wie alles mit einem drahtlosen Netzwerk verbunden und im Internet der Dinge vernetzt werden. Alltagsgegenstände wie Autos, Fernseher, Armbanduhren, Heizungen, Kaffeemaschinen oder sogar Regenschirme können nun eine Internetverbindung nutzen, die früher Laptops und Smartphones vorbehalten war. Im Jahr 2020 werden rund 20 Milliarden vernetzte Geräte im IoT im Einsatz sein.
Bei dieser Größenordnung stoßen konventionelle Client-Server-Software-Architekturen und Kommunikationsprotokolle auf Server-Seite oft an ihre Grenzen. Auf der Client-Seite hingegen ist oft mit schlechter Verbindungsqualität zu rechnen, insbesondere wenn Daten über Mobilfunk übertragen werden.
Bereits im Jahr 1999 wurde das MQTT Protokoll von IBM und Arcom Control Systems im Rahmen eines gemeinsamen Projektes zur Überwachung von Ölpipelines entwickelt. Ziel war es, ein bandbreiteneffizientes und batterieschonendes Protokoll zu schaffen. Im Jahr 2010 veröffentlichte IBM die lizenzfreie MQTT-3.1-Spezifikation, aus der viele proprietäre und freie Softwareprodukte sowohl auf der Server- als auch auf der Clientseite hervorgingen.
Ein formaler Standardisierungsprozess begann 2013, was MQTT 3.1.1. zu einem offenen und frei verfügbaren ISO- (ISO/IEC 20922: 2016) und OASIS-Standard machte. Ende 2015 begannen die Arbeiten an einer umfassenden Aktualisierung des MQTT-Standards – MQTT Version 5. MQTT 5 erweitert das Protokoll auf Basis des Feedbacks der Nutzer um wichtige Funktionen, die moderne, cloudbasierte IoT-Anwendungen ermöglichen, und wurde im März 2019 ebenso zum OASIS-Standard, der durch kommerzielle und Open-Source-Implementierungen unterstützt wird.
Inzwischen hat sich MQTT zu einem der beliebtesten IoT-Standardprotokolle entwickelt, um Geräte im Internet of Things zu vernetzen. Aufgrund seiner Schlankheit und Einfachheit lässt es sich in vielen Projekten einsetzen, in denen andere Protokolle wie OPC UA zu schwergewichtig oder zu komplex sind. Vor allem aber gibt MQTT Antworten auf Themen wie Skalierung, verlässliche Datenübertragung über unzuverlässige Netzwerke und standardgemäße Sicherheitsmaßnahmen.
Publish/Subscribe-Architektur
Das Push-Prinzip von MQTT: Es ermöglicht eine hocheffiziente Kommunikation zwischen den Teilnehmern.
© HiveMQDas MQTT-Protokoll implementiert den Publish/Subscribe-Ansatz. Die Produzenten von Nachrichten (Publisher) und die Empfänger der Nachrichten (Subscriber) sind durch einen MQTT-Broker vollständig entkoppelt. Dieser MQTT-Broker ist für die Zustellung einer Nachricht an die richtigen Empfänger verantwortlich und verwaltet die einzelnen angeschlossenen Clients. Der Broker ist in der Lage, eine einzelne Nachricht eines Publishers an eine große Anzahl von Subscribern zu versenden. Sowohl sendende als auch empfangende Clients bleiben ständig über eine stehenden TCP-Verbindung mit dem MQTT-Broker verbunden.
Der MQTT-Broker kann somit eine Nachricht im Push-Verfahren ohne Verzögerung an interessierte Clients ausliefern. Das Senden (publish) und Empfangen (subscribe) von Nachrichten funktioniert über sogenannte Topics. Ein Topic ist ein String, der eine Art Betreff der Nachricht darstellt, aber ähnlich einer URL aufgebaut ist.
Die Struktur ‚heimautomatisierung/peters_haus/wohnzimmer/gluehbirne/1‘ wäre beispielsweise ein Topic für Nachrichten von Glühbirne 1 im Wohnzimmer von Peters Haus.
Jeder MQTT-Client, der Nachrichten für dieses Topic empfangen möchte, abonniert es beim Broker. Die interessierten Clients werden beim Eintreffen neuer Nachrichten durch den Broker benachrichtigt, anstatt selbst beim Server nach Änderungen fragen zu müssen. Dieses Push-Prinzip ermöglicht eine hocheffiziente Kommunikation zwischen den Teilnehmern. Entscheidend ist, dass die Teilnehmer der Kommunikation nichts voneinander wissen müssen. Jeder Client muss nur den Message Broker kennen und kann trotzdem an der Kommunikation mit allen Clients teilnehmen.
Essenzielle Protokoll-Features
Neben dem Austausch von Nachrichten macht seine Fülle an Features das MQTT-Protokoll für das Internet of Things optimal, vor allem, wenn eine unzuverlässige Verbindung – etwa via Mobilfunk – zu erwarten ist. MQTT besitzt das Konzept von Quality-of-Service-Levels (QoS-Levels). Diese QoS-Ebenen definieren die Übertragungsgarantien für Nachrichten. Es wird zwischen drei QoS-Arten unterschieden:
QoS 0: At-most-once Delivery. Es wird einmalig versucht, die Nachricht auszuliefern. Die Nachricht kommt einmal oder keinmal beim Empfänger an.
QoS 1: At-least-once Delivery. Der Sender versendet die Nachricht neu, falls der Empfänger den Empfang nicht quittiert.
QoS 2: Exactly-once Delivery. Das MQTT-Protokoll stellt sicher, dass die Nachricht genau einmal beim Empfänger ankommt.
MQTT benutzt TCP als Transportprotokoll, welches im Normalfall ‚Exactly-once Delivery‘-Garantien bei der Datenübertragung gibt. Es kann jedoch jederzeit
passieren, dass die TCP-Verbindung während der Datenübertragung getrennt wird. In einem solchen Fall greifen QoS 1 und QoS 2, da nach einer Wiederherstellung der Verbindung die Datenübertragung fortgesetzt werden kann.
Ein weiteres Protokoll-Feature von MQTT sind ‚Retained Messages‘. Ein Publisher kann beim Versenden einer MQTT-Nachricht diese als retained markieren. Der MQTT-Broker speichert diese Nachricht nun für dieses Topic ab, damit alle neuen Subscriber auf diesem Topic direkt die Nachricht zugestellt bekommen. Bei einer normalen MQTT-Message würde die Nachricht zwar an alle aktiven MQTT-Subscriber verschickt werden, am Broker würde jedoch nichts hinterlegt werden. Ein neuer Subscriber müsste dann warten, bis auf einem Topic eine neue Nachricht versendet wird. Mittels Retained Messages bekommt nun jeder neue Subscriber den letzten Stand auf einem Topic, vorausgesetzt, dass das Retained Flag für eine zu sendende Nachricht vom Client gesetzt wurde.
In Anwendungsfällen, bei denen mit häufigen Verbindungsabbrüchen von Clients zu rechnen ist, kann der Broker eine persistente Session vorhalten. Wenn ein Client sich erneut verbindet, schickt der Broker alle verpassten Nachrichten für seine Subscriptions an den Client. Zusätzlich muss der Client sich nicht neu auf vorher abonnierte Topics subscriben, da der Broker die vorherige Session einfach fortführt.
Warum MQTT für IoT?
MQTT ist besonders geeignet für eine zuverlässige Nachrichtenübertragung in unzuverlässigen und instabilen Netzwerken, wie etwa bei Mobilfunk-Netzwerken. Das macht MQTT zu einem optimalen Protokoll für das Internet der Dinge und die mobile Kommunikation. MQTT ist komplett datenagnostisch und kann Daten jeder Art übertragen, egal ob es sich um Text oder binärcodierte Inhalte handelt. Die Konzepte des Protokolls sind leicht zu erlernen und eigene Client-Implementierungen problemlos zu realisieren. MQTT baut auf TCP auf, und die Übertragung kann jederzeit mittels SSL/TLS verschlüsselt werden. Anders als bei anderen Protokollen gibt es bei MQTT kein Polling. Nachrichten werden sofort verteilt, wenn ein Ereignis auftritt, denn MQTT ermöglicht echte Push-Kommunikation. Das schont Bandbreite und CPU, da MQTT-Client-Anwendungen reagieren können, sobald eine Nachricht ankommt, anstatt beim Server nach neuen Nachrichten zu fragen.
Mit Hilfe von MQTT können Anwendungsfälle in allen Branchen und Sektoren implementiert werden: Automobilhersteller beziehungsweise Car-Sharing-Anwendung setzen auf MQTT für zuverlässige Konnektivität und durchgängige Verfügbarkeit. So kann dem Anwender während der gesamten Fahrt garantiert werden, dass Befehle an den Carsharing-Dienst oder das Fahrzeug selbst, schnell und zuverlässig ausgeführt werden – unabhängig vom Standort des Nutzers oder von der Nachfrage in Spitzenlastzeiten.
Auch in der Produktion verlassen sich viele Hersteller, die eine zuverlässige Messaging-Plattform für die Konnektivität zwischen einer vernetzten Fabrik und der Cloud benötigen, auf MQTT. Damit können Unternehmen ihre Produktionsstätten auf der ganzen Welt miteinander vernetzen und die generierten Daten in einem zentralen Backend sammeln und verarbeiten.
MQTT 5
MQTT 5 ist die größte und funktionsreichste Aktualisierung des MQTT-Protokolls überhaupt, wobei die Prinzipien, die es zum bisher populärsten Protokoll für das Internet der Dinge gemacht haben, beibehalten wurden.
Merkmale des MQTT-Protokolls Version 5, sind unter anderem: Vereinfachungen des Protokolls für hochskalierbare Systeme, verbesserte Fehlerbehandlung und -Reporting, Erweiterbarkeit des Protokolls, Vereinfachungen von Zustandsübergängen, Identifikation und Bereitstellung von Funktionen für gängige Kommunikationsmuster mit MQTT und verbesserte Authentifizierungs- und Autorisierungsmechanismen.
Mit Version 5 werden somit Kritikpunkte seines Vorgängerversion beseitigt und es bietet neue Funktionalitäten, welche typische IoT-Anwendungsfälle noch leichter umsetzen lässt.
Erste Schritte
Der MQTT-Broker ist das Herzstück der Kommunikation bei MQTT. Daher ist es wichtig, dass der MQTT-Broker die Anforderungen des Anwendungsfalles erfüllen kann. Neben der Performance spielen Sicherheitsmerkmale und die Robustheit des Broker eine Rolle. Es gibt mittlerweile eine Fülle an MQTT-Broker:
● Open-Source-Lösungen wie mosquitto oder die HiveMQ Community Edition.
● Kommerzielle MQTT-Broker wie die HiveMQ Professional oder Enterprise Edition, welche bis zu mehreren Millionen MQTT-Clients in einem Cluster vernetzen können.
● Cloudbasierte MQTT-Broker wie beispielsweise HiveMQ Cloud, für die keine Selbstbereitstellung des MQTT Brokers erforderlich ist.
Für den einfachen Einstieg in das MQTT-Protokoll finden sich auch allerlei Tutorials und Ressourcen auf der Hive-MQ-Website.















