MQTT – Introduzione

luca 24/10/2016 0

Se due dispositivi vogliono colloquiare tra loro, è necessario che entrambi adottino un protocollo comune. In passato vi ho già mostrato diversi esempi di comunicazione, ad esempio tra Arduino e un programma C#, Arduino e un sito web o Arduino e un server NTP.

Tutte queste comunicazioni erano punto-a-punto, ovvero tra due interlocutori. Oggi voglio invece iniziare a parlarvi di un protocollo un po’ particolare: MQTT (MQ Telemetry Transport).

Il protocollo MQTT è stato inventato nel 1999 da due ricercatori (Andy Stanford-Clark di IBM e Arlen Nipper di Arcom) e le sue specifiche sono pubbliche (sito IBM). Le sue caratteristiche principali, che lo rendono molto adatto per lo scambio informazioni tra dispositivi (machine 2 machine) sono:

  • è di tipo publish/subscribe
  • è molto semplice
  • ha un overhead (= quantità di dati da trasmettere per il suo funzionamento) molto basso

 Publish/Subscribe

La caratteristica principale di MQTT è di essere un protocollo publish/subscribe.

In una comunicazione tradizionale, la sorgente del dato (ad esempio un sensore di temperatura) invia il dato direttamente all’utilizzatore finale (ad esempio il termostato):

mqtt-00a

In una comunicazione publish/subscribe invece il sensore invia (pubblica, publish in inglese) il dato ad un sistema centrale detto broker. Tutti i dispositivi che vogliono ottenere tale dato lo comunicano al broker (si iscrivono, subscribe in inglese) ed è il broker ad inviare loro il dato quando questo è disponibile:

mqtt-00b

Il principale vantaggio del paradigma pub/sub è il disaccoppiamento tra chi produce il dato e chi lo deve utilizzare:

  • disaccoppiamento spaziale: chi genera il dato non deve essere direttamente connesso con chi lo utilizza;
  • disaccoppiamento temporale: chi genera il dato non deve essere attivo nello stesso momento di chi lo utilizza;
  • disaccoppiamento di sincronizzazione: la produzione del dato non deve essere sincrona con il suo utilizzo.

Da quanto scritto sopra, si capisce perché il protocollo MQTT e in generale il paradigma pub/sub è molto utilizzato in ambito Internet of Things: i dispositivi più semplici, spesso alimentati a batteria, possono attivarsi ogni tot secondi, inviare i propri dati al broker e tornare nello stato di risparmio energetico. Sarà il broker, sempre attivo, a rendere disponibili tali dati ai vari utilizzatori (attuatori, dashboards…).

Topics

Un broker può gestire un numero molto elevato di messaggi, provenienti da diverse sorgenti e destinati a diversi utilizzatori. Come avviene il corretto smistamento dei messaggi? Tramite il concetto di argomento (topic in inglese): ogni messaggio viene pubblicato indicandone il topic (nel caso di un sensore di temperatura ad esempio il topic potrà essere appunto temp). In fase di sottoscrizione, l’utilizzatore deve specificare uno o più topic dei quali vuole ricevere i dati (sempre nel nostro esempio, per ricevere i dati di temperatura il termostato dovrà sottoscrivere il topic temp):

mqtt-09

Più avanti vedremo nel dettaglio come sono strutturati i topic e come sia possibile effettuare sottoscrizioni a più topic utilizzando delle wildcards.

Mosquitto

Finita la parte introduttiva, vediamo ora come utilizzare MQTT. Avrete ormai capito che l’elemento fondamentale è il broker: uno dei software più utilizzati come MQTT broker è mosquitto.

Mosquitto è disponibile per tutte le piattaforme più diffuse (Windows, Linux, MacOS), oggi vediamo come installarlo e utilizzarlo su Windows.

Per prima cosa scarichiamo l’ultima versione dal sito ufficiale e scompattiamo l’archivio in una cartella.

Dobbiamo quindi scaricare altri due componenti: le librerie OpenSSL e pThreads. Iniziamo con lo scaricare la build di OpenSSL per Windows (molto importante è scaricare la versione 1.0.x):

mqtt-01

Dalla cartella dove abbiamo installato OpenSSL, copiamo il files libeay32.dllssleay32.dll nella cartella di mosquitto:

mqtt-02

Scarichiamo ora la libreria pthreadVC2.dll da SourceWare e copiamo anche questa nella cartella di mosquitto:

mqtt-03

Questo il contenuto finale della cartella di mosquitto dopo aver copiato le 3 librerie:

mqtt-04

Primo esempio

Possiamo ora provare mosquitto. Apriamo 3 prompt dei comandi: uno per eseguire il broker, uno per simulare il sensore temperatura (publish) e uno per simulare il termostato (subscribe).

Nel primo prompt eseguiamo il broker, utilizzando il parametro -v per attivare l’output verboso e vedere meglio quello che succede:

mqtt-05

Nel secondo prompt, utilizziamo il comando mosquitto_sub per sottoscrivere il topic temp:

mqtt-06

Nel terzo prompt, utilizziamo il comando mosquitto_pub per pubblicare il dato di temperatura (es. 21°) sul topic temp:

mqtt-07

Se torniamo al prompt dove abbiamo lanciato la sottoscrizione, vedremo che il dato è stato correttamente instradato dal broker e ricevuto:

mqtt-08

Conclusioni

In questo primo articolo vi ho introdotto il paradigma pub/sub e il protocollo MQTT. Abbiamo inoltre visto come usare mosquitto come broker per inviare e ricevere messaggi. Dai prossimi articoli vedremo esempi reali, con Arduino (e non solo…).

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi