MQTT (Message Queue Telemetry Transport) è un protocollo applicativo che funziona su stack TCP, basato sul paradigma publish/subscribe, di cui si è già parlato in questo articolo sui protocolli applicativi.
In questo articolo si parlerà principalmente dell’invio e della ricezione di messaggi MQTT tramite la costruzione di Client MQTT utilizzando Python; il broker che si andrà ad utilizzare è Mosquitto: l’articolo precedentemente citato include una guida alla sua installazione ed un’introduzione al funzionamento del protocollo, che non verrà quindi trattato qui di seguito.
La libreria che implementa MQTT in Python è paho-mqtt, la cui installazione può essere effettuata facilmente tramite pip, il gestore dei package di Python, eseguendo da terminale il seguente comando:
$ pip install paho-mqtt
Nel caso in cui abbiate installato sia Python e Python3, sarà opportuno scaricare la versione per Python3, in quanto di seguito utilizzeremo quest’ultimo, tramite il comando:
$ pip3 install paho-mqtt
La libreria paho-mqtt è strutturata in due moduli:
- Publish, che fornisce un’interfaccia per pubblicare uno o più messaggi in maniera diretta, utile per situazioni in cui l’invio di messaggi non è ripetuto nel tempo e non necessita, quindi, di un Client dedicato;
- Client, che fornisce la possibilità di utilizzare e personalizzare Client MQTT, sarà questo il modulo su cui ci si soffermerà in questo articolo.
Il modulo paho.mqtt.client mette a disposizione la classe Client per gestire la connessione col broker, l’invio e la ricezione di messaggi. Questa classe è dotata di un serie di metodi già implementati che si occupano di fornire un’interfaccia per eseguire le operazioni standard che ci si aspetta da un Client MQTT.
Nella fase di costruzione di un’istanza di classe Client, non ci sono variabili di ingresso da specificare obbligatoriamente, in quanto hanno tutte dei valori di default pre-configurati: questo tutorial non scende nel dettaglio di ognuna di queste variabili, in quanto si vuole fornire un approccio pratico e semplificato della libreria. È in ogni caso utile fornire un id al client, per evitare di dovere utilizzarne uno generato automaticamente dal modulo:
from paho.mqtt.client import Client
client = Client(client_id = "client_1")
Ora che l’oggetto è stato inizializzato, si può effettuare la connessione al broker MQTT prescelto tramite l’utilizzo del metodo connect, a cui dovremo fornire in ingresso l’indirizzo IP della macchina su cui esso è localizzato e, se necessario, la porta che di default sarà quella 1883. Per i fini di questo articolo, in cui utilizzeremo il broker assieme a diversi client sulla stessa macchina, faremo riferimento all’indirizzo locale:
client.connect("localhost")
Ora che il client è connesso al broker, è tutto pronto per entrare in funzione; due metodi che possono essere utilizzati per iniziare a far funzionare la nostra applicazione sono subscribe e publish.
Il primo dei due è utilizzato per effettuare l’operazione di subscribe ad uno specifico topic della rete, che andrà specificato come stringa; è inoltre presente la possibilità di specificare un livello di qualità del servizio tramite la variabile d’ingresso qos, che ha valore di default pari a 0, corrispondente all’invio di messaggi senza funzionalità di re-invio in caso di messaggio non recapitato.
client.subscribe("topic_1")
Il secondo metodo, publish, permette di utilizzare il client per pubblicare messaggi su di uno specifico topic, il contenuto del messaggio dovrà essere una stringa passata tramite la variabile d’ingresso payload:
client.publish(topic = "topic_2", payload = "test")
Nel prossimo articolo si proseguirà con la trattazione dell’argomento, introducendo le funzionalità legate alle funzioni di callback e loop.
Ciao gentilmente potresti suggerire un esempio di conversione dati mqtt txt in decimale. grazie