Message Queue Telemetry Transport

Einstieg in die IoT-Kommunikation mit MQTT

| Autor / Redakteur: Dominik Obermaier * / Sebastian Gerstl

Wenn es um sichere Kommunikation im Internet der Dinge geht, liefern sich mehrere Protokolle derzeit einen eifrigen Wettstreit darum, sich als Standard zu etablieren. Das offene MQTT (Message Queue Telemetry Transport) verspricht, sich heir als populärer und leicht zugänglicher Ansatz durchzusetzen. Wir stellen das Kommunikationsprotokoll für das Internet of Things näher vor.
Wenn es um sichere Kommunikation im Internet der Dinge geht, liefern sich mehrere Protokolle derzeit einen eifrigen Wettstreit darum, sich als Standard zu etablieren. Das offene MQTT (Message Queue Telemetry Transport) verspricht, sich heir als populärer und leicht zugänglicher Ansatz durchzusetzen. Wir stellen das Kommunikationsprotokoll für das Internet of Things näher vor. (Bild: Clipdealer)

MQTT hat sich in den letzten Jahren zum Standardprotokoll für die IoT-Kommunikation von Geräten und Applikationen entwickelt. Doch was hat es mit dem Protokoll auf sich und wie setzt man es ein?

Wer sich in den letzten Jahren mit der Implementierung von über das Internet vernetzter Software und Hardware beschäftigt hat, dem wird sehr wahrscheinlich der Name "MQTT" (Message Queue Telemetry Transport) über den Weg gelaufen sein. Das aus heutiger Sicht mit Abstand populärste Kommunikationsprotokoll für das Internet of Things (siehe Bild 1) bietet viele Funktionen, die das Leben von Anwendungsentwicklern sehr einfach gestalten um eine verlässliche, sichere, wartbare und performante Kommunikation der eigenen Applikation mit anderen Geräten, Cloud-Backenddiensten oder mobilen Applikationen zu implementieren.

MQTT ist in erster Linie ein Messaging Protokoll für das IoT. Anders als Request/Response Protokolle wie HTTP oder CoAP entkoppelt es alle Kommunikationsteilnehmer und der Datenaustausch wird über das Senden von Nachrichten über einen zentralen Verteiler an interessierte Teilnehmer implementiert, weshalb kein intrinsisches Wissen über andere Applikationen und Endpunkte vorhanden sein muss.

Das MQTT Protokoll ist extrem schlank und wurde ursprünglich für sehr ressourcenarme Geräte entwickelt die über sehr schlechte Connectivity verfügen. Daher ist MQTT ideal geeignet für den Einsatz mit Mikroprozessoren oder die Embedded-Entwicklung im Allgemeinen. Die perfekte Eignung von MQTT für IoT Anwendungsfälle ist nicht verwunderlich, da das Protokoll 1999 für SCADA Systeme entwickelt wurde, welche über Satellitenkommunikation Daten senden und empfangen sollten. Ein minimales und extrem schlankes Protokoll war deshalb das erklärte Designziel.

Natürlich hat sich MQTT seit 1999 weiterentwickelt, mittlerweile ist MQTT Version 3.1.1 ein offizieller OASIS und ISO Standard (ISO/IEC 20922:2016) und der Nachfolger, MQTT 5, wurde 2018 final spezifiziert. Heute ist das Protokoll der Standard wenn es um die Vernetzung für das Internet of Things, Heimautomatisierung oder aber auch Vernetzung im Kontext Industrie 4.0 geht.

Grundlegende Funktionsweise: Publish / Subscribe Architektur

MQTT implementiert das Publish/Subscribe-Pattern (Bild 2). Jede Kommunikation findet über einen zentralen Verteiler, den so genannten MQTT Message Broker, statt. Eine jede Nachricht, die ein Client sendet, enthält neben dem so genanntem "Topic" die tatsächlichen Nutzdaten.

Ein Topic ist ein Metadatum in jeder zu sendenden MQTT Nachricht. Das Topic ist ein Text, welcher Trennzeichen enthalten kann, und er kann, ähnlich dem POSIX-Dateisystempfad, eine Hierarchie abbilden (siehe Bild 3). Jeder MQTT-Client, der Nachrichten für dieses Topic empfangen möchte, abonniert es beim Message Broker. Dabei kann ein Abonnement direkt auf ein konkretes Topic erfolgen oder es können durch sog. Wildcards ganze Teilbäume der Topic Hierarchie abonniert werden. Da die interessierten Clients beim Eintreffen neuer Nachrichten durch den Broker benachrichtigt werden, anstatt selbst beim Server nach Änderungen zu fragen, wird eine hocheffiziente Kommunikation zwischen den Teilnehmern gewährleistet. Somit ist eine echte Push Kommunikation zwischen allen Kommunikationsteilnehmern möglich.

