mqtt — Client MQTT semplice¶
Il modulo mqtt fornisce un’implementazione minimale di un client MQTT v3.1.1 adatta all’uso su dispositivi con memoria limitata. Supporta la connessione a un broker (con TLS opzionale), la pubblicazione di messaggi, la sottoscrizione a topic, la configurazione del last-will e i ping di keep-alive.
Esempio:
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()
Eccezioni¶
- exception mqtt.MQTTException¶
Sollevata quando il broker rifiuta la richiesta CONNECT o quando una richiesta SUBSCRIBE viene rifiutata. L’unico argomento è il codice di ritorno numerico fornito dal broker.
Classi¶
- 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)¶
Costruisce un client MQTT.
Argomenti:
client_id – identificatore univoco del client inviato al broker.
server – hostname o indirizzo IP del broker (risolto con
socket.getaddrinfo()).port – porta TCP del broker (tipicamente
1883in chiaro o8883per TLS).ssl_params – se non
None, il socket viene incapsulato conssl.wrap_socket()e ssl_params viene inoltrato come argomenti keyword. Passa{}per abilitare il TLS con le impostazioni predefinite.user – nome utente opzionale per l’autenticazione al broker. Se fornito, deve essere fornita anche la password.
password – password opzionale usata insieme a user.
keepalive – intervallo di keep-alive in secondi (
0lo disabilita). Deve essere inferiore a65536.callback – callable invocato come
callback(topic, msg)per ogni PUBLISH consegnato dal broker. Può anche essere impostato in seguito conset_callback().
Metodi¶
- set_callback(f: callable) None¶
Imposta il callback invocato da
wait_msg()echeck_msg()quando viene ricevuto un messaggio PUBLISH. Il callback viene chiamato comef(topic, msg)con entrambi gli argomenti di tipobytes.
- set_last_will(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Configura il Last Will and Testament di MQTT. Il broker pubblica msg su topic se il client si disconnette in modo non corretto. Deve essere chiamato prima di
connect().Argomenti:
topic – topic del last-will (deve essere non vuoto).
msg – payload del last-will.
retain – se
True, il broker memorizza il messaggio di will come messaggio retained.qos – livello QoS del last-will. Deve essere
0,1o2.
- connect(clean_session: bool = True, timeout: float = 5.0) int¶
Apre una connessione TCP (e opzionalmente TLS) al broker e invia un pacchetto CONNECT.
Argomenti:
clean_session – se
True, richiede una sessione pulita; altrimenti il broker riprende qualsiasi stato di sessione precedente.timeout – timeout del socket in secondi applicato al socket sottostante.
Restituisce il flag session present del broker (
0o1). SollevaMQTTExceptionse il broker restituisce un codice di ritorno CONNACK diverso da zero.
- ping() None¶
Invia un pacchetto PINGREQ al broker. Dovrebbe essere chiamato periodicamente se keepalive è diverso da zero, in modo che il broker non interrompa la connessione.
- publish(topic: bytes | str, msg: bytes | str, retain: bool = False, qos: int = 0) None¶
Pubblica msg su topic.
Argomenti:
topic – nome del topic su cui pubblicare.
msg – byte del payload.
retain – se
True, istruisce il broker a conservare il messaggio per i nuovi subscriber.qos – livello di quality-of-service. Sono supportati
0(fire and forget) e1(con conferma).2non è implementato e solleveràAssertionError.
Per qos
1, la chiamata si blocca finché non viene ricevuto il PUBACK corrispondente. La dimensione totale del pacchetto deve essere inferiore a2097152byte.
- subscribe(topic: bytes | str, qos: int = 0) None¶
Si sottoscrive a topic al livello qos indicato. Deve essere stato registrato un callback tramite
set_callback()o fornito al costruttore; altrimenti viene sollevataAssertionError.Si blocca finché non viene ricevuto il SUBACK corrispondente. Solleva
MQTTExceptionse il broker rifiuta la sottoscrizione (codice di ritorno0x80).
- wait_msg() int | None¶
Si blocca in attesa di un singolo pacchetto MQTT in arrivo e lo elabora. I pacchetti PUBLISH vengono consegnati al callback registrato. I pacchetti PINGRESP vengono consumati silenziosamente. Per gli altri pacchetti di controllo viene restituito il primo byte grezzo. Restituisce
Nonese non ci sono dati disponibili o se è stato elaborato un PINGRESP.
- check_msg() int | None¶
Variante non bloccante di
wait_msg(). Interroga il socket per al massimo ~50 ms usandoselect.select(); se ci sono dati in attesa esegue la stessa elaborazione diwait_msg(), altrimenti restituisceNone.