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 limitada. Suporta ligação a um broker (com TLS opcional), publicação de mensagens, subscrição de 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 o pedido CONNECT ou quando um pedido SUBSCRIBE é recusado. 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 único do cliente enviado ao broker.
server – nome do host ou endereço IP do broker (resolvido com
socket.getaddrinfo()).port – porta TCP do broker (tipicamente
1883para ligação simples ou8883para TLS).ssl_params – se não for
None, o socket é envolvido comssl.wrap_socket()e ssl_params é passado como argumentos de palavra-chave. Passe{}para ativar TLS com valores padrão.user – nome de utilizador opcional para autenticação no broker. Se fornecido, password também deve ser indicado.
password – palavra-passe opcional utilizada em conjunto com user.
keepalive – intervalo de keep-alive em segundos (
0desativa). Deve ser inferior a65536.callback – chamável invocado como
callback(topic, msg)para cada PUBLISH entregue pelo broker. Pode também 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 desligar de forma não controlada. Deve ser chamado antes de
connect().Argumentos:
topic – tópico do last-will (deve ser não vazio).
msg – payload do last-will.
retain – se
True, o broker armazena a mensagem de will como 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 ligação TCP (e opcionalmente TLS) ao 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.
Devolve o sinalizador session present do broker (
0ou1). LançaMQTTExceptionse o broker devolver um código de retorno CONNACK não zero.
- ping() None¶
Envia um pacote PINGREQ ao broker. Deve ser chamado periodicamente se keepalive for não zero, para que o broker não termine a ligaçã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 para publicar.
msg – bytes do payload.
retain – se
True, instrui o broker a reter a mensagem para novos subscritores.qos – nível de qualidade de serviço.
0(disparar e esquecer) e1(confirmado) são suportados.2não está implementado e lançaráAssertionError.
Para qos
1, a chamada bloqueia até o PUBACK correspondente ser recebido. O tamanho total do pacote deve ser inferior a2097152bytes.
- subscribe(topic: bytes | str, qos: int = 0) None¶
Subscreve topic no nível qos indicado. Um callback deve ter sido registado via
set_callback()ou fornecido ao construtor; caso contrário,AssertionErroré lançado.Bloqueia até o SUBACK correspondente ser recebido. Lança
MQTTExceptionse o broker recusar a subscrição (código de retorno0x80).
- wait_msg() int | None¶
Bloqueia à espera de um único pacote MQTT recebido e processa-o. Os pacotes PUBLISH são entregues ao callback registado. Os pacotes PINGRESP são consumidos silenciosamente. Para outros pacotes de controlo, o primeiro byte bruto é devolvido. Devolve
Nonese não houver dados disponíveis ou se um PINGRESP tiver sido processado.
- check_msg() int | None¶
Variante não bloqueante de
wait_msg(). Faz polling do socket durante no máximo ~50 ms usandoselect.select(); se houver dados pendentes, realiza o mesmo processamento quewait_msg(), caso contrário devolveNone.