mqtt — Enkel MQTT-klient¶
Modulen mqtt tillhandahåller en minimal implementation av en MQTT v3.1.1-klient lämplig för användning på minnesbegränsade enheter. Den stöder anslutning till en broker (med valfri TLS), publicering av meddelanden, prenumeration på ämnen, konfiguration av last-will och keep-alive-pingar.
Exempel:
from mqtt import MQTTClient
def callback(topic, msg):
print(topic, msg)
client = MQTTClient("openmv", "broker.example.com", 1883)
client.set_callback(callback)
client.connect()
client.subscribe(b"openmv/in")
client.publish(b"openmv/out", b"hello")
while True:
client.check_msg()
Undantag¶
- exception mqtt.MQTTException¶
Utlöses när brokern avvisar CONNECT-förfrågan eller när en SUBSCRIBE-förfrågan nekas. Det enda argumentet är den numeriska returkod som brokern tillhandahåller.
Klasser¶
- class mqtt.MQTTClient(client_id: bytes | str, server: str, port: int, ssl_params: dict | None = None, user: bytes | str | None = None, password: bytes | str | None = None, keepalive: int = 0, callback: callable | None = None)¶
Konstruerar en MQTT-klient.
Argument:
client_id – unik klientidentifierare som skickas till brokern.
server – brokerns värdnamn eller IP-adress (löses upp med
socket.getaddrinfo()).port – brokerns TCP-port (vanligtvis
1883för okrypterad eller8883för TLS).ssl_params – om inte
Nonelindas socketen medssl.wrap_socket()och ssl_params vidarebefordras som nyckelordsargument. Skicka{}för att aktivera TLS med standardvärden.user – valfritt användarnamn för brokerautentisering. Om det anges måste även password anges.
password – valfritt lösenord som används tillsammans med user.
keepalive – keep-alive-intervall i sekunder (
0inaktiverar). Måste vara mindre än65536.callback – anropbar funktion som anropas som
callback(topic, msg)för varje PUBLISH som levereras från brokern. Kan även anges senare medset_callback().
Metoder¶
- set_callback(f: callable) None¶
Anger det återanrop som anropas av
wait_msg()ochcheck_msg()när ett PUBLISH-meddelande tas emot. Återanropet anropas somf(topic, msg)med båda argumenten sombytes.
- set_last_will(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Konfigurerar MQTT Last Will and Testament. Brokern publicerar msg på topic om klienten kopplar från på ett icke graciöst sätt. Måste anropas före
connect().Argument:
topic – last-will-ämne (får inte vara tomt).
msg – last-will-nyttolast.
retain – om
Truelagrar brokern will-meddelandet som ett kvarhållet meddelande.qos – last-will-QoS-nivå. Måste vara
0,1eller2.
- connect(clean_session: bool = True, timeout: float = 5.0) int¶
Öppnar en TCP-anslutning (och eventuellt TLS) till brokern och skickar ett CONNECT-paket.
Argument:
clean_session – om
Truebegärs en ren session; annars återupptar brokern eventuellt tidigare sessionstillstånd.timeout – socket-timeout i sekunder som tillämpas på den underliggande socketen.
Returnerar brokerns session present-flagga (
0eller1). UtlöserMQTTExceptionom brokern returnerar en CONNACK-returkod som inte är noll.
- ping() None¶
Skickar ett PINGREQ-paket till brokern. Bör anropas periodiskt om keepalive inte är noll så att brokern inte bryter anslutningen.
- publish(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Publicerar msg till topic.
Argument:
topic – ämnesnamn att publicera till.
msg – nyttolast i byte.
retain – om
Trueinstrueras brokern att kvarhålla meddelandet för nya prenumeranter.qos – quality-of-service-nivå.
0(skicka och glöm) och1(bekräftad) stöds.2är inte implementerad och utlöserAssertionError.
För qos
1blockerar anropet tills matchande PUBACK tas emot. Den totala paketstorleken måste vara mindre än2097152byte.
- subscribe(topic: bytes | str, qos: int = 0) None¶
Prenumererar på topic på den angivna qos-nivån. Ett återanrop måste ha registrerats via
set_callback()eller angetts till konstruktorn; annars utlösesAssertionError.Blockerar tills matchande SUBACK tas emot. Utlöser
MQTTExceptionom brokern nekar prenumerationen (returkod0x80).
- wait_msg() int | None¶
Blockerar i väntan på ett enskilt inkommande MQTT-paket och bearbetar det. PUBLISH-paket levereras till det registrerade återanropet. PINGRESP-paket konsumeras tyst. För andra kontrollpaket returneras den råa första byten. Returnerar
Noneom ingen data är tillgänglig eller om ett PINGRESP bearbetades.
- check_msg() int | None¶
Icke-blockerande variant av
wait_msg(). Pollar socketen i högst ~50 ms medselect.select(); om data väntar utförs samma bearbetning somwait_msg(), annars returnerasNone.