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

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.