Was ist MQTT und wozu?
MQTT ist ein Nachrichtenprotokoll aus dem M2M (Maschine-to-Maschine) Umfeld, welches darauf ausgelegt ist mit geringen Ressourcen auszukommen und Nachrichten auch in langsamen und unzuverlässigen Netzwerken zu übertragen. Wenngleich auch Kleingeräte wie Sensoren mit MQTT arbeiten können sollen, können MQTT-Broker auch deutlich größer sein und Millionen von Nachrichten verarbeiten. Die offizielle Website ist unter mqtt.org zu finden.
MQTT Clients und Pythonmodule auf dem Raspberry installieren
Um MQTT auf dem Raspberry zu nutzen müssen der Mosquitto Broker, ein Client und ggf. noch Programmierbibliotheken installiert werden, namentlich:
- mosquitto: Der Broker
- mosquitto-client: Der Client
- python-mosquitto: Die Programmierbibliothek für Python
Die Installation kann mit der folgenden Kommandofolge in einem Zuge erfolgen.
- sudo apt-get install mosquitto mosquitto-clients python{,3}-mosquitto
Da der Mosquitto Broker während der Installation automatisch gestartet wurde, muss er anschließend zur Konfiguration gestoppt werden.
- sudo /etc/init.d/mosquitto stop
In der Konfiguration (/etc/mosquitto/mosquitto.conf) sollte wenigstens die IP auf der der Server lauschen soll angepasst werden, siehe:
- bind_address 192.168.10.2
Sind keine weiteren Anpassungen vorzunehmen (Benutzeraccounts, Zertifikate u.ä.) kann der Broker anschließend wieder gestartet werden:
sudo /etc/init.d/mosquitto start [ ok ] Starting Mosquitto message broker: mosquitto.
Der Mosquitto Broker steht damit zur Verfügung. An diesem können sich nun Clients für Topics anmelden oder/und Nachrichten zum Broker senden.
Beispielskripte für Python
Für ein einfaches Beispiel eines MQTT Nachrichtenversand/-empfang braucht allerdings kein eigener MQTT-Broker aufgesetzt werden. Hierfür steht der URL test.mosquitto.org zur Verfügung. Das erste Skript meldet den Client für den Empfang von Nachrichten für ein bestimmtes Topic an, das Zweite verschickt eine Nachricht an eben jenes Topic.
Dir originalen Skripte entstammen den unten angegebenen Links und sind hier der Einfachheit halber aufgeführt.
Bevor die Scripte ausgeführt werden können muss das Python-Modul paho-mqtt installiert werden.
- sudo pip install paho-mqtt
Anschließend ist zuerst das “Subscribtion Script” zu starten, welches letztlich in ein Endlosschleife fällt. Anschließend können mit dem Push Script Nachrichten geschickt werden. Wenn im Push-Script das Topic geändert wird (und NUR dort) so kommen die Nachrichten nicht mehr beim Client an, da die Subscription nicht mehr überein stimmt. Subscriptions können allerdings auch Platzhalter enthalten sein.
Subscribtion Script:
#!/usr/bin/python # -*- coding: utf-8 -*- import paho.mqtt.client as mqtt # The callback for when the client receives a CONNACK response from the server. def on_connect(client, userdata, rc): print("Connected with result code " + str(rc)) # Subscribing in on_connect() means that if we lose the connection and reconnect then subscriptions will be renewed. client.subscribe("hello/world") # The callback for when a PUBLISH message is received from the server. def on_message(client, userdata, msg): print("Topic: ", msg.topic + "\nMessage: " + str(msg.payload)) if __name__ == "__main__": client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message print("Now trying to connect...") client.connect("test.mosquitto.org", 1883, 60) # Blocking call that processes network traffic, dispatches callbacks and handles reconnecting. # Other loop*() functions are available that give a threaded interface and a manual interface. client.loop_forever()
Push Script:
#!/usr/bin/python # -*- coding: utf-8 -*- import paho.mqtt.client as mqtt mqttc = mqtt.Client("python_pub") mqttc.connect("test.mosquitto.org", 1883) mqttc.publish("hello/world2", "Hello, World2!") mqttc.publish("hello/world", "Hello, World!") mqttc.loop(2) # timeout = 2s
Im Falle dass beide Scripte erfolgreich ausgeführt werden konnten sollte sich eine Ausgabe wie auf dem folgenden Bild ergeben.

Damit steht die grundlegende Infrastuktur für eigene Anwendungen mit MQTT Nachrichtenversand.
Antworten
Du musst angemeldet sein, um einen Kommentar abzugeben.