Blog

Con l'MQTT l’Internet delle Cose mette le ali

Scritto da Alessandro Massarella | 8-nov-2022 23.00.00

 

Mi chiamo Alessandro, sono un appassionato di tecnologie digitali e oggi parlerò della tecnologia MQTT!

MQTT è un protocollo client/server di messaggistica di tipo publish/subscribe leggero, aperto e super facile da implementare.

Questo tripudio di caratteristiche lo rendono lo strumento ideale da applicare in molti ambiti.

Tra questi spicca l’Internet of Things (o Internet delle Cose) cioè un contesto in cui è richiesto l’utilizzo di pochissimo codice e scarsa larghezza di banda.

In un’epoca storica dove ormai tutto è connesso alla rete, le specifiche esplicate nella pagina ufficiale di MQTT 5.0 non fanno altro che sottolinearne l’importanza.


Un po’ di storia

Il nostro viaggio parte dal lontano 1999, l’anno in cui nasce l’MQTT.

I padri dell’MQTT (MQ Telemetry Transport) sono Andy Stanford-Clark della IBM e Arlen Nipper.

Pensate che questi due signori ebbero la geniale idea di dare vita a tale tecnologia creando un vero e proprio protocollo di comunicazione.

Il loro scopo non era certo quello di diventare famosi, ma di collegare alcuni oleodotti riducendo al massimo il consumo di energia e di banda.

Non è finita qui! Oltre ad essere dei veri e propri innovatori, sono stati in grado di definire alcuni dei requisiti fondamentali ancora oggi utilizzati, tra cui:
- semplice implementazione
- distribuzione dei dati basata su Quality of service (QoS)
- leggerezza ed efficienza in termini di larghezza di banda
- Data Agnostic

Come potete facilmente immaginare, il principio di utilizzo del protocollo è cambiato nel corso del tempo.

Infatti, si è passati da sistemi embedded proprietari a sistemi aperti di Internet delle Cose (IoT).

Addirittura, nel 2010 il colosso tecnologico IBM ha deciso di rendere l’MQTT royalty-free e libero di essere utilizzato da chiunque senza costi!

Un pattern particolare

MQTT si basa sul pattern publish/subscribe che fornisce un’alternativa all’architettura tradizionale client/server in cui un client comunica direttamente con un endpoint.

Nel caso dell’MQTT c’è un disaccoppiamento tra il client (publisher), che invia il messaggio, e il client (subscriber) che riceve il messaggio.

Tra Publisher e Subscriber non c’è mai contatto diretto e consapevolezza dell’esistenza l’uno dell’altro, proprio come fossero due rette parallele.

Difatti, la connessione è gestita da un terzo componente cioè il broker che ha il potere di filtrare tutti i messaggi in arrivo e distribuirli correttamente a tutti i subscriber.

Vi starete probabilmente chiedendo: quali sono quindi i protagonisti dell’MQTT?

Il primo protagonista non può che essere il client (che non significa cliente).

Il client, infatti, è un qualsiasi dispositivo (come un micro controller o un server) che esegue una libreria MQTT e si connette ad un broker attraverso una rete.

Questo può assumere sia il ruolo di publisher che di subscriber.

Immaginate un dispositivo molto piccolo, con risorse limitate, che si connette ad una rete wireless e che dispone di una libreria minima… Ecco questo è un client!

Da non dimenticare che le librerie, di cui abbiamo parlato, sono disponibili in un’ampia varietà di linguaggi di programmazione che, per i più esperti, sono:
- C
- C++
- C#
- Go
- Java
- JavaScript
- .NET.

L’antagonista del client, se così possiamo definirlo, si identifica nel broker.

Questo è un protagonista a tutti gli effetti della tecnologia MQTT, tanto che si trova al centro di qualsiasi protocollo publish/subscribe!

Il broker è responsabile della ricezione, del filtraggio e dello smistamento dei messaggi nonché dell’autenticazione e dell’autorizzazione dei client. Insomma è un vero e proprio tuttofare!

L'integrazione è particolarmente importante perché il broker è spesso il componente che viene direttamente esposto su Internet. Inoltre, gestisce molti client e ha bisogno di trasmettere messaggi ai sistemi di analisi ed elaborazione a valle.

Dovete pensare al broker come un grande hub centrale in cui ogni dato è obbligato a passare.

Per questo motivo, è importante che questo sia altamente scalabile, integrabile nei sistemi back-end, facile da monitorare e super resistente ai guasti.


Publish e Subscribe

Un client, nel momento in cui si connette ad un broker (che funge da filtro), può fin da subito pubblicare messaggi.

Non ci riferiamo di certo ai messaggi di whatsapp o social, ma a qualcosa di molto più complesso!

Si tratta infatti di messaggi contenenti specifici topic che il broker utilizza ed inoltra a tutti gli iscritti al topic stesso.

Ogni messaggio possiede un payload, cioè un pacchetto di dati che viene trasmesso in formato byte.

La tipologia di formato, che può assumere le forme più disparate come testo, XML e quant’altro, viene deciso dal client mittente (o publisher).

Questo, tuttavia, non riceve feedback dai destinatari e non è in grado di sapere chi o quanti abbiano ricevuto il messaggio.

Infine, oltre al topic e al payload, vi elenco brevemente gli altri parametri che caratterizzano un messaggio publish (dei quali non entreremo nel dettaglio per evitare di annoiarvi):
- packetId
- qos
- retainFlag
- dupFlag.


Facciamo un piccolo resoconto di quello che abbiamo visto fino adesso.

Da una parte abbiamo l’invio di dati da parte di uno dei protagonisti e, dall’altra, c’è un destinatario pronto a riceverli.

Il client invia un messaggio subscribe al broker contenente un identificatore di pacchetto e l’elenco delle sottoscrizioni.

A sua volta, per confermare l’avvenuta sottoscrizione, questo invia un messaggio di conferma al client.

Nel caso in cui il broker dovesse rifiutare la sottoscrizione, il messaggio di ritorno conterrà un codice di errore.

Se vi sembra tutto molto complesso è normale, d’altronde stiamo pur sempre parlando di linguaggi informatici!

 

Sempre più connessi

L’Internet delle Cose è ormai una realtà consolidata e, in pochi anni, si è ritagliata una fetta sempre più grande del mercato tecnologico.

L’IoT è presente in ogni cosa che ci circonda: dall'automobile, ai dispositivi per le abitazioni fino alle sale operatorie degli ospedali.


Inoltre, non posso non citare l’utilizzo sempre più diffuso dell’IoT in ambito agricolo.

Pensate che sono stati creati dei sensori che controllano l’intero ciclo produttivo.

Questi sono in grado addirittura di segnalare:
un'eventuale mancanza di sostanze nutritive del terreno
la fertilità del terreno
lo stato di salute delle foglie grazie alle telecamere connesse a Internet

Come avrete capito, l’IoT non ha limiti a campi di applicazione.

Al termine di questo nostro primo viaggio non posso non augurarmi (e augurarci) che un uso intelligente della tecnologia possa contribuire a favorire un migliore futuro del nostro Pianeta.