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.
Related posts
Articoli popolari
Sorry. No data so far.
.Net micro framework Arduino Arduino Webserver Domotica Flyport I2C IOT Netduino OpenPicus raspberry RTC Speed Test