Alfabeto Open Source: E come Eclipse MOSQUITTO

La creatività è l’intelligenza che si diverte.”
(Albert Einstein)

Si sta avvicinando l’estate e come ogni anno scattano le campagne di prevenzione contro le zanzare (mosquito, appunto).

Noi però aggiungiamo una “t” al termine inglese, occupandoci invece di IoT (Internet of Things) o, più specificatamente, di un modo semplice per giocare in casa con qualche concetto di base.

Il nostro punto di partenza non sarà l’oggetto hardware (come arduino oppure una raspberry). Ci sono già tanti spazi online in cui si approfondisce questa tematica, tanti progetti completi di codice sorgente e circuiti da implementare.

Lo spunto da cui sviluppare il nostro ragionamento, invece, ci viene fornito da Mosquitto, un ottimo strumento open source che ha messo a disposizione il progetto Eclipse IoT. Per capirne meglio il funzionamento e le potenzialità, implementeremo un modo semplice di scambiare “messaggi IoT”, simulando il funzionamento di un sensore di temperatura in casa, che verrà monitorato costantemente da una APP nel nostro cellulare.

Lo scopo di questo approfondimento è didattico, ma il concetto su cui si basa è lo stesso che viene sviluppato nella realtà dell’IoT professionale.

Cosa è Eclipse IoT?

È una piattaforma di sviluppo open source rilasciata da Eclipse Foundation per lo sviluppo di applicazioni IoT, con il preciso scopo di fornire implementazioni di standard aperti, servizi e frameworks per uno sviluppo dell’Internet of Things libero e aperto a tutti.

Cosa è Mosquitto?

Eclipse Mosquitto è un message broker open source che implementa il protocollo MQTT. È un server davvero molto leggero ed è multipiattaforma (Linux, Windows, Mac), caratteristiche queste che gli permetteno di essere utilizzato praticamente ovunque (anche in una raspberry in casa nostra, tanto per capirci). Mosquitto è un servizio autonomo ed indipendente, che centralizza i collegamenti tra i più disparati oggetti IoT. Per far dialogare questi oggetti, quindi, non è necessario conoscerne né il numero, né la caratteristica, né tanto meno l’indirizzo fisico di rete, proprio in virtù della sua funzione di intermediazione. È lui che si occupa di gestire tutti i messaggi ricevuti da e trasmessi verso gli oggetti IoT.

Cosa è MQTT?

MQ Telemetry Transport (MQTT) è un protocollo di messaggistica largamente usato nell’IoT per far comunicare gli oggetti fra di loro, con la mediazione di un message broker centrale (come Mosquitto, appunto): è altamente affidabile, in quanto garantisce la consegna dei messaggi al 100% (anche su reti degradate o lente), è estremamente leggero ed è un protocollo standard aperto (OASIS).

Mosquitto e quindi MQTT rendono semplice ciò per cui sono nati: la connessione e la comunicazione fra oggetti IoT.

Inoltre, il progetto Eclipse Paho (di cui Mosquitto fa parte) mette a disposizione dei programmatori le librerie open source praticamente per tutti i linguaggi di programmazione (C++, C for embedded, Java, Javascript, Python ecc.), che consentono l’implementazione nativa del pattern publish/subscribe! Se lo conoscete, avrete fatto probabilmente un sorriso. Se non lo conoscete, i prossimi passaggi possono contenere un pretesto per stuzzicare il vostro lato hungry & foolish, auspicabilmente.

L’implementazione del pattern publisher/subscriber, insieme agli altri vantaggi fin qui elencati, ha contribuito in maniera determinante alla diffusione mondiale del protocollo MQTT. Gli stessi Facebook Messenge iOS iPhone iPad, Android, e Windows negli ultimi rilasci fanno uso proprio di questo protocollo per molte funzionalità (tra cui status utente, sync bookmark ecc.).

Come comunicano tra loro gli oggetti IoT?

Per spiegarci meglio, guardiamo il seguente schema esemplificativo

Il broker MQTT al centro, come abbiamo detto, funge da intermediazione tra i vari oggetti, che si collegano a lui in maniera asincrona mediante il design pattern publisher/subscriber.

Secondo questo diffusissimo pattern, il mittente di un messaggio (detto publisher) si rivolge al broker per “pubblicare” (in inglese “to publish”) il proprio messaggio. I destinatari (subscriber) si rivolgono a loro volta al broker per “abbonarsi” (in inglese “to subscribe”) alla ricezione di messaggi. Il broker inoltra ogni messaggio inviato da un publisher verso tutti i subscribers interessati a quel “tipo” (Topic) di messaggio. Come è facile intuire, quindi, non è necessario che un oggetto IoT interroghi ripetutamente il broker per sapere se ci sono nuovi messaggi da leggere (come avviene nella modalità pool): questi viene notificato automaticamente dal broker qualora ci sia un nuovo messaggio da consegnargli (cioè è una modalità push).

Il broker gestisce opportunamente un numero indefinito di code di messaggi per conto dei client remoti a lui collegato. Ciascuna coda di messaggi è contraddistinta da un nome, chiamato Topic cioè argomento, che possiamo considerare un po’ come una categoria/sottocategoria di ciascun messaggio in quanto ogni Topic è identificato da una chiave gerarchica (anche, volendo) multilivello.

