Einführung in MQTT

MQTT (Teil 1): Einführung

Diese Tutorial-Reihe dreht sich ganz um MQTT – dem Nachrichtenprotokoll, das sich hervorragend dafür eignet, Daten zwischen Geräten auszutauschen. Stell dir vor, du möchtest die Temperatur in deinem Gewächshaus überwachen. Dazu installierst du Temperatursensoren, die ihre Messwerte per MQTT an einen zentralen Broker senden. Der Broker verteilt die Daten dann an alle “interessierten” Empfänger, wie einen Mikrocontroller, der die Bewässerung steuert.

In dieser Einführung klären wir zunächst, worum es sich bei MQTT überhaupt handelt und wie es grundlegend funktioniert.

Was ist MQTT?

MQTT steht für “Message Queuing Telemetry Transport”. Es handelt sich um ein leichtgewichtiges, offenes Nachrichtenprotokoll, das sich ideal für die M2M-Kommunikation (Machine-to-Machine) eignet. MQTT ermöglicht es Geräten, auf einfache und effiziente Weise Daten auszutauschen.

Das Protokoll wurde 1999 von Andy Stanford-Clark (IBM) und Arlen Nipper (Cirrus Link) entwickelt. Heute hat sich MQTT zu einem Standard im IoT-Bereich entwickelt.

MQTT bietet einige Vorteile, die es für IoT-Anwendungen besonders attraktiv machen:

  • Leichtgewichtig: MQTT kommt mit minimaler Netzwerk-Bandbreite und geringen Hardwareanforderungen aus.
  • Publish/Subscribe-Modell: MQTT entkoppelt Sender (Publisher) und Empfänger (Subscriber) von Nachrichten. Geräte kommunizieren nicht direkt miteinander, sondern über einen Broker.
  • Skalierbarkeit: Das Protokoll ist hervorragend für große Netzwerke mit vielen Geräten geeignet.
  • Zuverlässigkeit: MQTT bietet drei Quality of Service (QoS) Levels, um unterschiedliche Anforderungen zu erfüllen.
  • Flexibilität: MQTT lässt sich leicht in bestehende Systeme integrieren und ist mit vielen Programmiersprachen und Plattformen kompatibel.

Wie funktioniert MQTT?

Um die Funktionsweise von MQTT zu verstehen, ist wie so oft ein Schaubild ganz hilfreich:

Schaubild: So funktioniert MQTT

Dieses Schaubild zeigt ein mögliches Smart-Home-Szenario. Lass uns die einzelnen Elemente durchgehen:

  1. Broker: Im Zentrum des Bildes siehst du einen grünen Kreis mit der Beschriftung “Broker”. Der Broker ist das Herzstück des MQTT-Systems und fungiert als zentraler Vermittler zwischen allen Geräten.
  2. Publisher (Sender): Auf der linken Seite sind drei blaue Kreise mit Thermometer-Symbolen zu sehen. Diese stellen die Publisher dar – in diesem Fall Temperatursensoren an verschiedenen Orten:
    • Ein Sensor im Haus (home/temperature) misst 19°C
    • Ein Sensor in der Garage (garage/temperature) misst 15°C
    • Ein Sensor im Garten (garden/temperature) misst -4°C
  3. Subscriber (Empfänger): Auf der rechten Seite befinden sich zwei rote Kreise mit Chip-Symbolen. Diese repräsentieren die Subscriber – Geräte, die Temperaturinformationen empfangen und verarbeiten:
    • Ein Gerät, das sich für die Haustemperatur interessiert und z.B. die Temperatur regelt.
    • Ein Gerät, das die Gartentemperatur überwacht und z.B. die Rollläden herunterlässt, um das Haus besser zu isolieren.
  4. Publish-Vorgang: Die schwarzen Pfeile von den Publishern zum Broker zeigen den Publish-Vorgang. Jeder Sensor sendet seine Messwerte mit einem spezifischen Topic (z.B. “home/temperature”) an den Broker.
  5. Subscribe-Vorgang: Die grauen Pfeile vom Broker zu den Subscribern zeigen den Subscribe-Vorgang. Die Subscriber teilen dem Broker mit, für welche Topics sie sich interessieren (z.B. “home/temperature” oder “garden/temperature”).
  6. Nachrichtenverteilung: Die schwarzen Pfeile vom Broker zu den Subscribern zeigen, wie der Broker die empfangenen Nachrichten an die interessierten Subscriber weiterleitet.

