Python ist heute eine am weitesten verbreitete Sprache und läuft auf den meisten Betriebssystemen. Micro Python hat wurde für Low-End-Prozessoren entwickelt. Diese Anleitung verdeutlicht den Schritt für Schritt-Prozess zum AufbauPython !Verwendung derEclipse Paho Bibliothek. Es bietet auch weitere Informationen über alle MQTT Handshakes und die Nachrichtentransaktionen, die zwischen dem MQTT-Client und demPython ausziehbar MQTT Broker. Die Paho-Bibliothek ist eine Open Source Client mit einer kostenlosen Lizenzierung Politik.
Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden:
pip install paho-mqtt==1.6.0
python -m venv myenv
Quelle myenv/bin/aktivieren # Unter Windows `myenv\Scripts\aktivieren `
Dieser Abschnitt hat Code-Snippets von verschiedenen Möglichkeiten, um mit dem Broker zu verbinden. Stellen Sie sicher, dass die MQTT Application unterstützt den Verbindungstyp, den Sie verwenden möchten. Auch erhalten die entsprechenden Verbindungsparameter derGehostet von Cloud MQTT Server(Adresse, Port, Benutzername/Passwort, CA-Zertifikat) oder jede andere lokal installierte Instanz.
MQT Über TCP
Verwenden Sie den folgenden Code, um den Client über TCP zu verbinden.
Definieren Sie den Macro ADDRESS mit MQTT Connection Parameter.
def on_connect(client, userdata, flags, rc):
Print('\n{} Connected'.format(client._client_id.decode()))
random_chars = ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
client_id = 'kristallmq_'+random_chars
Client = paho.mqtt.client.Client(client_id)
client.on_connect = on_connect
client.connect('public-mqtt-broker.bevywise.com', 1883)
Client.loop_start()
Client erstellen
def on_connect(client, Benutzerdaten, Flaggen, Grund Code,
Eigenschaften=None):
Druck('\n{} Mit Grundcode verbunden:
{}'.format(client._client_id.decode(), whyCode))
# Erstellen einer zufälligen Client-ID
random_chars = ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
client_id = 'kristallmq_' + random_chars
# Initialize MQTT Client mit MQTTv5
Client = mqt.Client(client_id, Protocol=paho.mqt.client. MQTTv5)
client.on_connect = on_connect
client.connect('public-mqtt-broker.bevywise.com', 1883)
MQTT über TLS / SSL
Der folgende Code hilft, sicher mit dem Broker zu verbinden über TLS. Definieren Sie den Macro ADDRESS mit MQTT-Verbindung Parameter.
# MQTT Verbindungsparameter
ADDRESS = 'public-mqtt-broker.bevywise.com' # Replace with your
Adresse des Maklers
PORT = 8883 # MQTT Server TLS port
CLIENT_ID = 'kristallmq_' + ''.join(random.choices(string.ascii_letters
+
string.digits, k=10))
# Rückruffunktion für MQTT-Verbindung
def on_connect(client, userdata, flags, rc):
Druck('\n{} Mit Ergebniscode verbunden:
{}'.format(client._client_id.decode(), mqtt.connack_string(rc)))
# Erstellen einer zufälligen Client-ID
client_id = 'kristallmq_' + ''.join(random.choices(string.ascii_letters
+
string.digits, k=10))
# Initialize MQTT Client
Client = mqtt.Client(client_id)client.on_connect = on_connect
# TLS-Verbindung aktivieren
Client.tls_set(
ca_certs=None, # Pfad zu Ihrer CA-Zertifikatdatei für Server
Überprüfung
certfile=None, # Pfad zu Ihrer Client-Zertifikat-Datei für gegenseitig
Authentifizierung (falls zutreffend)
keyfile=None, # Pfad zu Ihrer privaten Schlüsseldatei (falls zutreffend)
cert_reqs=sl.CERT_REQUIRED,
tls_version=sl. PROTOKOL_TLS,
Ciphers=None
)
# Verbindung zum Broker
client.connect (ADDRESS, PORT)
MQTT TLS Zertifikatund in der Verbindungsparameter zur Sicherung der MQTT-Verbindung. Setzen Sie TLS-Parameter vor dem Aufruf der MQTTClient_connect an den Client mit demOnline Cloud MQTT Serversicher über TLS.
# MQTT Verbindungsparameter
ADDRESS = 'public-mqtt-broker.bevywise.com' # Replace with your
Adresse des Maklers
PORT = 8883 # MQTT TLS port
CLIENT_ID = 'kristallmq_' + ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
# Rückruffunktion für MQTT-Verbindung
def on_connect(client, userdata, flags, rc):
Druck('\n{} Mit Ergebniscode verbunden:
{}'.format(client._client_id.decode(), mqtt.connack_string(rc)))
# Erstellen einer zufälligen Client-ID
client_id = 'kristallmq_' + ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
# Initialize MQTT Client
Client = mqtt.Client(client_id)
client.on_connect = on_connect
# TLS-Verbindung aktivieren ohne Serververifikation
client.tls_set(cert_reqs=ssl.CERT_NONE)
# Verbinden mit dem Middleware (Broker)
client.connect (ADDRESS, PORT)
Wenn die Messaging-Plattform (Broker) Serverzertifikat ausgestellt hat von Trusted CA, dann kann das Server-Zertifikat mit:
# MQTT Verbindungsparameter
ADDRESS = 'public-mqtt-broker.bevywise.com' # Replace with your
Adresse des Maklers
PORT = 8883 # Broker's TLS port
CLIENT_ID = 'kristallmq_' + ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
# Rückruffunktion für MQTT-Verbindung
def on_connect(client, userdata, flags, rc):
Druck('\n{} Mit Ergebniscode verbunden:
{}'.format(client._client_id.decode(), mqtt.connack_string(rc)))
# Erstellen einer zufälligen Client-ID
client_id = 'kristallmq_' + ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
# Initialize MQTT Client
Client = mqtt.Client(client_id)
client.on_connect = on_connect
# Pfad zur CA-Zertifikatdatei
ca_cert = '/path/to/your/ca_certificate.pem '
# TLS-Verbindung mit Serverzertifikatsverifikation aktivieren
client.tls_set(ca_certs=ca_cert, cert_reqs=ssl.CERT_REQUIRED)
# Verbindung zum Broker
client.connect (ADDRESS, PORT)
Hat der MQTT Server ein selbstsigniertes Serverzertifikat dann kann das Server-Zertifikat mit dem Root-Zertifikat aus der Broker:
Import random, string, paho.mqt.client, ssl
ssl.match_hostname = lambda cert, hostname: Stimmt.
def on_connect(client, userdata, flags, rc):
Print('\n{} Connected'.format(client._client_id.decode()))
random_chars = ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
client_id = 'kristallmq_'+random_chars
Client = paho.mqtt.client.Client(client_id)
root_cert_path = '/path/to/root.crt '
client.tls_set(ca_certs=root_cert_path,
cert_reqs=ssl.CERT_REQUIRED,tls_version=ssl.PROTOCOL_TLSv1_2,
Ciphers=None)
client.tls_insecure_set(True)
client.on_connect = on_connect
client.connect('public-mqtt-broker.bevywise.com', 8883)
Client.loop_start()
MQTT über WebSocket
Definieren Sie die Adresse des Brokers wie diese, um die Client über WebSocket.
# MQTT-Verbindungsparameter für WebSocket (ohne TLS)
ADDRESS_WS = 'ws://public-mqtt-broker.bevywise.com:8083/mqtt' # Ersetzen
mit der WebSocket Adresse Ihrer Messaging Middleware
CLIENT_ID = 'kristallmq_' + ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
# Rückruffunktion für MQTT-Verbindung
def on_connect(client, userdata, flags, rc):
Druck('\n{} Mit Ergebniscode verbunden:
{}'.format(client._client_id.decode(), mqtt.connack_string(rc)))
# Erstellen einer zufälligen Client-ID
client_id = 'kristallmq_' + ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
# MQTT-Client für WebSocket (ohne TLS) initialisieren
Client = mqtt.Client(client_id)
client.on_connect = on_connect
# Verbinden mit dem Server über WebSocket (ohne TLS)
client.connect (ADDRESS_WS)
MQTT über Secure WebSocket
Verwenden Sie den folgenden Code, um den Client über Secure zu verbinden WebSocket.
Set TLS Optionen wie in MQTT über TLS Abschnitt angegeben.
Definieren Sie den Macro ADDRESS mit Brokers Verbindung Parameter.
# Verbindungsparameter für WebSocket (mit TLS)
ADDRESS_WSS = 'wss://public-mqtt-broker.bevywise.com:8084/mqtt' #
Ersetzen Sie mit der sicheren WebSocket Adresse Ihres Brokers
CLIENT_ID = 'kristallmq_' + ''.join(random.choices(string.ascii_letters
+
string.digits, k=10))
# Rückruffunktion für MQTT-Verbindung
def on_connect(client, userdata, flags, rc):
Druck('\n{} Mit Ergebniscode verbunden:
{}'.format(client._client_id.decode(), mqtt.connack_string(rc)))
# Erstellen einer zufälligen Client-ID
client_id = 'kristallmq_' + ''.join(random.choices(string.ascii_letters
+
string.digits, k=10))
# MQTT Client für WebSocket initialisieren (mit TLS)
Client = mqtt.Client(client_id)
client.on_connect = on_connect
# Pfad zur CA-Zertifikatsdatei (falls Server-Zertifikatsprüfung)
ist
erforderlich
ca_cert = '/path/to/your/ca_certificate.pem '
# TLS-Verbindung für WebSocket aktivieren
client.tls_set(ca_certs=ca_cert, cert_reqs=ssl.CERT_REQUIRED)
# Verbinden Sie mit dem Nachrichten-Hub über WebSocket mit TLS
Client.connect (ADDRESS_WSS)
MQTT konfigurieren Authentifizierung
Um den Python MQTT Client zu verbinden, benötigen wir MQTT Username und MQTT Passwort für die Authentifizierung, Benutzername und Passwort zu den Verbindungsoptionen hinzufügen wie folgt:
# MQTT Anschlussparameter für TCP (ohne TLS)
ADDRESS_TCP = 'public-mqtt-broker.bevywise.com' # Replace with your
Broker TCP Adresse
PORT = 1883 # MQTT's TCP Port
USERNAME = 'your_mqt_username' # Ersetzen Sie mit Ihrem MQTT-Benutzernamen
PASSWORD = 'your_mqt_password' # Ersetzen Sie mit Ihrem MQTT-Passwort
CLIENT_ID = 'kristallmq_' + ''.join(random.choices(string.ascii_letters
+
string.digits, k=10))
# Rückruffunktion für MQTT-Verbindung
def on_connect(client, userdata, flags, rc):
Druck('\n{} Mit Ergebniscode verbunden:
{}'.format(client._client_id.decode(), mqtt.connack_string(rc)))
# Erstellen einer zufälligen Client-ID
client_id = 'kristallmq_' + ''.join(random.choices(string.ascii_letters
+
string.digits, k=10))
# MQTT-Client für TCP (ohne TLS) initialisieren
Client = mqtt.Client(client_id)
client.username_pw_set(username=USERNAME, passwort=PASSWORD)
client.on_connect = on_connect
# Verbinden Sie mit der Messaging-Plattform über TCP (ohne TLS) mit
Authentisierung
client.connect (ADDRESS_TCP, PORT)
Erweiterte Funktionen
Das letzte Testament einrichten
Konfigurieren derLetzter Wille und TestamentFunktion eine Nachricht angeben, die der Broker veröffentlichen wird, wenn der Client unerwartet trennt. Dies hilft, andere Abonnenten des abgeschalteten Clients zu informieren Status.
Verwenden Sie den folgenden Code, um Last Will in der Verbindung zu setzen Optionen:
random_chars = ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
client_id = 'kristallmq_'+random_chars
Client = paho.mqtt.client.Client(client_id)
client.will_set("willtopic", payload="Good bye CrystalMQ", qos=0,
Zurück zur Übersicht
client.connect('public-mqtt-broker.bevywise.com', 1883)
Adjusting Keep Alive
MQTT unterhält Client-Broker-Verbindungen mit einem sparsamer Mechanismus. Einstellen derIch bin nicht da.Intervall zu steuern, wie häufig der Client sendet PINGREQ-Nachrichten.
Ändern Sie den untenstehenden Code entsprechend Ihren Anforderungen:
client.connect(hostip, port, keepalive=40)
Sitzungspersistenz konfigurieren
Sitzungsdaten eines MQTT-Clients umfassen die Abschriften des Kunden und alle Daten, die der Kunde mit QoS>0. Der Client kann die Messaging-Plattform erhalten, um seine Sitzungsdaten über Verbindungen zu speichern.
MQTT 3.1.1 Clients können Clean Session = 0 festlegen, um den MQTT Server zu bitten, um zu halten die über Verbindungen gespeicherten Sitzungsinformationen.
random_chars = ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
client_id = 'kristallmq_'+random_chars
Client = paho.mqtt.client.Client(client_id,clean_session=False)
MQT 5 Clients können Clean Start = 0 und Session Expiry festlegen Interval = 'N', um den Server zu bitten, seine Sitzungsinformationen gespeichert zu halten über Verbindungen für 'N' Sekunden.
random_chars = ''.join(random.choices(string.ascii_letters +
string.digits, k=10))
client_id = 'kristallmq_' + random_chars
# MQTT Client für MQTTv5 mit clean_session=False initialisieren
Client = mqt.Client(client_id, clean_session= Falsch.
Protokoll=mqtt. MQTTv5)
# Rückruffunktion für MQTT-Verbindung
def on_connect(client, userdata, flags, rc, properties=None):
Druck('\n{} Mit Ergebniscode verbunden:
{}'.format(client._client_id.decode(), mqtt.connack_string(rc)))
wenn Eigenschaften:
print("Received Connection Properties:")
für Prop, val in properties.items():
Druck (f"{prop}: {val}")
# Setzen Sie die on_connect Callback Funktion
client.on_connect = on_connect
# Verbindungsdetails (ersetzt mit Ihrem)
Makler
Adresse und Port
broker_address = 'public-mqtt-broker.bevywise.com '
Broker_port = 1883 # Ersetzen mit dem Hafen Ihres Maklers
# Connect to MQTT Server
client.connect(broker_address, broker_port)
Maximal Packungsgröße
MQTT5 Client kann die Middleware (Broker) anfordern, nur Daten zu senden Pakete weniger als eine bestimmte Größe, indem sie so eingestellt werden:
von paho.mqt.properties import Eigenschaften
aus paho.mqt.packettypes import PacketTypes
def on_connect(client, userdata, flags, rc, properties=None):
Print('\n{} Connected'.format(client._client_id.decode()))
Client = paho.mqtt.client.Client(client_id=client_id),
Protokoll=paho.mqt.client. MQTTv5)
client.on_connect = on_connect
connect_properties = Eigenschaften(PacketTypes.CONNECT)
connect_properties.MaximumPacketSize=256
client.connect('public-mqtt-broker.bevywise.com', 1883,
Eigenschaften=connect_properties)
Client.loop_start()
Sicherung des MQTT Broker
IoT-Geräte werden global eingesetzt und verbinden sich mitPressemitteilungen MQTT-Serverüber verschiedene Kommunikationsmethoden wie Wi-Fi, GSM und mehr, sie anfällig für Angriffe zu machen. Um Ihre IoT-Implementierung zu sichern,MQTT Broker-Einsatzist sehr wichtig. Dies kann erreicht, MQTT Authentication ermöglicht und TLS/SSL implementiert wird Verschlüsselung für beide MQTT über TCP- und WebSocket-Verbindungen. EinrichtungMQTT-Sicherheitrechts vom MQTT Connect Sie sorgen für ein tampersicheres, robustes IoT-Ökosystem, das Daten und Geräte von unberechtigtem Zugriff.
Daten senden
Daten effizient an mehrere Teilnehmer verteilen Veröffentlichung zu bestimmten Themen mit dem folgenden Code snippet:
Import zufällig, String, paho.mqt.client, Zeit
def on_publish(client, userdata, mid):
Print('\n{} SENT PktID:{}'.format(client._client_id.decode(),mid))
random_chars = ''.join(random.choices(string.ascii_letters + string.digits,
k=10)
client_id = 'kristallmq_'+random_chars
Client = paho.mqtt.client.Client(client_id)
client.on_connect = on_publish
client.connect('public-mqtt-broker.bevywise.com', 1883)
Client.loop_start()
während True:
client.publish('testtopic','Hello CrytalMQ!', qos=1, keep=False)
Zeit.sleep(40)
# Callback-Funktion für MQTT veröffentlichen Quittung (on_publish)
def on_publish(client, userdata, mid):
Druck('\n{} SENT PktID:{}'.format(client._client_id.decode(), Mitte))
# Erstellen einer zufälligen Client-ID
random_chars = ''.join(random.choices(string.ascii_letters +
String. Ziffern,
k=10)
client_id = 'kristallmq_' + random_chars
# Initialize MQTT Client für MQTTv5
Client = mqtt.Client(client_id, Protokoll=mqt. MQTTv5)
# Setzen Sie die on_publish Callback Funktion
client.on_publish = on_publish
# Verbindungsdetails (ersetzt mit dem Server)
Anschrift
und Hafen
broker_address = 'public-mqtt-broker.bevywise.com '
Broker_port = 1883 # Ersetzen mit dem Hafen Ihres Maklers
# Verbindung zum Server
client.connect(broker_address, broker_port)
# Starten Sie einen Hintergrundfaden für die MQTT-Kommunikation
Client.loop_start()
Festhaltene Nachrichten einstellen
Ermöglichen Sie die Flagge bei der Veröffentlichung einer Nachricht, um sicherzustellen, dass Broker speichert die letzte Nachricht jedes Themas. Dies garantiert neue Abonnenten die jüngste Nachricht beim Verbinden erhalten.
Um dies zu implementieren, verwenden Sie den folgenden Code snippet:
client.publish('testtopic','Hello, CrystalMQ!',qos=0,retain=True)
QoS Levels angeben
Das Protokoll bietetDrei Ebenen von MQTT QoS Levelfür die Nachricht Lieferung:
Geben Sie beim Veröffentlichen von MQTT-Nachrichten den erforderlichen QoS-Level an dieser Code:
pub_properties = Properties(PacketTypes.PUBLISH)
pub_properties.MessageExpiryInterval = 60
client.publish("testtopic", "Hello CrysqlMQ!", qos=1,
Eigenschaften=publish_properties)
Nachricht abbrechen Intervall
Die Eigenschaft 'Message Ablaufintervall' setzt die Lebensdauer einer Nachricht in Sekunden; wenn undelivered innerhalb dieser Zeit, der Broker verworfen es.MQTT5unterstützt diese Funktion. MQTT5 Clients können dies während der Veröffentlichung von Daten festlegen.
Für MQTT 5:
pub_properties = Properties(PacketTypes.PUBLISH)
pub_properties.MessageExpiryInterval = 60
client.publish("testtopic", "Hello CrysqlMQ!", qos=1,
Eigenschaften=publish_properties)
Thema Alias
Die Eigenschaft 'Topic Alias' ermöglicht es Kunden, ein kurzes Alias zu verwenden anstatt eines vollständigen Themennamens, die Reduzierung der Nachrichtenpaketgröße und die Verbesserung des Netzwerks Effizienz.
connect_properties = Eigenschaften(PacketTypes.CONNECT)
connect_properties.TopicAliasMaximum = 10
client.connect('public-mqtt-broker.bevywise.com', 1883,
Eigenschaften=connect_properties)
Eigenschaften, die mit MQTT PUBLISH verbunden sind, verbessern die Nachrichtenbehandlung, Bereitstellung von Kontext oder Anweisungen für Broker und Kunden. Diese Eigenschaften, einschließlich Nachrichten Ablaufintervalle und Thema Alias, optimieren Nachrichtenversand und Netzwerk Bandbreite.
Anmeldung zum Thema Filter
Um von anderen Clients veröffentlichte Daten zu erhalten, muss dieser Client abonnierenMQT Themenwie folgt:
def on_subscribe(client, userdata, mid, permit_qos):
Druck('\n{} SUBSCRIBED mit
QoS:{}'.format(client._client_id.decode(),granted_qos))
def on_message(client, userdata, message):
print('\n{} RCVD Topic:{}, Nachricht:{}, QoS:{}
PktId:{}'.format(client._client_id.decode(),message.topic,message.payload,message.qos,message.mid))
random_chars = ''.join(random.choices(string.ascii_letters + string.digits,
k=10)
client_id = 'kristallmq_'+random_chars
Client = paho.mqtt.client.Client(client_id)
client.on_message = on_message
client.on_subscribe = on_subscribe
client.connect('public-mqtt-broker.bevywise.com', 1883)
Client.loop_start()
client.subscribe('testtopic', qos=1)
Dieses Thema Filter kann mit einem genauen Thema übereinstimmen oder es kann Wildcards wie # und +
Datenerfassung
Um Daten für die Abonnements zu erhalten, eine Callback-Funktion muss so definiert werden:
# Rückruffunktion für MQTT-Verbindung
def on_connect(client, userdata, flags, rc, properties=None):
Print('\n{} Connected'.format(client._client_id.decode()))
# Thema abonnieren, wenn verbunden
client.subscribe('testtopic', qos=0)
Anmeldung von Themen
Um zu verhindern, dass Updates von einem Thema abgemeldet werden, verwenden Sie den angegebenen Code unten:
def on_unsubscribe(client, userdata, mid):
Print('\n{} UNSUBSCRIBED'.format(client._client_id.decode()))
client.unsubscribe("testtopic")
Stellen Sie sicher, dass die Verbindung Ihres Kunden mit dem Broker, um Probleme und Ressourcenlecks auf beiden Seiten zu vermeiden, wodurch System beibehalten Stabilität.
Verwenden Sie den folgenden Code, um den Client vom Broker zu trennen:
def on_disconnect(client, userdata, rc):
Druck('\n{} DISCONNECTED with rc:{}'.format(client._client_id.decode(),rc))
Client.loop_stop()
Client.disconnect()
Sie haben die Möglichkeit, sich selbst zu entwickeln und anzupassen komplizierte Business-Logik in dieser Umgebung, passgenau auf Ihre spezifischen Bedürfnisse und Ziele.
Identifizierung des Kunden Strategie
Zuweisen Sie jedem Gerät eindeutige Client-IDs zur genauen Identifizierung. In privaten Einrichtungen, Allocate deutlich IDs an einzelne Kunden; in gemeinsamen Umgebungen, fügen Sie eine zufällige zu jeder Client-ID, um Einzigartigkeit zu erhalten.
Datenarchitektur Design
Strategisch planen Sie Ihre Datenstruktur im Voraus. Ob der Umgang mit Klartext, JSON-Formate oder numerische Daten sorgen dafür, dass das Design auf die spezifischen Anforderungen Ihrer Anwendung.
Robuste Fehlerbehandlung
Implementieren Sie eine starke Fehlerverwaltung mit MQTT-Verbindung Fehler, Abonnementprobleme und Nachrichtenveröffentlichungsfehler effektiv.
Sicherung von Anmeldeinformationen
Schutz sensibler Informationen wie Benutzernamen, Passwörter und Client-IDs, indem Sie sie nicht in Ihrem Quellcode festcodieren. Umweltvariablen verwenden oder sichere Konfigurationsdateien statt.
Regelmäßige Prüfung und Überwachung
Kontinuierlich testen Sie MQTT-Kommunikation und überwachen Sie Client Metriken wie als Verbindungsstatus, Nachrichtendurchsatz und Fehlerraten schnell identifizieren und beheben Probleme.
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.
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.
Den vollständigen Code für den Client herunterladen, der Python MQTT Client verwendet Bibliothek, um mit unserer Messaging-Plattform oder einem Broker Ihrer Wahl zu verbinden.
Import paho.mqt.client als mqtt
Import sys
Einfuhrzeit
Import zufällig, String
Import json, signal, os
# from paho.mqtt.properties import Eigenschaften
# from paho.mqt.packettypes import PacketTypes
def on_connect(client, userdata, flags, rc):
Print('\n{} Connected'.format(client._client_id.decode()))
def on_message(client, userdata, message):
print('\n{} RCVD Topic:{}, Nachricht:{}, QoS:{}
PktId:{}'.format(client._client_id.decode(),message.topic,message.payload,message.qos,message.mid))
def on_publish(client, userdata, mid):
Print('\n{} SENT PktID:{}'.format(client._client_id.decode(),mid))
def on_subscribe(client, userdata, mid, permit_qos):
Druck('\n{} SUBSCRIBED mit
QoS:{}'.format(client._client_id.decode(),granted_qos))
def on_unsubscribe(client, userdata, mid):
Print('\n{} UNSUBSCRIBED'.format(client._client_id.decode()))
def on_disconnect(client, userdata, rc):
Druck('\n{} DISCONNECTED with rc:{}'.format(client._client_id.decode(),rc))
Client.loop_stop()
random_chars = ''.join(random.choices(string.ascii_letters + string.digits,
k=10)
client_id = 'kristallmq_'+random_chars
Client = mqtt.Client(client_id)
# client.username_pw_set("some username", "some password")
- Client. will_set("willtopic", payload="Good bye CrystalMQ", qos=0,
Zurück zur Übersicht
# client.tls_set(ca_certs='/path/to/root.crt',certfile='/path/to/client.crt',
keyfile='/path/to/client.key',
cert_reqs=sl.CERT_REQUIRED,tls_version=ssl. PROTOCOL_TLSv1_2, ciphers=None)
client.on_connect = on_connect
client.connect('public-mqtt-broker.bevywise.com', 1883, keepalive=40)
# connect_properties = Properties(PacketTypes.CONNECT)
# connect_properties.SessionExpiryInterval = 60
# connect_properties.MaximumPacketSize=256
# connect_properties.TopicAliasMaximum = 10
# client.connect('public-mqt-broker.bevywise.com',
1883,properties=connect_properties)
Client.loop_start()
client.subscribe('testtopic',0)
während True:
# pub_properties = Properties(PacketTypes.PUBLISH)
# pub_properties.MessageExpiryInterval = 60
- Client. veröffentlichen("testtopic", "Hello CrysqlMQ!", qos=1,
Eigenschaften=publish_properties)
client.publish('testtopic','Hello CrytalMQ!', 0)
Zeit.sleep(30)
Reisepass
# client.disconnect()
Import paho.mqtt.client
Import sys
Einfuhrzeit
Import zufällig
Import string
Import json
Importsignal
Einfuhr
def on_connect(client, userdata, flags, rc, properties=None):
Print('\n{} Connected'.format(client._client_id.decode()))
def on_message(client, userdata, message, properties=None):
print('\n{} RCVD Topic:{}, Nachricht:{}, QoS:{}
PktId:{}'.format(client._client_id.decode(), message.topic,
message.payload.decode(), message.qos, message.mid)
def on_publish(client, userdata, mid, properties=None):
Druck('\n{} SENT PktID:{}'.format(client._client_id.decode(), Mitte))
def on_subscribe(client, userdata, mid, qos, properties=None):
Druck('\n{} SUBSCRIBED with QoS:{}'.format(client._client_id.decode(), qos)
def on_unsubscribe(client, userdata, mid, properties=None):
Print('\n{} UNSUBSCRIBED'.format(client._client_id.decode()))
def on_disconnect(client, userdata, rc, properties=None):
Druck('\n{} DISCONNECTED with rc:{}'.format(client._client_id.decode(), rc)
Client.loop_stop()
random_chars = ''.join(random.choices(string.ascii_letters + string.digits,
k=10)
client_id = 'kristallmq_' + random_chars
Client = paho.mqt.client.Client(client_id),
Protokoll=paho.mqt.client. MQTTv5)
client.on_connect = on_connect
client.on_message = on_message
client.on_publish = on_publish
client.on_subscribe = on_subscribe
client.on_unsubscribe = on_unsubscribe
client.on_disconnect = on_disconnect
# Optional: Authentifizierung und andere Optionen festlegen
# client.username_pw_set("some username", "some password")
- Client. will_set("willtopic", payload="Good bye CrystalMQ", qos=0,
Zurück zur Übersicht
client.connect('public-mqtt-broker.bevywise.com', 1883, keepalive=40)
# Optional: MQTTv5-Eigenschaften für Anschluss einstellen
# connect_properties =
paho.mqt.properties.Properties(paho.mqt.packettypes.PacketTypes.CONNECT)
# connect_properties.SessionExpiryInterval = 60
# connect_properties.MaximumPacketSize = 256
# connect_properties.TopicAliasMaximum = 10
# client.connect('public-mqtt-broker.bevywise.com', 1883,
Eigenschaften=connect_properties)
Client.loop_start()
client.subscribe('testtopic', qos=0)
während True:
# Optional: MQTTv5-Eigenschaften für das Verlagswesen
# pub_properties =
paho.mqt.properties.Properties(paho.mqt.packettypes.PacketTypes.PUBLISH)
# pub_properties.MessageExpiryInterval = 60
- Client. veröffentlichen("testtopic", "Hello CrysqlMQ!", qos=1,
Eigenschaften=publish_properties)
client.publish('testtopic', 'Hello CrystalMQ!', qos=0)
Zeit.sleep(30)
~ Clean up ~
Client.disconnect()
Client.loop_stop()
print("Programm beendet. MQTT-Client getrennt.")
Mit pyinstaller
PyInstaller ist ein beliebtes Tool, das Python Anwendungen bündeln kann in eigenständige Ausführungsvarianten für Windows, macOS und Linux. Hier ist, wie Sie verwenden können pyinstaller, um Ihr Python Skript in ein ausführbares zu konvertieren:
pip install pyinstaller
Pyinstaller --onefile your_script.py
Ich hoffe, Sie konnten dieMQTT Clientmit dieser Tutorial. Als Experte in Python, wählen Sie eineMQT Broker mit Python Plugins, so dass Sie ein komplettes IoT-Anwendungsende mit dem python zu Ende zu bauen.
Auf der Suche nach Hilfe bei der IoT-Implementierung? Kontaktieren Sie unsMQTT-Unterstützung.