domenica 25 gennaio 2015

Scambiare messaggi tra oggetti con MQTT

Dialogare con le cose è, per definizione, la funzione primaria in un sistema IoT. Chi, come me, se ne stia costruendo uno, inevitabilmente arriverà al punto in cui, stabilita la connessione Internet tra un dispositivo portatile ed una schedina di controllo collegata ad un oggetto, dovrà decidere in che modo inviare comandi remotamente alla schedina e ricevere da essa informazioni utili.
Nel mio viaggio-progetto ho incontrato, con piacevole sorpresa, un protocollo di comunicazione basato su Internet che mi ha stupito per la sua semplicità e immediatezza d'uso. Sto parlando del protocollo MQTT.

Meccanismi di comunicazione via Internet ce ne sono, tanti, tantissimi, da poter soddisfare qualsiasi sfumatura di requisito che possa guidare la realizzazione. Ciascuno è nato da necessità diverse, sovrapposte a quella di base di mandare e ricevere informazioni.
Le mie necessità erano:
  1. Non deve essere necessario scrivere un programma specifico per realizzare il meccanismo: gli ambienti di programmazione abbondano di protocolli e middleware di comunicazione, ma il mio è un progetto di integrazione. La vita è troppo breve per programmare (ancora... )
  2. Deve potersi interfacciare con molti ambienti di sviluppo IoT e Smart Home, senza creare dipendenze con con un solo ambiente.
  3. Deve essere facile da installare e da testare
  4. Non deve richiedere molta memoria per la sua esecuzione.
Quest'ultimo requisito è di particolare importanza per tutti coloro che utilizzano schedine embedded per la IoT che normalmente hanno disponibilità di memoria molto limitate (128 o 256 KB) e non si possono permettere di avviare processi che normalmente sono dimensionati per ambienti server (ad es. tutti i middleware basati su JMS che utilizzano Java e la sua virtual machine, potenti sì, ma non certo nati per un Raspberry o un'Arietta G25)

Ricercando la Rete a soliti colpi di Google, ho deciso di utilizzare il protocollo MQTT.
MQTT è acronimo di Message Queueing Telemetry Transport e, dal nome, si capiscono già alcuni fatti interessanti:
  • E' un protocollo a scambio di messaggi, scambia semplicemente sequenze di caratteri da un processo all'altro.
  • Usa un modello a coda, quindi presuppone che ci sia un componente centrale che gestisce la ricezione e la diffusione dei messaggi, i quali possono essere completamente svincolati temporalmente (asincroni).
  • E' nato per trasferire dati telemetrici, una funzione di controllo remoto che lo rende quindi naturalmente adatto alle applicazioni di automazione remotizzate.
Per chi fosse interessato al suo utilizzo, ho preparato una pagina guida che dovrebbe aiutare a mettere su in poco tempo un'infrastruttura MQTT.

MQTT è nato dalla ricerca IBM e del partner Eurotech, un player internazionale quest'ultimo che si è specializzato, guarda un po', proprio nell'Internet delle Cose.
IBM ha reso il protocollo di libero uso e noi la ringraziamo con tutto il cuore ;-). Il protocollo è poi stato adottato tra gli standard OASIS, il consorzio internazionale per la definizione di standard di interoperabilità aperta nell'area delle architetture distribuite, cloud computing ed Internet delle Cose.
La specifica più recente di MQTT (v.3.1.1) è disponibile su sito open mqtt.org.
MQTT è integrato nell'application server di IBM WebSphere, per cui chi sviluppa un client MQTT potenzialmente si abilita ad integrarsi a grandi infrastrutture enterprise.
Anche Eclipse.org, intuendo le potenzialità di MQTT, ha acquisito dagli sviluppatori del broker MQTT Mosquitto il codice client e l'ha integrato nel progetto Paho, un progetto che sviluppa client su tutte le piattaforme per l'interoperabilità IoT e Machine-2-Machine.
E, non ultimo, MQTT è usato anche dal Messanger di Facebook.

Considerando quanto tempo ho impiegato a mettere su un'infrastruttura a scambio di messaggi con MQTT, cioè meno di un'ora, credo di poter consigliarne l'uso per far parlare le cose sulla rete.
Per esempio, un broker MQTT gira tranquillamente su di un Raspberry. Basta dotare il RasPI di una chiavetta WiFi ed ecco pronto un piccolo controllore di dispositivi intelligenti collegato al cloud.

Una nota importante però deve essere considerata per quel che riguarda la sicurezza. MQTT definisce una sessione di trasporto messaggi, ma non definisce alcuno strumento per la sicurezza e riservatezza.
Questi aspetti devono essere gestiti a livello di applicazione, ovvero è il broker che deve offrire una connessione sicura TSL/SSL, con tutto quel che ne consegue (gestione dei certificati, chiavi di cifratura etc...)

Buon lavoro!

3 commenti:

  1. Complimenti per il tuo blog!!!!

    RispondiElimina
    Risposte
    1. Ciao Patrizio. Ti ringrazio!
      Non ha molte pretese, per ora. Le esperienze che faccio, cerco di rendere utili anche a qualcun altro.
      Dimmi qualcosa, cosa fai di bello nell'ambito maker / iot?

      Elimina
  2. Salve,
    sto ricercando materiale per una tesi inerente all'IoT. Articolo molto interessante, ci sarebbe la possibilità di sentirsi in privato per delle domande e nel caso poterla citare nel momento in cui parlerò del protocollo MQTT?
    grazie mille

    RispondiElimina