Das Besondere an MQTT ist die Entkopplung von Sendern und Empfängern. Die Temperatursensoren (Publisher) wissen nicht, wer ihre Daten empfängt. Die Empfangsgeräte (Subscriber) wissen nicht, woher die Daten genau kommen. Alles läuft über den zentralen Broker.

Dieses System ermöglicht eine flexible und effiziente Kommunikation in IoT-Netzwerken. Neue Geräte können einfach hinzugefügt werden, indem sie sich beim Broker für die relevanten Topics registrieren, ohne dass andere Geräte angepasst werden müssen.

Topics und Topic-Hierarchie

In MQTT werden Nachrichten immer zu einem bestimmten “Topic” (Thema) veröffentlicht. Topics sind Zeichenketten, die hierarchisch aufgebaut sein können, ähnlich wie Verzeichnispfade.

Ein paar Beispiele für Topics hast du bereits im Schaubild kennengelernt:

  • home/temperature
  • garage/temperature
  • garden/temperature

Topics werden mit Schrägstrichen (/) strukturiert. Das ermöglicht eine übersichtliche Ordnung und erleichtert das Abonnieren verwandter Themen.

Ein Subscriber kann nicht nur einzelne Topics, sondern auch ganze Topic-Zweige abonnieren. Dazu gibt es zwei Platzhalter:

  • Plus (+): Ersetzt eine einzelne Hierarchieebene. Beispiel: home/+/temperature.
  • Raute (#): Ersetzt beliebig viele Hierarchieebenen. Beispiel: home/#.

Quality of Service (QoS) Levels

Neben den Topics sind Quality of Service Levels ein wichtiger und interessanter Aspekt von MQTT. Unterschieden werden 3 Level, die die Zustellung und Verarbeitung von Nachrichten steuern:

QoS 0 (At most once):

  • Dies ist das einfachste und schnellste Level.
  • Der Sender schickt die Nachricht einmal an den Broker und vergisst sie dann.
  • Der Broker leitet die Nachricht an die Subscriber weiter, ohne eine Bestätigung zu erwarten.
  • Es gibt keine Garantie, dass die Nachricht ankommt.
  • Verwendung: Ideal für häufig gesendete, nicht kritische Daten wie regelmäßige Sensorwerte.
  • Beispiel: Ein Temperatursensor, der alle 5 Sekunden einen Wert sendet. Wenn mal ein Wert verloren geht, ist das nicht schlimm.

QoS 1 (At least once):

  • Der Sender speichert die Nachricht, bis er eine Bestätigung (PUBACK) vom Broker erhält.
  • Wenn keine Bestätigung kommt, sendet er die Nachricht erneut.
  • Der Broker leitet die Nachricht an Subscriber weiter und erwartet ebenfalls eine Bestätigung.
  • Die Nachricht kommt mindestens einmal an, kann aber auch mehrfach ankommen.
  • Verwendung: Gut für wichtige Nachrichten, bei denen Duplikate kein Problem sind.
  • Beispiel: Ein Schalter, der seinen Status meldet. Es ist wichtig, dass die Änderung ankommt, auch wenn sie vielleicht doppelt gemeldet wird.

QoS 2 (Exactly once):

  • Das zuverlässigste, aber auch komplexeste und langsamste Level.
  • Verwendet ein 4-Wege-Handshake zwischen Sender und Empfänger.
  • Garantiert, dass die Nachricht genau einmal ankommt, ohne Verlust oder Duplikate.
  • Verwendung: Für kritische Nachrichten, bei denen jede Nachricht wichtig ist und Duplikate Probleme verursachen würden.
  • Beispiel: Finanztransaktionen oder kritische Steuerungsbefehle in industriellen Anlagen.

Die Wahl des passenden QoS-Levels hängt also von den Anforderungen deiner Anwendung ab. In vielen Fällen reicht bereits der einfachste Level QoS 0 aus.

Retained Messages und Last Will and Testament

Zuletzt noch zwei weitere nützliche MQTT-Funktionen:

Retained Messages

Stell dir einen digitalen Notizzettel vor, der an einer Pinnwand (dem Broker) hängt. Jeder, der vorbeikommt (sich subscribt), kann sofort den letzten Stand sehen, ohne warten zu müssen, bis jemand eine neue Notiz macht.

Beispiel:

  • Du hast eine smarte Glühbirne im Wohnzimmer.
  • Der Lichtschalter sendet eine Retained Message “AN” oder “AUS” an das Topic “haus/wohnzimmer/licht”.
  • Wenn du eine neue App auf deinem Smartphone installierst und sie sich mit dem MQTT-Broker verbindet, weiß sie sofort, ob das Licht an oder aus ist, ohne auf die nächste Zustandsänderung warten zu müssen.

Last Will and Testament (LWT)

Stell dir vor, du gehst auf eine Party und sagst dem Gastgeber: “Wenn ich in der nächsten Stunde nicht wiederkomme, sag allen, ich musste plötzlich nach Hause.” Das ist im Prinzip das LWT.

Beispiel:

  • Du hast einen Temperatursensor im Gewächshaus.
  • Bei der Verbindung zum Broker richtet der Sensor ein LWT ein: “Gewächshaussensor offline”.
  • Wenn der Sensor unerwartet die Verbindung verliert (z.B. wegen eines Stromausfalls), sendet der Broker automatisch diese Nachricht.
  • So wissen alle interessierten Geräte, dass der Sensor nicht mehr aktiv ist, ohne auf ein Timeout warten zu müssen.

Das soll es zunächst mit Teil 1 der Reihe gewesen sein. Der nächste Teil beschäftigt sich mit dem Broker – dort erfährst du, wie du diesen auf einem Raspberry Pi einrichtest und wie das Senden und Abonnieren von Daten in der Praxis aussieht.

Bausätze für dein nächstes Projekt

Alles, was du für dein nächstes Projekt brauchst – Bausätze inklusive Anleitung als E-Book und der benötigten Hardware.

ESP8266 Projekt

Wetterstation & Vorhersage

Miss die aktuelle Temperatur und Luftfeuchtigkeit und zeige dazu die Wettervorhersage auf einem OLED-Display an.

Bausatz anschauen

Arduino Projekt

Pflanzenwächter

Braucht deine Pflanze Wasser? Dieses Arduino Projekt gibt dir Bescheid, wenn es so weit ist.

Bausatz anschauen

ESP8266 Projekt

Webserver

Lerne, wie du mit deinem Webserver Messdaten ausgibst, Geräte steuerst und dir mit HTML und CSS ein Interface erstellst.

Bausatz anschauen

Arduino Projekt

Wetterstation

Baue deine eigene Wetterstation, die dir Temperatur und Luftfeuchtigkeit anzeigt.

Bausatz anschauen

Auch interessant

Werde Mitglied
Mehr Projekte für Arduino, Raspi & Co.
Als Mitglied von Pollux Labs erhältst du Zugang zu allen Projekten und Tutorials, zum Beispiel: - ESP8266 Webserver - Arduino Schnarchstopper - ESP32-CAM Fotofalle - ESP32 Internetradio ... und mehr!
Mehr Arduino & ESP8266 Projekte
Als Mitglied von Pollux Labs erhältst du Zugriff auf alles Projekte und Tutorials. Von der Arduino Wetterstation bis zum ESP8266 Webserver.
Werde Mitglied