MQTT mit Python nutzen

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.

Verwandte Artikel