La costante proliferazione di dispositivi in grado di acquisire dati e di connettersi alla rete per la condivisione e la ricezione degli stessi verso/da altri dispositivi, anch’essi connessi, ha determinato negli ultimi anni un drammatico incremento di applicazioni aderenti alla metafora IoT (Internet of Things). La connettività applicata a svariate tipologie di oggetti, unita alla loro capacità di collezionare grosse quantità di dati che vengono poi analizzati ed utilizzati per applicazioni in campo sia industriale che domestico, è considerata una delle maggiori rivoluzioni tecnologiche del nostro tempo.

Come naturale conseguenza, si è presto palesata la necessità di mettere a punto nuove soluzioni tecnologiche in grado di sfruttare in maniera efficiente queste potenzialità. Tenendo al contempo in considerazione le limitazioni ed i vincoli fisici imposti dalle caratteristiche degli oggetti stessi, rappresentati nella maggior parte dei casi da dispositivi embedded, sensori, attuatori e dispositivi mobili, inclusi smartphone e tablet.

In questo contesto, si è affermato il protocollo MQTT (MQ Telemetry Transport protocol), che rappresenta oggi uno dei protocolli di comunicazione più diffusi per applicazioni IoT ed M2M (Machine-to-Machine).

I punti di forza del protocollo MQTT

Il successo e la conseguente pervasiva adozione del protocollo MQTT in ambito IoT/M2M, deriva dalla semplicità di utilizzo e da una serie di altre importanti caratteristiche, funzionali e non.

Si tratta di un protocollo di comunicazione snello, basato su TCP/IP, che utilizza una codifica binaria efficiente per la serializzazione dei messaggi. La dimensione della parte fissa dell’header dei messaggi MQTT è di soli 2 bytes, il che equivale ad un bassissimo overhead e lo rende ideale per lo scambio di grosse quantità di dati in piccoli pacchetti, su reti poco performanti.

MQTT è agnostico rispetto alla tipologia ed il formato dei dati scambiati, ed è pensato principalmente per la comunicazione in modalità quasi real-time, tra dispositivi eterogenei caratterizzati da ridotte capacità computazionali e spesso alimentati a batteria – per i quali dunque il consumo di energia deve essere ridotto – su reti ad elevata latenza ed in contesti applicativi dove la banda a disposizione è spesso limitata o costosa. Quest’ultimo è il caso, per esempio, della maggior parte dei piani tariffari per applicazioni M2M, dove il costo per quantità di dati trasferiti rimane, ad oggi, rilevante.

Un modello di comunicazione orientato agli eventi

Il protocollo MQTT utilizza un paradigma di comunicazione di tipo Publish/Subscribe, orientato agli eventi. In contrapposizione al paradigma di tipo Request/Response tipicamente adottato dal protocollo HTTP, che ne ha fatto il caposaldo per lo sviluppo di internet e delle applicazioni ad esso correlate e che rimane valido in tutti i casi d’uso in cui si ha la necessità di richiedere esplicitamente informazioni da una data sorgente nota a priori, il modello Publish/Subscribe non impone ai client di effettuare un polling verso il server per verificare la presenza di nuove informazioni.

In una tipica applicazione basata su MQTT, le sorgenti dati, denominate publishers, pubblicano messaggi su un determinato argomento o topic verso una entità centrale, il Message Broker. I destinatari interessati al consumo di determinate tipologie di dati, denominati subscribers, si sottoscrivono ai topic di interesse, ancora una volta tramite il Message Broker. Ogni qualvolta nuovi dati vengono resi disponibili su un determinato topic, il Message Broker si occupa della distribuzione uno a molti a tutti i subscribers, in modalità push. Il pattern di comunicazione di tipo Publish/Subscribe si rivela dunque particolarmente adatto per applicazioni event-oriented o event-driven: il dato generato ed immediatamente condiviso dal publisher, viene trasferito in maniera quasi real-time verso tutti i subscribers, che rimangono in attesa di essere “svegliati” nel caso si verifichino eventi cui sono interessati. Dove per evento si può intendere la disponibilità di nuovi dati, piuttosto che un comando spedito verso un dispositivo di tipo attuatore per l’esecuzione di determinate azioni. Grazie alla presenza del Message Broker, il protocollo MQTT garantisce un perfetto disaccoppiamento tra chi pubblica e chi consuma le informazioni, supportando tanto i casi d’uso in cui i client sono sempre connessi (“always-connected”) che quelli in cui, a causa dell’inaffidabilità della rete sottostante, gli stessi possono disconnettersi e riconnettersi continuamente (“sometimes-connected”).

Un tipico esempio di “ecosistema” architetturale in cui il protocollo MQTT trova la sua naturale applicazione è mostrato nella figura che segue:

Qualità di servizio

Altro aspetto interessante e tecnologicamente significativo di MQTT è rappresentato dalla possibilità di utilizzare tre diversi livelli di QoS (Quality of Service), che publisher e subscriber possono negoziare attraverso il Broker in fase di connessione, a seconda delle specifiche necessità applicative:

  • At most once, rappresenta il livello di qualità di servizio più basso. Il messaggio viene inviato una sola volta senza alcuna conferma di ricezione, affidandosi a quanto può offrire la rete TCP/IP sottostante in un dato momento (best-effort)
  • At least once, il messaggio viene inviato più volte finché non si ottiene una conferma di ricezione, non escludendo la possibilità che possa essere ricevuto più di una volta da qualche destinatario, a causa delle ritrasmissioni
  • Exactly once, il messaggio viene inviato una e una sola volta con conferma di ricezione.

Sicurezza

Dal punto di vista della sicurezza, pur non essendo questo aspetto intrinseco nel design del protocollo, con MQTT si possono  implementare meccanismi di autenticazione, sfruttando la possibilità di trasferire nome utente e password all’interno dei messaggi trasmessi. In aggiunta, è possibile incrementare la sicurezza di una connessione MQTT utilizzando tecniche quali la cifratura della comunicazione attraverso l’utilizzo contestuale di connessioni di tipo TLS (Transport Layer Security), piuttosto che attraverso l’utilizzo di metodi di crittografia a monte e a valle della trasmissione.

Applicazioni

Il fatto di utilizzare un meccanismo di serializzazione di tipo binario, agnostico rispetto al tipo di dati trasportati all’interno del payload, rende di fatto MQTT idoneo ad un utilizzo in praticamente tutte le applicazioni orientate agli eventi, di cui l’ambito IoT/M2M rappresenta un caso specifico e, al contempo, molto significativo.

MQTT è ampiamente utilizzato all’interno di svariate tipologie di dispositivi embedded, sensori ed attuatori, per l’acquisizione e la condivisione di dati di posizionamento (tracking), per il monitoraggio ambientale, in ambito industriale ed in ambienti SCADA (Supervisory Control and Data Acquisition) a scopo di acquisizione dati, attuazione di comandi e monitoraggio di infrastrutture critiche e, non da ultimo, per applicazioni di tipo domotico.

Il processo di standardizzazione

Sviluppato nel 1999 da IBM per necessità aziendali, MQTT è stato rilasciato nel 2010 con licenza open source e royalty-free. In seguito, è stato adottato dapprima dal consorzio statunitense OASIS (Organization for the Advancement of Structured Information Standards), che ha rilasciato le specifiche della versione 3.1.1 come standard OASIS e, successivamente, approvato dai comitati tecnici dell’ISO (International Organization for Standardization) e dell’ IEC (International Electrotechnical Commission), con il nome di  ISO/IEC 20922. Nel mese di Aprile del 2019, OASIS ha rilasciato le specifiche della versione 5.0 dello standard MQTT.

MQTT nelle soluzioni fornite da IES

Le soluzioni tecnologiche di tipo event-driven, e basate sul protocollo MQTT in particolare, trovano spazio all’interno di diversi dei prodotti che la IES realizza per i propri clienti, principalmente come parte delle soluzioni JIXEL.

I business case contemplati riguardano:

  • localizzazione di beni, risorse e mezzi
  • monitoraggio ambientale tramite ricezione dati da sensori
  • allarmi, messaggi di allertamento e comandi di attuazione verso sistemi di comando, controllo e gestione, APP per dispositivi mobili ed attuatori

Riferimenti

OASIS

MQTT standard (OASIS MQTT Techincal Committee)

Sito ufficiale MQTT