Das Message Queuing Telemetry Transport - Protokoll (MQTT) ist ein Netzwerkprotokoll für eine Maschine-zu-Maschine-Kommunikation (M2M). Es dient der Übertragung von Messwerten von Sensoren z.B. über WLAN. MQTT-Messages werden vom Sensor an einen sog. Broker unter Angabe eines "topics" gesendet. Topic ist eine hierarchisch abgestufte Adresse ähnlich der Verzeichnisstruktur einer Festplatte (z. B. "Garten/Temperatur"). Der Broker verteilt die Sendung an alle Dienste, die sich bei ihm als Empfänger für dieses Topic registriert haben (Wikipedia MQTT-Protokoll). Sensoren (Sender von Daten) registrieren sich beim Broker als "publish", Empfänger (Auswertesoftware) als "subscribe"-Clients.
Ein Broker unter Linux bzw. Raspberry Pi ist mosquitto. Im Folgenden werden Installation und Grundfunktionalität beschrieben. Die Installation von mosquitto und dessen Python-Erweiterung paho-mqtt:
sudo apt-get install mosquitto mosquitto-clients
sudo pip-install paho-mqtt
Um den Zugriff ohne Kennung und Passwort zu ermöglichen, muss die Konfiguration von mosquitto angepasst werden. Tut man das nicht, erhält man die Meldung “Connection refused” beim anonymen Verbinden mit dem Broker.
Im Verzeichnis /etc/mosquitto befindet sich die Datei mosquitto.conf. Diese wiederum schaut in conf.d-Verzeichnis nach *.conf-Dateien. Dort muss eine neue Datei erzeugt werden:
sudo pico /etc/mosquitto/conf.d/anonymer_zugriff_erlauben.conf
Die Datei kann auch anders heißen, sie muss aber auf ".conf” enden. Sie sollte die Zeile
allow_anonymous true
enthalten. So kann jeder, der zum lokalen Netz Zugang hat über mosquitto messages senden und empfangen.
Betrieb
Zuerst muss ein Betreff, ein sog. "Topic" erzeugt werden, unter dem die Clients Ihre Nachrichten zum Broker schicken oder von ihm verteilt bekommen können. Ein Beispiel mit dem Topic "hello/world". Das Schreiben eines Topics als Betreff für den Broker erfolgt über den Subscribe-Befehl:
mosquitto_sub -t hello/world
Der Befehlt registriert den Client als Empfänger für Nachrichten an "hello/world". Ab jetzt gibt es einen “hello/world”-Betreff im Broker und alle Clients die dort unter dem gleichen Betreff kommunizieren, können an diesen Broker Nachrichten senden bzw. erhalten von ihm alle Nachrichten quasi als Push-Service. Der Mosquitto-Broker wartet auf Nachrichten an hello/world. Sobald welche eingehen sendet er sie an alle Clients, die sich per subscribe an "hello/world" angemeldet haben.
Senden einer Nachricht (Publish). Der Nachricht wird das Topic mitgegeben, so weiß der Broker wohin damit:
mosquitto_pub -t hello/world -m "Hallo Welt"
Der Schalter -t steht für topic, -m für message
Man sieht im Hintergrundfenster die empfangene Nachricht, welche vom Client (im Vordergrund) gesendet wurde
diese zwei Befehle sind im mosquitto-Paket dabei. Es gibt auch unter Windows gute MQTT-Clients. die ebenfalls senden und empfangen können. Ich arbeite gerne mit MQTT.fx. Zuerst muss sich MQTT.fx am Broker anmelden
danach kann sich MQTT.fx als Empfänger (subscribe) beim Broker registrieren:
auf dem Raspberry über Putty angemeldet habe ich die Message "Grüße" an das topic "hello/world" gesendet (gepulished). Diese Nachricht wird vom Broker (mosquitto) an alle per subscribe für dieses topic registrierten Clients - in diesem Fall MQTT.fx - verteilt. Wenn mehrere durch Leerzeichen getrennte Informationen gesendet werden sollen, sollte die Message in Anführungszeichen stehen:
mosquitto_pub -t hallo/welt -m "Grüße Michael"
Es gibt auch freie, im Internet verfügbare MQTT-Brokerdienste. "test.mosquitto.org" habe ich ausprobiert. Funktioniert einwandfrei mit dem Beispiel-Topic "migele" und der Message "Hallo Michael"!
mosquitto_sub -h test.mosquitto.org -t migele
-h steht für Host - also für den MQTT-Broker. Wenn man -h nicht verwendet wird "localhost" verwendet. Wie oben.