Mit MQTT Nachrichten über das Netzwerk austauschen

© Phartisan, 123RF

Auf vielen Kanälen

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.

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

Um den Mosquitto-Server zu starten, zu stoppen und sich den Status anzeigen zu lassen, verwenden Sie die Kommandos aus Listing 4.

Listing 4

 

$ sudo service mosquitto status
$ sudo service mosquitto stop
$ sudo service mosquitto start

In der Praxis

Nach dem Einrichten des Mosquitto-Servers auf dem RasPi nehmen Sie einen ersten Funktionstest vor. Dazu benötigen Sie drei offene Terminals auf dem Mini-Rechner. Diese dürfen Sie auch remote über die Secure Shell erstellen. In zwei der Terminals starten Sie dann je einen Subscriber, der sich für Nachrichten für den Topic raspi interessiert:

$ mosquitto_sub -h localhost -v -t raspi

Im dritten Terminal starten Sie einen Publisher, der unter ebendiesem Topic eine Nachricht sendet:

$ mosquitto_pub -h localhost -t raspi -m "Raspi talks MQTT!"

Unmittelbar nach dem Senden der Nachricht erscheint sie in den zwei Terminals mit den Subscribern (Abbildung 2). Das zeigt, wie einfach sich via MQTT Nachrichten innerhalb eines Systems übermitteln lassen.

Abbildung 2: Die Nachrichten eines MQTT-Senders lassen sich mit mehr als einem Empfänger auswerten.

Im nächsten Schritt geht es nun darum, Clients auf anderen Systemen einzubinden. Als einfacher und zum Testen sehr nützlicher Client bietet sich die MQTT-Client-App für Chrome [3] an, die Sie aus dem Chrome Webstore herunterladen [4].

Mit der App verbinden Sie sich nun auf den RasPi und hängen sich an den Topic raspi an. Abbildung 3 zeigt, wie Sie einen neuen Client erstellen. Als IP-Adresse tragen Sie hier jene des Mini-PCs in Ihrem LAN ein.

Abbildung 3: Mittels einer App für Chrome erstellen Sie einen neuen MQTT-Client, der anschließend die Daten vom Raspberry Pi ausliest oder an diesen sendet.

Sobald Sie den zusätzlichen Client erstellt haben, vermag er Nachrichten unter dem Topic raspi zu senden und zu lesen (Abbildung 4). So steht Ihnen in Form der App eine gute Möglichkeit zur Verfügung, eigene MQTT-Projekte zu testen.

Abbildung 4: Mit dem neu aufgesetzten Client verfolgen Sie die Kommunikation zwischen den einzelnen Endpunkten, die via MQTT Nachrichten austauschen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

10/2019
Raspberry Pi 4B

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Sonnige Zeiten

    UV-Strahlung ist für das menschliche Auge unsichtbar, was sie umso gefährlicher macht. Die Höhe der tatsächlichen Belastung verrät Ihnen das Selbstbauprojekt UV-Sensor.

  • Gut verpackt

    Für das Ansteuern kleiner Displays gibt es keine Programme von der Stange. Mit Python und einer Pygame-Bibliothek erstellen Sie trotzdem im Handumdrehen Anwendungen.

  • Macro-Mini-Micro-Bit

    Was dem Raspberry Pi für die Computerwelt gelungen ist, versucht der BBC Micro:bit für Mikrocontroller zu wiederholen. Das für Schüler entwickelte Kit hilft beim Einstieg in die hardwarenahe Programmierung.

  • Vorhang auf

    Mit dem modernen Video-Codec HEVC (H.265) erstellte Filme spielen bisherige RasPi-Modelle oft nur ruckelnd ab. Wir testen, ob der neue Raspberry Pi 4B das besser kann.

  • Überraschung!

    Eine optimierte Architektur und mehr RAM beschleunigen den RasPi 4B deutlich. Wir prüfen, wie gut sich der Neuling als Desktop-Rechner schlägt.

  • Durchgestartet

    Ein Stresstest zeigt, wie sich der neue Raspberry Pi 4 Modell B gegenüber den älteren Modellen abhebt.

  • Vierte Generation

    Eine schnellere CPU, USB 3.0 und Gigabit-Ethernet sind nur die Highlights des Raspberry Pi 4B: Das Board bringt viele weitere Neuerungen mit.

  • Tiefenmesser

    Um die Pumpe in einem Brunnenschacht möglichst genau zu positionieren, brauchen Sie dessen Tiefe. Die ermitteln Sie mithilfe eines präzisen Messgeräts aus einem Luftdrucksensor und einem Mikrocontroller.

  • Faktencheck

    Das via DVB-T2 ausgestrahlte Digital-TV liefert Bilder in HD-Qualität. Der dabei eingesetzte H.265-Standard überfordert allerdings kleine Mini-Rechner wie den Raspberry Pi – oder geht es doch?

  • Zugriff von außen

    React Native erlaubt es, Apps mit wenigen Zeilen Code zu programmieren. Mit einem entsprechenden Server sprechen Sie so den RasPi vom Smartphone aus an.