mqtt — Cliente MQTT simples¶
O módulo mqtt fornece uma implementação mínima de cliente MQTT v3.1.1 adequada para uso em dispositivos com memória restrita. Ele suporta conexão a um broker (com TLS opcional), publicação de mensagens, inscrição em tópicos, configuração de last-will e pings de keep-alive.
Exemplo:
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()
Exceções¶
- exception mqtt.MQTTException¶
Lançada quando o broker rejeita a requisição CONNECT ou quando uma requisição SUBSCRIBE é recusada. O único argumento é o código de retorno numérico fornecido pelo 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)¶
Constrói um cliente MQTT.
Argumentos:
client_id – identificador de cliente único enviado ao broker.
server – hostname ou endereço IP do broker (resolvido com
socket.getaddrinfo()).port – porta TCP do broker (tipicamente
1883em texto puro ou8883para TLS).ssl_params – se não for
None, o socket é encapsulado comssl.wrap_socket()e ssl_params é encaminhado como argumentos nomeados. Passe{}para habilitar TLS com os valores padrão.user – nome de usuário opcional para autenticação no broker. Se fornecido, password também deve ser informado.
password – senha opcional usada em conjunto com user.
keepalive – intervalo de keep-alive em segundos (
0desativa). Deve ser menor que65536.callback – objeto chamável invocado como
callback(topic, msg)para cada PUBLISH entregue pelo broker. Também pode ser definido posteriormente comset_callback().
Métodos¶
- set_callback(f: callable) None¶
Define o callback invocado por
wait_msg()echeck_msg()quando uma mensagem PUBLISH é recebida. O callback é chamado comof(topic, msg)com ambos os argumentos comobytes.
- set_last_will(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Configura o Last Will and Testament do MQTT. O broker publica msg em topic se o cliente se desconectar de forma não graciosa. Deve ser chamado antes de
connect().Argumentos:
topic – tópico do last-will (não pode ser vazio).
msg – payload do last-will.
retain – se
True, o broker armazena a mensagem de will como uma mensagem retida.qos – nível de QoS do last-will. Deve ser
0,1ou2.
- connect(clean_session: bool = True, timeout: float = 5.0) int¶
Abre uma conexão TCP (e opcionalmente TLS) com o broker e envia um pacote CONNECT.
Argumentos:
clean_session – se
True, solicita uma sessão limpa; caso contrário o broker retoma qualquer estado de sessão anterior.timeout – timeout do socket em segundos aplicado ao socket subjacente.
Retorna o sinalizador session present do broker (
0ou1). LançaMQTTExceptionse o broker retornar um código de retorno CONNACK diferente de zero.
- ping() None¶
Envia um pacote PINGREQ ao broker. Deve ser chamado periodicamente se keepalive for diferente de zero para que o broker não encerre a conexão.
- publish(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Publica msg em topic.
Argumentos:
topic – nome do tópico no qual publicar.
msg – bytes do payload.
retain – se
True, instrui o broker a reter a mensagem para novos inscritos.qos – nível de qualidade de serviço.
0(dispara e esquece) e1(com confirmação) são suportados.2não está implementado e lançaráAssertionError.
Para qos
1, a chamada bloqueia até que o PUBACK correspondente seja recebido. O tamanho total do pacote deve ser menor que2097152bytes.
- subscribe(topic: bytes | str, qos: int = 0) None¶
Inscreve-se em topic no nível qos fornecido. Um callback deve ter sido registrado via
set_callback()ou fornecido ao construtor; caso contrárioAssertionErroré lançada.Bloqueia até que o SUBACK correspondente seja recebido. Lança
MQTTExceptionse o broker recusar a inscrição (código de retorno0x80).
- wait_msg() int | None¶
Bloqueia aguardando um único pacote MQTT recebido e o processa. Pacotes PUBLISH são entregues ao callback registrado. Pacotes PINGRESP são consumidos silenciosamente. Para outros pacotes de controle, o primeiro byte bruto é retornado. Retorna
Nonese nenhum dado estiver disponível ou se um PINGRESP foi processado.
- check_msg() int | None¶
Variante não bloqueante de
wait_msg(). Faz polling do socket por no máximo ~50 ms usandoselect.select(); se houver dados pendentes, realiza o mesmo processamento dewait_msg(), caso contrário retornaNone.