Grazie al message broker, comunque, i messaggi non si perdono mai per strada: si occupa lui di riceverli e di notificarli agli interessati, tramite il meccanismo delle code ed il funzionamento logico del pattern sopra descritto. Questo schema, davvero molto efficace, implica il fatto che ai publisher non sia noto quanti e quali siano i subscriber e viceversa, caratteristica che contribuisce alla scalabilità del sistema (requisito fondamentale di una valida architettura IoT).

Realizziamo una semplice comunicazione IoT in 5 passi

Per chiudere l’argomento Eclipse Mosquitto con qualcosa di pratico, da poter toccare con mano, ora implementeremo un modo semplice per giocare un po’ con gli elementi sopra trattati e capirne meglio il funzionamento. Ovviamente, le istruzioni che seguono non possono essere esaustive, ma speriamo comunque che l’esperimento che faremo risulti interessante, tanto da consentirvi di approfondire l’argomento.

Utilizzeremo:

  • un server Mosquitto di test già disponibile gratuitamente online (test.mosquitto.org), che svolgerà la funzione di message broker
  • un client MQTT libero come MQTT.fx, da installare sul proprio PC ed a cui faremo svolgere la funzione di publisher
  • una App gratuita per Android come MQTT Dash, utile per costruire una dashboard grafica di monitoraggio per oggetti IoT sul proprio smartphone, a cui faremo svolgere la funzione di subscriber.

Proveremo quindi a far colloquiare il client MQTT del PC con Mosquitto, proprio come fosse un sensore IoT “virtuale”, simulando semplicemente la trasmissione del valore della temperatura di casa vostra fino alla APP del vostro smartphone.

Il primo passo consiste quindi nell’installare e configurare la APP sul proprio smartphone. Possiamo provare come detto MQTT Dash, che è intuitiva e che troverete direttamente nel Play store di Android, ma ce ne sono altre (anche per iOS):

Passo n.1: installate MQTT Dash sul vostro smartphone Android attraverso google Play e, cliccando sull’icona “+” in alto a destra, aggiungete una nuova connessione MQTT al broker test.mosquitto.org su porta 1883, come segue:

Passo n.2: cliccate sul collegamento al message broker Mosquitto appena configurato per connettervi. Ora aggiungete un elemento grafico di tipo “range/progress” alla dashboard della APP, cliccando sull’icona “+” in alto a destra. Per fare in modo che questo elemento grafico diventi, come detto, un subscriber del broker Mosquitto appena collegato, occorre “abbonarsi” al giusto Topic. Impostiamo quindi i seguenti parametri per l’elemento grafico appena inserito: “Name” dell’elemento (un valore come vi pare, es. living-room) e soprattutto “Topic (nel nostro caso scriviamo il seguente Topic gerarchico a cui ci abboniamo: house/living-room/temperature, il tutto come nella figura seguente), quindi salvate le impostazioni

Passo n.3: scaricate il pacchetto MQTT.fx scegliendo la versione giusta per il vostro sistema operativo Linux (qui) oppure Windows o Mac (qui), quindi lanciatelo seguendo il processo di installazione e, al termine, eseguite il programma MQTT.fx. Per connettersi al broker, scegliete dal menù del programma l’opzione “Extra” > “Edit connection profile”, quindi cliccate sull’icona “+” in basso a sinistra per aggiungere (come per la APP) una nuova connessione MQTT al medesimo broker test.mosquitto.org su porta 1883 come segue (impostate a piacere il valore di Client ID):

Passo 4: connettetevi al broker test.mosquitto.org cliccando sul pulsante “Connect”a fianco del nome server. Ora dobbiamo fare in modo che questo applicativo client diventi un publisher del broker collegato per quello stesso Topic che abbiamo impostato nella APP durante il passo 2, quindi proveremo ad inviare un valore di temperatura di 21 gradi, simulando che questa informazione sia fornita da un sensore IoT in casa nostra. Impostiamo quindi il Topic del messaggio da pubblicare con il medesimo valore house/living-room/temperature (Topic di cui infatti la APP è già subscriber), e scriviamo il valore 21 nel campo sottostante, per poi cliccare sul pulsante “Publishper pubblicare il messaggio in questione (siamo publisher, appunto) come segue:

Passo 5: controllate la App del vostro cellulare: se tutto è andato come deve, potrete constatare che il messaggio è stato notificato al vostro smartphone grazie all’intermediazione di Eclipse Moquitto, come segue:

 

Conclusioni

Il risultato ottenuto non è sicuramente sconvolgente, ma le potenzialità degli strumenti che avete utilizzato hanno limiti dettati solo dalla vostra fantasia. In conclusione, quindi, non posso che augurarvi la stessa cosa che auguro sempre a mio figlio: di trovare la curiosità di voler toccare queste tecnologie, rese oggi davvero alla portata di tutti, giocandoci con semplicità fino a farsi prendere definitivamente la mano.

 
Riferimenti utili per approfondimenti:

Mi faccio una IoT: Usare MQTT per comunicare con Rasberry

MQTT: il protocollo che rende possibile l’Internet of Things

MQTT Protocol Tutorial: Step by step guide

MQTT 101 – How to Get Started with the lightweight IoT Protocol

Facebook Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here