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

08/2019
Smarte Hacks

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Immer der Reihe nach

    Mit einer einfachen Schaltung testen Sie Bausteine, die über den SPI-Bus miteinander kommunizieren.

  • Einzigartig

    Eine MAC-Adresse ermöglicht die Kommunikation im Netzwerk. Der 24AA02E48 liefert sie für Setups, die aus grundlegenden Komponenten bestehen.

  • Steinkuchen

    Der Raspberry Pi hat viele Fans, doch nicht ohne Grund sehnen sich viele Anwender nach einem RasPi 4. Der Rock Pi 4 übertrumpft den RasPi 3 in Sachen Leistung um Längen und schlägt sich auch in der Praxis gut.

  • Kerngeschäft

    Der Einstieg in die Welt der Mikrocontroller fällt nicht ganz leicht. Mit dem Nucleo F401RE haben Sie jedoch ein Entwicklerboard samt abgestimmter Entwicklungsumgebung an der Hand.

  • Himbeer-Geräte

    Mit Maus und Tastatur im weiß-roten Raspberry-Look macht die Raspberry Pi Foundation das eigene Angebot an Peripheriegeräten für den Mini-Rechner komplett.

  • Unter Kontrolle

    PiCockpit ist eine speziell auf den RasPi zugeschnittene Online-Monitoring-Lösung. Wir werfen einen ersten Blick auf den brandneuen und in Ausbau befindlichen kostenlosen Dienst.

  • Ins rechte Licht gesetzt

    Selbst ohne eigenen Garten holen Sie sich Pflanzen mithilfe von LEDs in jeden Raum und sehen ihnen mit dem RasPi beim Wachsen zu.

  • Helligkeit nach Maß

    Wer bei wechselnden Lichtverhältnissen nicht ständig die Beleuchtung manuell nachregeln möchte, der spannt dafür einen PiXtend ein.

  • Geschrumpft

    Kleine Bildschirme gibt es zwar viele, aber der Support von Raspbian ist überraschend schlecht. Mit ein paar Tricks erzielen Sie trotzdem ein optimales Ergebnis.

  • Brüllwürfel

    Kompakt-Stereoanlagen mit CD-Spieler und Kassettendeck sind inzwischen oft ein Fall für den Recyclinghof – oder für die digitale Wiederbelebung mit einem RasPi und etwas Geschick.