Utilizzare MQTT nei progetti iot

MQTT (Message Queue Telemetry Transport) è un protocollo di comunicazione progettato per trasferire messaggi occupando una banda molto ridotta. Per questo viene spesso impiegato in ambito IoT. Il metodo di trasmissione e ricezione dei messaggi è asincrono e si basa su una architettura publish/subscribe (mittente/destinatario).

Il mittente ed il destinatario non possono però scambiarsi messaggi direttamente tra loro ma necessitano di un intermediario chiamato dispatcher o broker.

Lo scambio di dati avviene in questo modo: il mittente (publisher) invia un messaggio al dispatcher. I destinatari, a loro volta, scelgono quali messaggi ricevere comunicandolo al dispatcher. Il dispatcher quindi invia il messaggio solo ai dispositivi che si nono iscritti (subscribe) per la ricezione dei messaggi.

Se al dispatcher sono collegati diversi mittenti e destinatari come è possibile scegliere a chi mandare il messaggio o da chi riceverlo?

MQTT utilizza i Topics

Il meccanismo di scambio dati si basa utilizzando i topics, una struttura gerarchica simile a quella per la gestione delle directory in un files system.

Quindi il mittente decide un topic sul quale pubblica un messaggio, ad esempio

/sensore1

il destinatario può leggere il messaggio abbonandosi al topics:

/sensore1

La figura illustra quanto detto:

Riepiloghiamo i concetti in questi pochi punti:

  • I messaggi non sono inviati direttamente ai destinatari;
  • Viene utilizzato un dispatcher o broker che permette lo scambio dei messaggi tra mittenti(publisher) e destinatari(subscriber)
  • Il dispatcher organizza i messaggi in topics e gli ridistribuisce ai destinatari che si sono abbonati al topic.
  • Tutti i dispositivi collegati al dispatcher possono inviare o ricevere messaggi.
  • Solitamente il dispatcher non memorizza i messaggi.

Installare MOSQUITTO

L’elemento fondamentale in una architettura MQTT è il dispatcher o broker. Se i nostri dispositivi sono collegati ad internet possiamo utilizzare un servizio web oppure nei casi di un sistema stand alone, utilizziamo un nostro broker da installare su una scheda Raspberry PI.

Un software open source che potrebbe essere utilizzato per i nostri lavori è Eclipse Mosquitto, un broker molto leggero installabile su single board computer come il Raspberry PI.

Apriamo un terminale sul nostro Raspberry, o colleghiamoci con un client ssh, digitiamo il seguente commando:

sudo apt-get install mosquitto

premiamo invio e attendiamo il download e l’installazione del software.

Testiamo l’installazione verificando che il broker MQTT sia in esecuzione:

sudo service mosquitto status

in particolare bisogna notare la presenza della stringa Active: active (running).

Per fermare il servizio utilizziamo il seguente comando:

sudo service mosquitto stop

mentre per avviarlo digitiamo:

sudo service mosquitto start

oppure stoppare e riavviare il servizio con un singolo comando:

sudo service mosquitto restart

Installare client MQTT

Una volta installato il broker sul Raspberry PI eseguiamo delle prove utilizzando un programma per pubblicare un topic e un programma per abbonarsi.

Digitando il seguente comando installeremo quanto richiesto:

sudo apt-get install mosquitto-clients

Attendiamo il completamento dell’installazione e se non si sono verificati errori dovremmo avere disponibili i seguenti programmi

mosquitto_sub
mosquitto_pub

come si intuisce dal nome il primo è il programma che funge da subscriber mentre il secondo è il programma che funge da publisher.

Per poter eseguire un semplice test apriamo due finestre terminale o, se ci colleghiamo al Raspberry da un altro host, due sessioni ssh.

Sul primo terminale abboniamoci a un topic eseguendo questo commando:

mosquitto_sub -h localhost -t "mio_topic"

(ci stiamo abbonando al topic denominato mio_topic che viene gestito dal broker che gira sulla macchina localhost)

Nella seconda finestra terminale lanciamo il publisher per inviare un messaggio al broker sul topic mio_topic:

mosquitto_pub -h localhost -t "mio_topic" -m "ciamo mondo"

Nelle immagini seguenti potete osservare lo scambio dei messaggi

Nel primo terminale mi metto in ascolto sul topic chiamato mio_topic

sul secondo terminale invio il messaggio “ciao mondo” al topic mio_topic

Nel primo terminale osservo la ricezione del messaggio “ciao mondo”.

Questi due programmi sono molto utili per esercitarci e capire meglio come funziona il protocollo MQTT.