MQTT ist ein leichtgewichtiges Benachrichtigungsprotokoll, welches mit Hilfe eines Python Modules in eigenen Projekten genutzt werden kann. Anhand von zwei Beispiel wird kurz die Verwendung und die Funktionsweise vorgestellt.
Es wird davon ausgegangen, dass ein MQTT Broker installiert ist und gestartet wurde. Ein Beispiel für die Installation eines MQTT Broker kann dem Artikel "Mosquitto als MQTT Broker" entnommen werden.
Bevor begonnen wird muss das benötigte Python Modul paho-mqtt
mit dem folgenden Befehl zunächst installiert werden.
Für erste Tests empfiehlt es sich eine lokale Python-Umgebung wie zum Beispiel mit virtualenv oder dem virtualenvwrapper zu benutzen.
$ pip install paho-mqtt
Das folgenden Beispiel zeigt einen Sensor, welcher über das Topic test/temperature
den Wert test
bekannt gibt.
#!/usr/bin/env python
import time
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client = mqtt.Client()
client.on_connect = on_connect
client.connect("localhost", 1883, 60)
client.loop_start()
while True:
time.sleep(2)
client.publish("test/temperature", "test")
Im folgenden Beispiel ist ein Subscriber dargestellt, der alle Nachrichten im Topic test/
erhält.
#!/usr/bin/env python
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client.subscribe("test/#")
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.loop_forever()
Beide Beispiele orientieren sich an Beispielen aus der offiziellen Dokumentation und lassen sich über sensor.py und subscriber.py herunterladen.
Der Sensor lässt sich mit folgendem Befehl starten und sendet anschließend alle 2 Sekunden einen Wert an den Broker.
$ python sensor.py
Connected with result code 0
Der Subscriber lässt sich mit folgendem Befehl starten und sollte alle 2 Sekunden den Wert vom Broker erhalten.
$ python subscriber.py
Connected with result code 0
test/temperature b'test'
test/temperature b'test'
Mit Hilfe der Tastenkombination Strg. + C können beide Prozesse abgebrochen werden.