mqtt — Cliente MQTT simple#
El módulo mqtt proporciona una implementación mínima de cliente MQTT v3.1.1 adecuada para su uso en dispositivos con memoria limitada. Admite la conexión a un broker (con TLS opcional), la publicación de mensajes, la suscripción a temas, la configuración de last-will y los pings de keep-alive.
Ejemplo:
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()
Excepciones#
- exception mqtt.MQTTException#
Se lanza cuando el broker rechaza la solicitud CONNECT o cuando se rechaza una solicitud SUBSCRIBE. El único argumento es el código de retorno numérico proporcionado por el broker.
Clases#
- 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)#
Construye un cliente MQTT.
Argumentos:
client_id – identificador único de cliente enviado al broker.
server – nombre de host o dirección IP del broker (resuelto con
socket.getaddrinfo()).port – puerto TCP del broker (normalmente
1883sin cifrar o8883para TLS).ssl_params – si no es
None, el socket se envuelve conssl.wrap_socket()y ssl_params se reenvía como argumentos de palabra clave. Pase{}para habilitar TLS con los valores predeterminados. El módulosslse importa de forma diferida al conectar, por lo que las conexiones sin cifrar (y el propio módulo) funcionan en compilaciones de firmware sin soporte SSL.user – nombre de usuario opcional para la autenticación con el broker. Si se proporciona, también debe suministrarse password.
password – contraseña opcional utilizada junto con user.
keepalive – intervalo de keep-alive en segundos (
0lo desactiva). Debe ser menor que65536.callback – invocable llamado como
callback(topic, msg)por cada PUBLISH entregado desde el broker. También puede establecerse más tarde conset_callback().
Métodos#
- set_callback(f: callable) None#
Establece la función de retorno (callback) invocada por
wait_msg()ycheck_msg()cuando se recibe un mensaje PUBLISH. La función de retorno se llama comof(topic, msg)con ambos argumentos comobytes.
- set_last_will(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None#
Configura el Last Will and Testament de MQTT. El broker publica msg en topic si el cliente se desconecta de forma anómala. Debe llamarse antes de
connect().Argumentos:
topic – tema del last-will (no debe estar vacío).
msg – carga útil del last-will.
retain – si es
True, el broker almacena el mensaje de will como un mensaje retenido.qos – nivel de QoS del last-will. Debe ser
0,1o2.
- connect(clean_session: bool = True, timeout: float = 5.0) int#
Abre una conexión TCP (y opcionalmente TLS) con el broker y envía un paquete CONNECT.
Argumentos:
clean_session – si es
True, solicita una sesión limpia; en caso contrario, el broker reanuda cualquier estado de sesión anterior.timeout – tiempo de espera del socket en segundos aplicado al socket subyacente.
Devuelve el indicador session present del broker (
0o1). LanzaMQTTExceptionsi el broker devuelve un código de retorno CONNACK distinto de cero.
- ping() None#
Envía un paquete PINGREQ al broker. Debe llamarse periódicamente si keepalive es distinto de cero para que el broker no cierre la conexión.
- publish(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None#
Publica msg en topic.
Argumentos:
topic – nombre del tema en el que publicar.
msg – bytes de la carga útil.
retain – si es
True, indica al broker que retenga el mensaje para los nuevos suscriptores.qos – nivel de calidad de servicio. Se admiten
0(enviar y olvidar) y1(con confirmación).2no está implementado y lanzaráAssertionError.
Para qos
1, la llamada se bloquea hasta que se recibe el PUBACK correspondiente. El tamaño total del paquete debe ser menor que2097152bytes.
- subscribe(topic: bytes | str, qos: int = 0) None#
Se suscribe a topic en el nivel qos indicado. Debe haberse registrado una función de retorno mediante
set_callback()o suministrado al constructor; de lo contrario se lanzaAssertionError.Se bloquea hasta que se recibe el SUBACK correspondiente. Lanza
MQTTExceptionsi el broker rechaza la suscripción (código de retorno0x80).
- wait_msg() int | None#
Se bloquea esperando un único paquete MQTT entrante y lo procesa. Los paquetes PUBLISH se entregan a la función de retorno registrada. Los paquetes PINGRESP se consumen silenciosamente. Para otros paquetes de control se devuelve el primer byte sin procesar. Devuelve
Nonesi no hay datos disponibles o si se procesó un PINGRESP.
- check_msg() int | None#
Variante no bloqueante de
wait_msg(). Sondea el socket durante un máximo de ~50 ms usandoselect.select(); si hay datos pendientes realiza el mismo procesamiento quewait_msg(), de lo contrario devuelveNone.