mqtt — Client MQTT simple¶
Le module mqtt fournit une implémentation minimale d’un client MQTT v3.1.1 adaptée à une utilisation sur des appareils à mémoire limitée. Il prend en charge la connexion à un broker (avec TLS optionnel), la publication de messages, l’abonnement à des sujets, la configuration du testament (last-will) et les pings de maintien (keep-alive).
Exemple
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()
Exceptions¶
- exception mqtt.MQTTException¶
Levée lorsque le broker rejette la requête CONNECT ou lorsqu’une requête SUBSCRIBE est refusée. L’unique argument est le code de retour numérique fourni par le broker.
Classes¶
- 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)¶
Construit un client MQTT.
Arguments :
client_id – identifiant client unique envoyé au broker.
server – nom d’hôte ou adresse IP du broker (résolu avec
socket.getaddrinfo()).port – port TCP du broker (typiquement
1883en clair ou8883pour TLS).ssl_params – s’il est différent de
None, le socket est encapsulé avecssl.wrap_socket()et ssl_params est transmis sous forme d’arguments nommés. Passez{}pour activer TLS avec les valeurs par défaut.user – nom d’utilisateur optionnel pour l’authentification auprès du broker. S’il est fourni, password doit également l’être.
password – mot de passe optionnel utilisé conjointement avec user.
keepalive – intervalle de maintien en secondes (
0le désactive). Doit être inférieur à65536.callback – appelable invoqué sous la forme
callback(topic, msg)pour chaque PUBLISH délivré par le broker. Peut également être défini ultérieurement avecset_callback().
Méthodes¶
- set_callback(f: callable) None¶
Définit la fonction de rappel invoquée par
wait_msg()etcheck_msg()lorsqu’un message PUBLISH est reçu. La fonction de rappel est appelée sous la formef(topic, msg)avec les deux arguments de typebytes.
- set_last_will(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Configure le testament MQTT (Last Will and Testament). Le broker publie msg sur topic si le client se déconnecte de manière incorrecte. Doit être appelé avant
connect().Arguments :
topic – sujet du testament (ne doit pas être vide).
msg – charge utile du testament.
retain – si
True, le broker stocke le message du testament comme message retenu.qos – niveau de QoS du testament. Doit valoir
0,1ou2.
- connect(clean_session: bool = True, timeout: float = 5.0) int¶
Ouvre une connexion TCP (et optionnellement TLS) vers le broker et envoie un paquet CONNECT.
Arguments :
clean_session – si
True, demande une session propre ; sinon, le broker reprend tout état de session antérieur.timeout – délai d’attente du socket en secondes appliqué au socket sous-jacent.
Renvoie l’indicateur session present du broker (
0ou1). LèveMQTTExceptionsi le broker renvoie un code de retour CONNACK non nul.
- ping() None¶
Envoie un paquet PINGREQ au broker. Doit être appelé périodiquement si keepalive est non nul afin que le broker ne coupe pas la connexion.
- publish(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Publie msg sur topic.
Arguments :
topic – nom du sujet sur lequel publier.
msg – octets de la charge utile.
retain – si
True, demande au broker de retenir le message pour les nouveaux abonnés.qos – niveau de qualité de service.
0(envoi sans confirmation) et1(avec accusé de réception) sont pris en charge.2n’est pas implémenté et lèveraAssertionError.
Pour qos
1, l’appel bloque jusqu’à la réception du PUBACK correspondant. La taille totale du paquet doit être inférieure à2097152octets.
- subscribe(topic: bytes | str, qos: int = 0) None¶
S’abonne à topic au niveau de qos donné. Une fonction de rappel doit avoir été enregistrée via
set_callback()ou fournie au constructeur ; sinon,AssertionErrorest levée.Bloque jusqu’à la réception du SUBACK correspondant. Lève
MQTTExceptionsi le broker refuse l’abonnement (code de retour0x80).
- wait_msg() int | None¶
Bloque en attendant un seul paquet MQTT entrant et le traite. Les paquets PUBLISH sont délivrés à la fonction de rappel enregistrée. Les paquets PINGRESP sont consommés silencieusement. Pour les autres paquets de contrôle, le premier octet brut est renvoyé. Renvoie
Nonesi aucune donnée n’est disponible ou si un PINGRESP a été traité.
- check_msg() int | None¶
Variante non bloquante de
wait_msg(). Interroge le socket pendant environ 50 ms au maximum à l’aide deselect.select(); si des données sont en attente, elle effectue le même traitement quewait_msg(), sinon elle renvoieNone.