MQTT: Was ist das?

mqtt

Der Standard für Internet of Things- und Machine to Machine-Kommunikation

Das offene MQTT-Protokoll (Message Queue Telemetry Transport) hat sich als der populärste Ansatz für sichere Kommunikation im Internet of Things (IoT) und damit auch Machine to Machine (M2M)-Kommunikation erwiesen. Hier erfahrt Ihr mehr darüber.

Was ist MQTT?

MQTT ist ein Protokoll für die IoT- bzw. M2M-Kommunikation von Geräten und Applikationen. Es unterscheidet sich von Request/Response-Protokollen wie HTTP oder CoAP dadurch, dass es alle Kommunikationsteilnehmer entkoppelt: Für den Datenaustausch werden Nachrichten über einen zentralen Verteiler an die Teilnehmer gesendet, weshalb kein tieferes Wissen über empfangende Applikationen vorhanden sein muss.

Das MQTT Protokoll wurde ursprünglich für ressourcenarme Geräte entwickelt, die über schlechte Konnektivität verfügen, und zeichnet sich daher durch extreme Schlankheit aus. Dadurch ist MQTT ideal geeignet für die Embedded-Entwicklung.

Seit der Einführung 1999 hat sich MQTT kontinuierlich weiterentwickelt, mittlerweile ist Version 3.1.1 ein offizieller OASIS und ISO Standard. Der Nachfolger, MQTT 5, wurde 2018 spezifiziert.

Wie funktioniert MQTT in der Machine to Machine-Kommunikation (M2M)?

MQTT realisiert eine 1:N-Kommunikation, d.h. ein Teilnehmer sendet eine Nachricht, die mehrere Abonnenten zugestellt bekommen können. Ein Teilnehmer kann sowohl Daten senden als auch empfangen. Jede Kommunikation findet über einen zentralen Verteiler statt, den sogenannten MQTT Message Broker.

Der Publisher (Produzent von Nachrichten) und der Subscriber (Empfanger der Nachrichten) sind dadurch entkoppelt. Eine Nachricht enthält neben dem “Topic” die eigentlichen Nutzdaten. Das Topic kann wie ein Dateisystempfad eine Hierarchie mit Haupt- und untergeordneten Themen abbilden. Möchte ein MQTT-Client Nachrichten für ein Topic empfangen, abonniert er es beim Message Broker. Ein Abonnement kann direkt für ein konkretes Topic erfolgen, oder es können Teilbäume der Topic-Hierarchie durch sogenannte Wildcards abonniert werden. Die interessierten Clients werden durch den Broker beim Eintreffen neuer Nachrichten benachrichtigt, statt selbst beim Server Änderungen anzufragen. Sendende und empfangende Clients bleiben über eine stehende TCP-Verbindung mit dem MQTT-Broker verbunden. Die Verbindung bauen die Clients selber auf und benötigen anders als der Broker keine IP-Adresse.

Der MQTT Broker kann nun mittels Push-Verfahren eine Nachricht ohne Verzogerung an Clients ausliefern. Damit implementiert MQTT das Publish/Subscribe-Muster und gewährleistet eine hocheffiziente Kommunikation zwischen den Teilnehmern.

Protokolle für die M2M-Kommunikation müssen Leichtgewichte sein. MQTT enthält daher keine kryptografischer Verfahren, sondern nützt zur Absicherung externe Protokolle bzw. überlässt sie der Anwendung.

Eigenschaften und Besonderheiten von MQTT

MQTT ist optimal für den Austausch kleiner Nachrichten in großer Zahl mit hoher Frequenz. Die bandbreitenschonende Push-Kommunikation und die Einfachheit in der Implementierung und Nutzung ist eine der Besonderheiten des Nachrichtenprotokolls.

Daneben bietet MQTT weitere Protokollfeatures, darunter:

  • Quality-of-Service-Levels zur Sicherstellung des Empfangs einer Nachricht (auch bei zwischenzeitlicher Trennung der Verbindung)
  • Retained Messages: Die zuletzt gesendete Nachricht kann beim Broker hinterlegt werden und sofort an neue Subscriber geschickt werden.
  • Last Will and Testament: Hiermit kann einem Client-Geräteverbund angezeigt werden, dass sich ein Client unerwartet abgemeldet hat. Ein Client hinterlegt dazu eine “Last Will”-Message beim Broker, der diese an alle Subscriber sendet, wenn sich der Client nicht ordentlich abgemeldet hat.
  • Persistent Sessions: Der Broker kann einem nicht verbundenen Client alle verpassten Messages vorhalten und sie ihm senden, sobald er sich neu verbindet.

Als Enterprise-Protokoll fehlen MQTT Features wie Transaktionen und Custom Header. Enterprise-Anwendungen können aber leicht über einen Broker, der mehrere Protokolle unterstützt, verbunden werden. Es stehen zahlreiche Broker und Client-Bibliotheken für viele Plattformen und Programmiersprachen sowie Werkzeuge wie Protokoll-Analyzer zur Verfügung.
Spezielle Broker wie der HiveMQ Broker bieten ein Plugin-System, mit dem Applikationslogik für den Broker nachgerüstet werden kann, z.B. das Speichern von Messages in Datenbanken. Zu Testzwecken kann man einen der öffentlichen Broker verwenden.

MQTT 5 bringt Vereinfachungen für hochskalierbare Systeme, wie verbesserte Fehlerbehandlung, Vereinfachungen für die Entwicklung eigener Client-Bibliotheken, verbesserte Authentifizierungs- und Autorisierungsmechanismen sowie Identifikation und Formalisierung von typischen Kommunikationsmustern.
Broker wie HiveMQ bieten eine Kompatibilitätsschicht der verschiedenen Protokollversionen.

Wie kann ich MQTT beim Entwickeln nutzen?

Für alle gängigen Programmiersprachen sind produktionsreife Implementierungen verfügbar. Zum Start benötigt der Entwickler einen MQTT Broker sowie eine MQTT Client Bibliothek. Es empfiehlt sich z.B. der MQTT Broker Mosquitto, der in C geschrieben und ideal für den Betrieb auf ressourcenarmer Hardware ist. Für Cloud Deployment eignet sich der Broker HiveMQ, der speziell für professionelle Umgebungen und Hochverfügbarkeit konzipiert wurde.

Zur Applikationsentwicklung ist das Eclipse Paho Projekt beliebt. MQTT-Implementierungen findet man hier für diverse Programmiersprachen. Für Cloud-Backend-Dienste gibt es die MQTT Bibliothek MQTT Bee.

Fazit

Das heute populärste offene Kommunikationsprotokoll für das Internet of Things bietet mit leichtgewichtiger Push-Funktionalität viele Funktionen, die dem Anwendungsentwickler das Leben vereinfachen, eine sichere, performante und gut wartbare Kommunikation der Applikation mit und zwischen anderen Geräten zu implementieren.

Video in 7 Minuten

Rückmeldungen