mqtt — Eenvoudige MQTT-client¶
De mqtt-module biedt een minimale MQTT v3.1.1-clientimplementatie die geschikt is voor gebruik op apparaten met beperkt geheugen. Hij ondersteunt het verbinden met een broker (met optionele TLS), het publiceren van berichten, het abonneren op topics, last-will-configuratie en keep-alive-pings.
Voorbeeld:
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()
Uitzonderingen¶
- exception mqtt.MQTTException¶
Wordt opgeworpen wanneer de broker het CONNECT-verzoek weigert of wanneer een SUBSCRIBE-verzoek wordt geweigerd. Het enige argument is de door de broker geleverde numerieke retourcode.
Klassen¶
- 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)¶
Construeert een MQTT-client.
Argumenten:
client_id – unieke client-identificatie die naar de broker wordt verzonden.
server – hostnaam of IP-adres van de broker (omgezet met
socket.getaddrinfo()).port – TCP-poort van de broker (doorgaans
1883plain of8883voor TLS).ssl_params – indien niet
None, wordt de socket gewrapt metssl.wrap_socket()en wordt ssl_params doorgegeven als sleutelwoordargumenten. Geef{}door om TLS met standaardinstellingen in te schakelen.user – optionele gebruikersnaam voor brokerauthenticatie. Indien opgegeven, moet ook password worden opgegeven.
password – optioneel wachtwoord dat samen met user wordt gebruikt.
keepalive – keep-alive-interval in seconden (
0schakelt het uit). Moet kleiner zijn dan65536.callback – aanroepbaar object dat als
callback(topic, msg)wordt aangeroepen voor elke PUBLISH die door de broker wordt afgeleverd. Kan ook later worden ingesteld metset_callback().
Methoden¶
- set_callback(f: callable) None¶
Stelt de callback in die door
wait_msg()encheck_msg()wordt aangeroepen wanneer een PUBLISH-bericht wordt ontvangen. De callback wordt aangeroepen alsf(topic, msg)met beide argumenten alsbytes.
- set_last_will(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Configureert de MQTT Last Will and Testament. De broker publiceert msg op topic als de client de verbinding niet netjes verbreekt. Moet vóór
connect()worden aangeroepen.Argumenten:
topic – last-will-topic (mag niet leeg zijn).
msg – last-will-payload.
retain – indien
Trueslaat de broker het will-bericht op als een vastgehouden bericht.qos – last-will-QoS-niveau. Moet
0,1of2zijn.
- connect(clean_session: bool = True, timeout: float = 5.0) int¶
Opent een TCP-verbinding (en optioneel TLS) naar de broker en verzendt een CONNECT-pakket.
Argumenten:
clean_session – indien
Truewordt een clean session aangevraagd; anders hervat de broker eventuele eerdere sessiestatus.timeout – sockettime-out in seconden die op de onderliggende socket wordt toegepast.
Geeft de session present-vlag van de broker terug (
0of1). WerptMQTTExceptionop als de broker een CONNACK-retourcode ongelijk aan nul teruggeeft.
- ping() None¶
Verzendt een PINGREQ-pakket naar de broker. Moet periodiek worden aangeroepen als keepalive ongelijk aan nul is, zodat de broker de verbinding niet verbreekt.
- publish(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Publiceert msg naar topic.
Argumenten:
topic – topicnaam waarnaar gepubliceerd moet worden.
msg – payload-bytes.
retain – indien
Truewordt de broker geïnstrueerd om het bericht vast te houden voor nieuwe abonnees.qos – quality-of-service-niveau.
0(fire and forget) en1(bevestigd) worden ondersteund.2is niet geïmplementeerd en zalAssertionErroropwerpen.
Voor qos
1blokkeert de aanroep totdat de bijbehorende PUBACK is ontvangen. De totale pakketgrootte moet kleiner zijn dan2097152bytes.
- subscribe(topic: bytes | str, qos: int = 0) None¶
Abonneert op topic met het opgegeven qos-niveau. Er moet een callback zijn geregistreerd via
set_callback()of zijn doorgegeven aan de constructor; anders wordtAssertionErroropgeworpen.Blokkeert totdat de bijbehorende SUBACK is ontvangen. Werpt
MQTTExceptionop als de broker het abonnement weigert (retourcode0x80).
- wait_msg() int | None¶
Blokkeert in afwachting van één inkomend MQTT-pakket en verwerkt dit. PUBLISH-pakketten worden afgeleverd aan de geregistreerde callback. PINGRESP-pakketten worden stilzwijgend verwerkt. Voor andere besturingspakketten wordt de ruwe eerste byte teruggegeven. Geeft
Noneterug als er geen gegevens beschikbaar zijn of als een PINGRESP is verwerkt.
- check_msg() int | None¶
Niet-blokkerende variant van
wait_msg(). Pollt de socket gedurende maximaal ~50 ms metselect.select(); als er gegevens in behandeling zijn, voert hij dezelfde verwerking uit alswait_msg(), anders geeft hijNoneterug.