Startseite>Mit MQTT Nachrichten über das Netzwerk austauschen
Aus Raspberry Pi Geek 06/2018

Mit MQTT Nachrichten über das Netzwerk austauschen

© Phartisan, 123RF

Auf vielen Kanälen

Martin Mohr

Die IoT-Welt spricht MQTT. Das robuste Protokoll eignet sich aber nicht nur für die Industrie, sondern auch für den Einsatz in den eigenen vier Wänden.

Die Abkürzung MQTT steht für Message Queue Telemetry Transport, was frei übersetzt etwa “warteschlangenorientiertes Übertragungsverfahren für entfernte Messeinrichtungen” bedeutet. Das klingt erst einmal ziemlich kompliziert. Nähern Sie sich dem Thema jedoch nach und nach an, klärt sich recht schnell, was die einzelnen Punkte im Detail bedeuten.

Worum es sich bei entfernten Messeinrichtungen handelt, erscheint noch einigermaßen plausibel: etwa ein Temperatursensor im Garten. Stellen Sie sich nun vor, Sie hätten mehrere solcher Sensoren im Garten. Es wäre sehr sinnvoll, wenn jeder Sensor seine Messwerte auf dieselbe Weise überträgt, also dasselbe Protokoll verwendet. Nun wissen Sie auch schon, was mit Übertragungsverfahren gemeint ist.

Stellen Sie sich nun vor, dass die Sensoren nur unregelmäßig Messwerte übermitteln, um Energie zu sparen. Zudem ist das Notebook mit der Software, die die Messungen auswertet, nicht immer online. Da wäre es hilfreich, so etwas wie einen Zwischenspeicher für die Daten zu haben oder gar eine Warteschlange, die dafür sorgt, dass die Werte in der richtigen Reihenfolge ankommen. Das Beispiel zeigt schon recht gut, wie Ihnen MQTT hilft.

Bei MQTT handelt es sich um ein leichtgewichtiges Protokoll. Es erzeugt sehr wenig Last im Netzwerk und benötigt kaum CPU-Leistung. Aus diesem Grund eignet es sich perfekt für einfache Mikrocontroller wie den Arduino oder den ESP8266 sowie für die Kommunikation mit Mobilgeräten.

Das Protokoll umfasst drei Komponenten: Der Sender (Producer) erzeugt Nachrichten, die er bei einer Zwischenstelle (Broker) abliefert. Dieser Vorgang nennt sich Publishen. Der Empfänger (Consumer) nimmt die Nachrichten entgegen. Die Nachrichten sind bestimmten Themen (Topics) zugeordnet. Über Topic-Filter teilt der Consumer dem Broker mit, für welche Nachrichten er sich interessiert (Subscribe).

Der Broker fungiert bei MQTT also als zentrale Komponente: Er sorgt dafür, dass die Kommunikation zwischen Sender und Empfänger entkoppelt stattfindet. Das hat den Vorteil, dass Sender und Empfänger nicht gleichzeitig online zu sein brauchen. Zudem kann der Broker beliebig komplexe Verbindungsstrukturen aufbauen. Das reicht von Punkt-zu-Punkt-Connections bis hin zu komplizierten Sternstrukturen. Abbildung 1 verdeutlicht das Zusammenwirken von Producer, Broker, Consumer und Topics.

Abbildung 1: Producer, Broker und Consumer bilden die Struktur, auf der die Nachrichten in Topics gegliedert entlanglaufen.

Abbildung 1: Producer, Broker und Consumer bilden die Struktur, auf der die Nachrichten in Topics gegliedert entlanglaufen.

Topics gliedern sich in MQTT in eine Baumstruktur, wobei Slashes die einzelnen Bereiche in den Topics trennen, beispielsweise Gebäude/Etage/Raum/Sensor/Temperatur. Innerhalb der Topics dürfen Sie mit Wildcards arbeiten. Der Plus-Operator erfasst dabei immer nur eine Stufe der Hierarchie. Ein Hash-Zeichen dagegen beinhaltet beliebig viele Stufen, steht aber zwingend immer am Ende. Möchten Sie im Beispiel etwa die Werte aller Temperatursensoren im Gebäude auslesen, nutzen Sie den folgenden Topic:

Gebäude/+/+/Sensor/Temperatur

MQTT-Client-Bibliotheken gibt es für die unterschiedlichsten Plattformen, unter anderem auch für den Arduino und den ESP8266. Des Weiteren unterstützen eine große Anzahl von Programmiersprachen das Protokoll, darunter C/C++, C#, Go, Java, Javascript, Lua, PHP, Objective-C und Ruby. Um richtig tief in die Thematik einzusteigen, empfiehlt sich ein Blick auf die Homepage des Projekts [1].

Software installieren

Als Basis für Experimente mit MQTT auf dem RasPi bietet sich Raspbian “Stretch” Lite an. Sie laden es wie gewohnt von der Download-Seite [2] herunter, entpacken das Image und schreiben das System auf eine SD-Karte (Listing 1). Achten Sie darauf, das Ziel des Kommandos in Zeile 2 so anzupassen, dass es auf die SD-Karte schreibt. Mit dem so vorbereiteten Medium booten Sie jetzt den RasPi und bringen dann das Betriebssystem auf den aktuellen Stand (Listing 2, Zeile 1).

Listing 1

 

$ unzip 2017-11-29-raspbian-stretch-lite.zip
$ sudo dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdf

Listing 2

 

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install mosquitto mosquitto-clients

Um mit MQTT zu arbeiten, benötigen Sie eine Implementation des Protokolls. Im Beispiel fiel die Wahl auf Mosquitto. Die Software stellt alle Komponenten bereit, die Sie benötigen: Broker, Producer und Consumer.

Am simpelsten installieren Sie Mosquitto direkt aus den Raspbian-Repositories (Listing 2, zweite Zeile). Die entsprechenden Pakete sind etwas veraltet, funktionieren aber tadellos und genügen für das Ausprobieren aller folgenden Beispiele. Wie sie stattdessen die aktuellste Mosquitto-Version aus dem Repository der Entwickler einrichten, beschreibt der Kasten “Topaktuell”. Es kann aber sein, dass diese Version nicht optimal mit Raspbian zusammenspielt.

Topaktuell

Brauchen Sie aus irgendeinem Grund die aktuelle Version von Mosquitto, binden Sie zuerst mit den Kommandos aus Listing 3 das entsprechende Repository ins System ein. Dann rufen Sie zur Installation die in Listing 2 gezeigten Kommandos auf.

Listing 3

 

$ wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
$ sudo apt-key add mosquitto-repo.gpg.key
$ rm mosquitto-repo.gpg.key
$ cd /etc/apt/sources.list.d/
$ sudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.list
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland