Implementierung von Python Client mit Paho MQTT

Text geknüpft

Einleitung

Python ist eine der am weitesten verbreiteten Programmiersprachen heute, unterstützt in allen wichtigen Betriebssysteme. Für eingeschränkte Umgebungen,MicroPythonbietet ein leichtes Subset für Low-End-Prozessoren.

Dieser Führer führt Sie durch den Schritt für Schritt Prozess des Aufbaus einerMQTT ClientVerwendung derEclipse Paho MQTT Python Library.

Die Paho Bibliothek ist eineopen-source, verfügbarer MQTT-ClientUmsetzung der Eclipse Stiftung.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden:

  • Python- Stellen Sie sicher, dass Python 3.6 oder später auf Ihrem System installiert ist, oder laden Sie die notwendige Version von der offiziellen Python Website herunter.
  • Paho MQ Bibliothek

pip install paho-mqtt==2.1.0

MQT Verbindung

Dieser Abschnitt umfasst verschiedene Möglichkeiten, eine Verbindung zu einemMQTT Brokermit Python. Stellen Sie sicher, dass Ihr Broker die gewünschte Verbindungsmethode unterstützt (TCP, TLS, WebSocket, etc.) und Sie haben die richtigen Verbindungsparameter:

  • Angemeldet bleiben
  • Hafen
  • Benutzername/Passwort(falls erforderlich)
  • CA Zertifikat(für TLS-Verbindungen)

Basis TCP Verbindung

BROKER_HOST = "broker-url"
BROKER_PORT = 1883
Client = mqtt.Client(mqt.CallbackAPIVersion.VERSION2, client_id="testclient", Protokoll=mqt. MQTTv311)
client.connect(BROKER_HOST, BROKER_PORT)

Verbindung mit Authentication

Um mit einem MQTT Broker zu verbinden, der Authentication benötigt, setzen Sie Benutzername & Passwort ein.

client.username_pw_set("username", "password")


Über TLS/SSL verbinden

Sichere Verbindung mitTLS/SSL:

client.tls_set(cert_reqs=ssl.CERT_REQUIRED,
tls_version=sl. PROTOKOLL_TLS)


Verbindung über WebSocket

Um WebSocket anstelle von TCP zu verbinden:

Client = mqtt.Client(mqt.CallbackAPIVersion.VERSION2,
client_id=CLIENTID, Protocol=PROTOCOL,
transport="websockets"#

MQTT Publizieren

Daten an ein Thema senden:

client.publish(topic="test/topic",
Nutzlast = json.dumps({"Temperatur":50.5, "humidity":34}),
qos=1, keep=False)

MQT Anmeldung

Um Nachrichten zu erhalten, abonnieren Sie einen Themenfilter. Der Broker wird weiter passende Nachrichten an Ihren Kunden.

client.subscribe(topic="test/+", qos=1)


Um den Empfang von Nachrichten zu stoppen, kann der Client mit:

client.unsubscribe(topic="test/+")

MQTT Disconnect

Trennen Sie immer sauber, um Ressourcenlecks zu vermeiden und sicherzustellen, richtig Session Handling auf dem Broker:

Client.disconnect()
Client.loop_stop()

Best Practices

1. Kundenidentifikationsstrategie

Zuweisen Sie jedem Gerät eindeutige Client-IDs zur genauen Identifizierung. In private Setups, verschiedene IDs an einzelne Kunden; in gemeinsamer Umgebungen, fügen Sie jedem Client-ID einen zufälligen String an, um zu erhalten Einzigartigkeit.

2. Datenarchitektur Design

Strategisch planen Sie Ihre Datenstruktur im Voraus. Ob das Handling Text-, JSON-Formate oder numerische Daten sorgen dafür, dass das Design auf die spezifischen Anforderungen Ihrer Anwendung erfüllen.

3. Robuste Fehlerbehandlung

Implementierung eines starken FehlermanagementsMQTVerbindungsausfälle, Probleme des Abonnements und Fehler des Nachrichtenveröffentlichens effektiv.

4. Sicherung von Anmeldeinformationen

Schutz sensibler Informationen wie Benutzernamen, Passwörter und Client-IDs indem sie sie nicht in Ihrem Quellcode festcodieren. Verwenden Sie Umgebungsvariablen oder sichere Konfiguration Dateien statt.

5. Regelmäßige Prüfung und Überwachung

Kontinuierlich testen MQTT Kommunikation und Überwachung von Clientmetriken wie Verbindungsstatus, Nachrichtendurchsatz und Fehlerraten, um Probleme schnell zu identifizieren und zu beheben.

6. Optimierung des Sitzungsmanagements

Wählen Sie zwischen sauber undDas ist ein Tag.(`clean: true` oder `clean: false`) basierend auf Ihrer Notwendigkeit, Abonnements und gelöschte Nachrichten über Kundenverbindungen.

7. Reconnect auf Disconnect

Code hinzufügen, um zu versuchen, die Verbindung zumMQTT Brokerwenn es unerwartete Trennung. Dies wird sicherstellen, dass Ihr Kunde verbunden bleibt und nicht alle Daten verlieren.

Beispiel MQTTv311 Client

Einfuhr
Vorzeit
Import json
Im Namen der
Import paho.mqt.client als mqtt
# Debug-Level-Protokolle für MQTT-Aktivität aktivieren (Verbindung, Veröffentlichen, etc.)
logging.basicConfig(level=logging.DEBUG)
--- MQTT Broker Konfiguration ---
BROKER_HOST = "mqtt-broker-URL" # Ersetzen mit ernstem Broker Host/IP
BROKER_PORT = 1883 # Standard-MQTT-Port (verwenden Sie 8883, wenn TLS aktiviert ist)
TRANSPORT = "tcp" # 'tcp' oder 'websockets'
Authentication = True # Benutzername/Passwort-Auth
USERNAME = "Username"
PASSWORD = "Passwort"
Verschlüsselung = Falsch Verschlüsselung
CLIENTID = "testclient4" # Einzigartige Kennung für diesen MQTT-Client
PROTOKOLL = mqtt.MQTTv311 #Adresse Sie MQTT Version 3.1.1
# --- Callback: Auf Gehirn Verbindung zum Broker ---
def on_connect(client, userdata, flags, default_code, properties=None):
client.subscribe("test/topic") # Thema anfingen
# --- Callback: Wenn eine Nachricht empfangen wird ---
def on_message(client, userdata, msg):
Reisepass
# --- Callback: Wenn der Client vom Broker abschaltet ---
def on_disconnect(client, userdata, default_code, properties=None):
Client.loop_stop() # Stoppen Sie die Hintergrundfadenschleife
# --- MQTT erstellen Client mit korrekter Protokoll- und API-Version
Client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
Client_id=CLIENTID,
Protokoll=PROTOCOL,
Verkehr=TRANSPORT
)
Client.enable_logger() # Optional: Log MQTT-Veranstaltungen zur Konsole
# --- Authentication Setup --
Wenn Authentication:
client.username_pw_set(USERNAME, PASSWORD)
# --- TLS Encryption Setup (nur wenn aktiviert) --
Wenn Verschlüsselung:
Client. tls_set(
cert_reqs=sl.CERT_REQUIRED,
tls_version=ssl.PROTOCOL_TLS
)
# --- Callback Handlers ---
client.on_connect = on_connect
client.on_message = on_message
client.on_disconnect = on_disconnect
-- Verbinden Sie Sie mit dem MQTT Broker ---
client.connect(BROKER_HOST, BROKER_PORT)
Client.loop_start() # Starten Sie einen Hintergrundfaden für die Netzwerkschleife
--- Warten Sie etwas, um die Verbindung und das Abonnement vollständig zu behandeln --
Zeit.sleep(2)
# --- eine Testnachricht zum Was ist los?
TOPIC = "test/topic"
Nutzlast = json.dumps({"Temperatur": 50.5, "humidity": 34})
client.publish(topic=TOPIC, payload=payload, qos=1, keep=False)
-- Geben Sie Zeit für die Veröffentlichung und alle eingehenden Nachrichten --
Zeit (3)
--- Trennen vom Broker ---
Client.disconnect()

Beispiel MQTTv5 Client

Einfuhr
Vorzeit
Import json
Im Namen der
Import paho.mqt.client als mqtt
von paho.mqt.properties import Eigenschaften
aus paho.mqt.packettypes import PacketTypes
Debug-Level-Logging aktivieren für MQTT-Aktivität
logging.basicConfig(level=logging.DEBUG)
--- MQTT Broker Konfiguration ---
BROKER_HOST = "mqtt-broker-url" # Ersetzen mit ernsthafter Brokeradresse
BROKER_PORT = 1883 # Standardport (Verwendung 8883 für TLS)
TRANSPORT = "tcp" # Optionen: 'tcp' oder 'websockets'
Authentication = True # Benutzername/Passwort-Authentifizierung aktivieren
USERNAME = "Username"
PASSWORD = "Passwort"
Verschlüsselung = Falsch Tru zu verwenden TLS
CLIENTID = "testclient5" # Einzigartige Client-ID
PROTOKOLL = mqtt.MQTTv5 # dich MQTT v5 Protokoll
# --- Callback: On Connect ---
def on_connect(client, userdata, flags, default_code, properties=None):
# Beschreiben Sie ein Über uns
client.subscribe("test/topic")
# --- Callback: Auf Nachricht ---
def on_message(client, userdata, msg):
# In den Warenkorb News und News
Reisepass
# --- Callback: On Disconnect ---
def on_disconnect(client, userdata, default_code, properties=None):
# Stopps Sie die Schleife beim Trennen
Client.loop_stop()
# --- MQTT Client erstellen ---
Client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
Client_id=CLIENTID,
Protokoll=PROTOCOL,
Verkehr=TRANSPORT
)
Client.enable_logger() # Internes Protokoll aktivieren (Hilfe debug)
# -- Authentication --
Wenn Authentication:
client.username_pw_set(USERNAME, PASSWORD)
# --- TLS/SSL (falls aktiviert) ---
Wenn Verschlüsselung:
Client. tls_set(
cert_reqs=sl.CERT_REQUIRED,
tls_version=ssl.PROTOCOL_TLS
)
# --- Callbacks zuweisen ---
client.on_connect = on_connect
client.on_message = on_message
client.on_disconnect = on_disconnect
# --- MQTT v5 Connect Properties ---
connect_props = Eigenschaften(PacketTypes.CONNECT)
connect_props.SessionExpiryInterval = 60 # Sitzung für 60er Jahre nach dem Abschalten halten
# --- Verbinden Sie mit dem Broker ---
Client.connect(
BROKER_HOST,
BROKER_PORT,
clean_start=mqtt.MQTT_CLEAN_START_FIRST_ONLY,
Eigenschaften=connect_props
)
Client.loop_start() # Starten Sie die Netzwerkschleife in einem separaten Thread
--- Warten Sie, umgehende, dass das Abonnement abgeschlossen ist ---
Zeit.sleep(2)
# --- MQTT v5 Eigenschaften veröffentlichen ---
pub_props = Eigenschaften(PacketTypes.PUBLISH)
pub_props.MessageExpiryInterval = 30 # Ausführende Nachricht, wenn nicht in 30s geliefert
--- eine Testnachrichtricht veröffentlichen ---
Nutzlast = json.dumps({"Temperatur": 50.5, "humidity": 34})
Client.publish(
Thema="test/topisch"
payload=payload,
qos=1,
zurückhalten=False,
Eigenschaften=publish_props
)
--- Warten Sie, umgerichtet, dass Nachricht senden / wird ---
Zeit (3)
# --- Trennen von Broker ---
Client.disconnect()

Fehlerbehebung

  • WennMQTT BrokerURL ist falsch oder nicht erreichbar, das Programm kann eine Verbindung Ausnahme werfen.
  • Wenn Sie TLS verwenden, stellen Sie sicher, Encryption=True und Port zu 8883.

Power IoT mit Python!

Führen Sie Smarter Workloads auf
Unser MQTT Broker

Verbinden Sie einfach Ihre Python MQTT-Client-, Streamline-Messaging- und Scale IoT-Projekte
mit einem zuverlässigen, leistungsstarken Broker.