Entscheidend ist, dass die Geräte und Applikation komplett entkoppelt sind, da jeder Client nur den Message Broker kennt, nicht jedoch die anderen Teilnehmer. Mit MQTT ist eine 1:N Kommunikation abbildbar, es ist also möglich, dass eine einzelne Nachricht von einem Teilnehmer an einen Topic versendet wird, jedoch mehr Abonnenten die Nachricht vom Broker zugestellt bekommen können. Natürlich kann ein einzelnes Gerät bzw. eine einzelne Applikation sowohl Daten senden als auch empfangen.

Eine echte Push-Kommunikation ist dadurch möglich, dass ein Client zu Beginn der MQTT Kommunikation sich beim Broker anmeldet und eine TCP Verbindung aufbaut. Diese TCP Verbindung wird (im Idealfall) konstant offen gehalten. Durch die Bidirektionalitätseigenschaften von TCP kann der Broker somit an verbundene MQTT Clients Nachrichten sofort ausliefern. Für nicht verbundene Clients werden die verpassten Nachrichten bei Bedarf vom Broker gepuffert und ausgeliefert sobald diese Clients wieder verbunden sind. Ein MQTT Broker selbst baut selbst niemals eine TCP Verbindung zu einem Client auf, es ist zwingend erforderlich, dass ein Client die Verbindung selbst aufbaut, weshalb Geräte nicht von außen adressierbar sein müssen um an einer MQTT Kommunikation teilzunehmen.

MQTT – Topics und Features

MQTT besitzt neben dem reinen Push-Messaging durch die Publish/Subscribe Architektur eine Reihe von bemerkenswerten Protokollfeatures, die im Kontext von IoT, Mobile Applications und Embedded Applications optimal sind:

  • Unterschiedliche Quality of Service Level: Um sicherzustellen, dass eine gesendete Nachricht beim Empfänger ankommt, definiert MQTT drei verschiedene Quality-of-Service-Levels (QoS), mit denen eine Nachricht gesendet werden kann: at most once (0), at least once (1) und exactly once (2). Das Protokoll stellt die Nachrichtengarantien auch sicher wenn zwischendurch die Verbindung getrennt und neu aufgebaut wurde.
  • Retained Messages: Die letzte gesendete Nachricht eines Topics kann wahlweise am Broker hinterlegt werden. Jeder neue Subscriber auf diesem Topic erhält automatisch die zuletzt gesendete Nachricht für den Topic. Damit kann ein neuer Subscriber gleich mit dem letzten Wert arbeiten und muss nicht warten bis eine neue Nachricht für einen Topic eintrifft um initial Daten zu erhalten.
  • Last Will and Testament: Ein Client kann eine MQTT-Nachricht als „Letzten Willen“ beim Verbindungsaufbau am Broker hinterlegen. Wenn der Broker feststellt, dass dieser Client nicht mehr verbunden ist und der Client sich vorher nicht ordentlich abgemeldet hat, wird dieser Letzte Wille an alle Subscriber versendet. Der Broker ist also verantwortlich dafür, den letzten Willen des Clients auszuführen. Somit ist es sehr einfach möglich Benachrichtigungen zu implementieren für den Fall, dass ein Gerät unerwartet die Verbindung verliert.
  • Persistent Sessions: 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, sendet der Broker alle für ihn verpassten Nachrichten an den Client. Natürlich muss der Client sich nicht neu auf vorher abonnierte Topics subscriben, da der Broker die vorherige Session einfach fortführt. Für den Applikationsentwickler bedeutet das, dass dieser einfach davon ausgehen kann, dass nach einem Verbindungsabbruch und einem Neuverbinden die Applikation so fortfahren kann wie wenn es den Verbindungsabbruch nicht gegeben hätte.

Neben den Standardprotokollfeatures bieten viele MQTT Broker, wie etwa der für den professionellen Einsatz konzipierte HiveMQ, etliche Funktionalitäten die den Einsatz von MQTT noch einfacher machen und bringen ein Plugin System mit, mit welchem Applikationslogik am MQTT Broker nachgerüstet werden kann, wie etwas das Speichern von Nachrichten in Datenbanken oder anderen externen Systemen.

MQTT 5 – Ein neuer Standard

MQTT 5, der offizielle Nachfolger von MQTT 3.1.1, wurde 2018 von OASIS veröffentlicht. Neben der vorgestellten Funktionalität bietet die neue Version des Protokolls zahlreiche Verbesserungen und Neuerungen die speziell in großen IoT Szenarios das Leben der Applikationsentwickler vereinfachen. Unter anderem wurden Custom Header, Verbessertes Fehlerhandling, Message & Session Expiry, Shared Subscriptions, Flow Control und vieles mehr eingeführt. Manche der neuen Features wie etwa Shared Subscriptions - Eine Lastverteilung für Subscriber - und Session Expiry sind bereits für MQTT 3.1.1 mit Brokern wie HiveMQ verfügbar.

Direkter Einstieg in MQTT

Um als Entwickler direkt starten zu können benötigt man einen MQTT Broker und eine MQTT Client Bibliothek. Zum Start empfiehlt sich der MQTT Broker mosquitto, der in C geschrieben ist und ideal geeignet ist um auf ressourcenarmer Hardware betrieben zu werden. Für Cloud Deployments eignet sich der in Deutschland entwickelte MQTT Broker HiveMQ, der speziell für Hochverfügbarkeit und professionelle Umgebungen ausgelegt ist.

Um auf der Applikationsseite direkt starten zu können eignet sich das Eclipse Paho Projekt. Hier findet man MQTT Implementierungen sowohl für C, C++, Java und exotischeren Programmiersprachen wie etwa Go oder Rust. Für Cloud Backend Dienste eignet sich die MQTT Bibliothek MQTT Bee.

Als zusätzliche Lektüre für Leser, die technisch tiefer einsteigen wollen, empfiehlt sich "MQTT Essentials". Wer mehr über MQTT 5 erfahren möchte kann dies auf http://www.mqtt5.com tun.

MQTT ist mittlerweile das Standardprotokoll für die Internet of Things Kommunikation. Durch die Entkopplung aller Kommunikationsteilnehmer, die Einfachheit in der Benutzung und die ressourcenschonenden Eigenschaften, eignet es perfekt für die Entwicklung von Applikationen für das IoT. Zusätzliche Features wie Retained Messages, Last-Will-and-Testament, Persistent Sessions und QoS Level machen es Entwicklern leicht, Applikationen zu entwickeln die resilient und wartbar sind. Von der Heimautomatisierung bis zu komplexen Deployments mit mehreren Millionen von gleichzeitig verbundenen Fahrzeugen oder anderen Geräten, MQTT ist der Standard für die Vernetzung von Maschinen und Applikationen und sollte in keiner Toolbox von Entwicklern im IoT fehlen.

IoT-Basics: Mit Big Data zur smarten Produktion

Data Science

IoT-Basics: Mit Big Data zur smarten Produktion

15.03.18 - Industrielle Internet-Systeme auf der Basis von Cloud-basierten IoT-Plattformen werden den Einsatz von Big Data in der Industrie deutlich voranbringen. Sie erschließen die bereits vorhandenen Datenquellen und führen sie einer effizienten zentralen Auswertung zu, was kompetentere Entscheidungen ermöglicht. lesen

Start-up Cybus pilotiert „IDS-ready“-Prüfkriterien

Datenökonomie

Start-up Cybus pilotiert „IDS-ready“-Prüfkriterien

03.05.18 - Alles, was sich im Industrial IoT bewegt, beruht auf Produktionsdaten. Doch es hapert bei vielen Projekten an der einfachen und sicheren Datenverbindung zwischen Maschinen und Management. Die International Data Spaces Association (IDSA) und Cybus haben deshalb eine Kooperation zur kommenden „IDS-ready“-Prüfung gestartet. lesen

Dieser Beitrag stammt von unserem Partnerportal ELEKTRONIKPRAXIS.

* Dominik Obermaier ist Geschäftsführer bei der dc-square Gmbh

Kommentare werden geladen....

Kommentar zu diesem Artikel abgeben

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 45363186 / Technologie)