Huhu, heute wollen wir endlich mal den MQTT-Broker wirklich benutzen und ein paar Nachrichten hin und her senden, sowie natürlich auch empfangen. In den vorherigen Blogeinträgen konnten wir uns das Basiswissen (Das Protokoll MQTT erklärt und vorgestellt #Part1) und das erweiterte Wissen (MQTT für Fortgeschrittene – QoS & letzter Wille) aneignen und heute wollen wir das in der Praxis mal anwenden. Ich für meinen Teil nehme für solche Geschichten immer ganz gerne Python, da es einfach ist zu installieren und zwar auf jeder Umgebung und egal wo ich mein Script geschrieben habe, es klappt auf jedem Betriebssystem.
Python unter Windows installieren
Ich empfehle euch unter jeglichem Betriebssystem die Version 3 zu installieren, obwohl Version 2 auch noch überall angeboten wird, aber mit V3 seit ihr auf dem richtigen Weg. Ladet euch auf der Downloadpage von Python selber das passende Paket herunter. In den meisten Fällen einfach eine Stable Version und gut ist. ( Zum Download )
Wie man jetzt die Installation durchführt, lasse ich jetzt mal aus. Ich sage nur “weiter, weiter, fertig“.
Python unter Linux installieren ( z.B. auch auf dem Raspberry Pi )
Unter Linux möchte ich jetzt auch nicht in die Tiefe gehen, ein wenig Erfahrung sollte man schon haben. Also hier installieren wir uns direkt python3 als fertiges Paket aus den Quellen. ( Gültig für Debian und Raspberry Pi )
sudo apt-get install python3
Jetzt benötigen wir noch eine Bibliothek damit wir auch im Python ein wenig MQTT sprechen können. Wir besorgen uns die Bibliothek von paho und das Paket heißt “paho-mqtt”.
Paho-MQTT unter Windows installieren
Ihr öffnet ein “CMD” Fenster –> In der Suche kann man einfach CMD eintippen und dann ENTER. Das typische Konsolenfenster öffnet sich und wir können wenn Ihr wollt noch die Python version überprüfen in dem Ihr einfach mal python
eintippt und ENTER drückt. Wenn Ihr die Pythonzeile wieder verlassen möchtet, drückt Ihr einfach STRG + Z & ENTER. Also installieren wir das Paket mit
pip3 install paho-mqtt
Paho-MQTT unter Linux installieren
Es ist einfach zu einfach. Unter Linux ist es genauso einfach wie unter Windows, in die Kommandozeile tragt Ihr folgendes ein und bestätigt.
pip3 install paho-mqtt
Kommen wir nun zum wirklich wichtigen Teil dieser Anleitung, zum Script selber. Unser Ziel in diesem Tutorial ist es eine einfache Nachricht zum Broker zu senden und diese mit einem anderen Script vom Broker zu empfangen.
Client –> Broker | Publish | Nachricht senden
#!/usr/bin/env python import paho.mqtt.client as mqtt client = mqtt.Client() client.connect("rpicloud.de", 1883, 60) client.publish("test/temperatur", "25 C") client.disconnect()
mqtt_publish.py
Also was macht das obrige Script nun? Nun ja, zunächst wird die Bibliothek paho.mqtt.client als mqtt eingebunden. Mit den nächsten beiden Zeilen wird verfügt, dass eine Verbindung mit dem rpicloud.de Broker auf dem Port 1883 aufgebaut werden soll. Die 60 bedeutet hier, das wir eine Timeout von 60 Sekunden haben. Die nächste Zeile ist eigentlich die wichtigste. Hier geben wir dem Script mit das wir in dem Topic “test/temperatur” “25 C” publishen sollen. Diese beiden Werte können natürlich nach belieben angepasst werden. Zu guter letzt wird die Verbindung wieder geschlossen und das Script beendet sich.
Broker –> Client | Subscribe | Nachrichten empfangen
#!/usr/bin/env python import paho.mqtt.client as mqtt def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) client = mqtt.Client() client.on_message = on_message client.connect("rpicloud.de", 1883, 60) client.subscribe("test/temperatur") client.loop_forever()
mqtt_subscribe.py
Hier wird auch zunächst auch die Bibliothek eingebunden und die Verbindung mit “connect” zur rpicloud.de aufgebaut. Eine Funktion mit dem Namen on_message wird definiert, damit die Konsole uns auch was anzeigt wenn wir eine Nachricht empfangen. Diese Funktion wird immer dann getriggert wenn eine Nachricht empfangen wird. Es wird uns in diesem Fall zunächst das Topic angezeigt und mit einem Leerzeichen dazwischen dann die Nachricht selber. Mit der Befehl “subscribe” geben wir das Topic vor, welches wir abbonieren möchten. Wir könnten hier auch ein Wildcard setzen. ( Wildcards ) Die letzte Zeile besagt das der Client in einer Schleife laufen soll und jedes mal wenn jetzt eine Nachricht vom Broker zu uns gesendet wird, wird die Funktion on_message aufgerufen.
Speichert euch beide Dateien einfach ab.
Startet das Subscribe Script mit python mqtt_subscribe.py
und startet anschließend das Publish Script mit ( natürlich gerne auch mehrfach )python mqtt_publish.py
Ihr solltet in dem Fenster vom Subscribe nun sehen das Ihr Nachrichten erhaltet. Jetzt sind das natürlich nur die einfachsten Scripte und was es tut ist auch nur sehr marginal. Im nächsten Tutorial gehen wir auf einen konkrekten Use-Case ein.
23. Januar 2021 um 17:21 Uhr
Vielen Dank für den nützlichen Artikel.
Bei meinem ersten Gehversuch mit mqtt_subscribe.py ist es mir so ergangen wie offensichtlich zuvor auch Herrn Zentgraf. Ich würde meinen Unmut allerdings etwas freundlicher formulieren. Als Python-Einsteiger ist man überfordert, wenn man das Skript startet und die folgende Meldung erscheint:
ImportError: No module named paho.mqtt.client
Ich konnte das Problem beheben, in dem ich in der ersten Zeile des Skripts explizit “python3” angegeben habe:
#!/usr/bin/env python3
Wenn man die Bibliothek mit “pip3” installiert und auf einem Standard-Linux-System Python2 voreingestellt ist (wenngleich auch Python3 installiert ist), dann läuft das Skript mit Python2, die Bibliothek ist aber nur für Python3 verfügbar.
Gibt es da eine elegantere Lösung?
28. April 2021 um 20:15 Uhr
$ python3 script.py
28. Dezember 2021 um 23:44 Uhr
Super Beitrag mit dem Hinweis auf python 3 hat das auf Anhieb funktioniert !
3. Januar 2022 um 19:23 Uhr
Vielen Dank für den Artikel. Ich habe ihn zur Grundlage für ein Programm genommen, das verschiedene Temperaturen in einer grafischen Oberfläche anzeigen soll. Da habe aber das Problem, dass client.loop_forever() den darauf folgenden Code nicht mehr ausführt.
Bei guizero ist es genau so, da wird der Code hinter app.display() nicht mehr ausgeführt. Wie ich es drehe und wende es geht immer eines: MQTT oder grafische Oberfläche. Hast Du dafür eine Lösung. Mein googlen war bisher nicht erfolgreich.
Danke
3. Januar 2022 um 19:58 Uhr
Hat sich erledigt, statt client.loop-forever() habe ich client.loop_start() genommen, jetzt läuft beides. Allerdings gibt’s mit MQTT noch Probleme.
21. Januar 2022 um 10:53 Uhr
Cool, danke, damit kann ich jetzt auch die Werte meines Sensors von Tasmota an Domoticz durchreichen, die nicht automatisch übermittelt werden.
Danke!
19. Februar 2022 um 17:06 Uhr
Sehr anschauliches Script. Vielen Dank.
Ich möchte gerne meine Zählerstände zum MQTT Broker übertragen.
Die Daten liegen auf einem Raspberry Pi im gleichen Netzwerk im Ordner /home/Zaehlerstände/. Die Daten werden dort im File Strom.txt gespeichert.
Wie muss die Zeile bei client.subscribe aussehen ?
Vielen Dank
mp24
18. August 2022 um 13:34 Uhr
Liebes Tagebuch,
heute ist der 18.08.2022 und wir haben schönes Wetter.
Die See war etwas rauh und das Lacken dabei sehr anstrengend, aber die Konsistenz dafür schwer ok
30. November 2022 um 12:05 Uhr
Super erklärt – Danke.
nur funktioniert bei mir das leider nicht:
ModuleNotFoundError: No module named ‘paho’
Ich habe das paho-mqtt auch mit
pip3 install paho-mqtt
installiert… Kann mir da jemand weiterhelfen ? Finde nichts im Internet.
Danke.
12. November 2023 um 03:06 Uhr
click