MQTT è un protocollo di comunicazione binario semplice e versatile, creato nel 1999 con lo scopo di ottenere un protocollo che potesse ridurre al minimo l’utilizzo della banda nelle comunicazioni tra dispositivi ed ottimizzare il consumo energetico per applicazioni che prevedono un’alimentazione a batterie.
Questo di oggi non vuole essere un articolo tecnico, ma una guida veloce per l’integrazione di MQTT nei propri dispositivi IoT DIY, con una panoramica sulle sue caratteristiche principali e possibili applicazioni.
Si tratta di protocollo di comunicazione dai mille utilizzi, quindi vediamo subito di cosa si tratta, come funziona e come testarlo su una board Raspberry Pi.
Il protocollo MQTT, per scambiare informazioni, sfrutta un meccanismo di pubblicazione e sottoscrizione (pubblish-subscrive) di messaggi tramite un apposito message broker, in grado di gestire migliaia di client contemporaneamente.
Si tratta di un’ottima alternativa al modello client/server dove ad instaurare una connessione diretta con il server è il client .
In MQTT, se un determinato client vuole comunicare con un altro, pubblica un messaggio su un certo argomento (detto topic) sul message broker.
Il message broker ha il compito di filtrare e distribuire le comunicazioni tra pubblisher e subscriver.
Ogni client può iscriversi a molteplici topics e ogni volta che viene pubblicato un nuovo messaggio in un determinato topic, il message broker lo distribuisce a tutti i client iscritti a quel determinato topic.
Il Topic è una stringa UTF-8 con struttura simile a quella di una directory e i livelli dei topics, sono separati da uno slash.
Possiamo quindi creare dei topic secondo determinati criteri, ad esempio per una casa possiamo fare in modo che le rilevazioni di un sensore PIR, vengano pubblicate sul topic casa/stanza da letto/sensori/PIR.
Per nominare i livelli è possibile utilizzare degli spazi e caratteri speciali, ma è bene tenere presente che utilizzare delle lettere minuscole o maiuscole per il nome di un determinato livello, lo rende diverso (Es. casa != Casa).
Oltre a poter eseguire l’iscrizione ad un topic specifico, utilizzando il simbolo – # – è possibile iscriversi a tutti i topic di livello successivo a quello indicato.
Es: casa/stanza da letto/sensori/# in questo modo, si è eseguita la sottoscrizione per tutti i topics dei sensori.
Per la trasmissione di messaggi tramite MQTT, è necessario conoscere IP, porta del broker e i parametri per l’autenticazione quando previsti.
Nel caso in cui alcuni destinatari non dovessero essere online nel momento in cui viene pubblicato qualcosa, il broker salva i messaggi ricevuti e li invia ai client interessati appena tornano ad essere online.
Prendendo come esempio un sistema di monitoraggio della temperatura ambientale, per inviare i dati rilevati del sensore, il sistema dovrà:
- Instaurare una connessione con il broker;
- Pubblicare in un determinato topic le rilevazioni effettuate (es. casa/stanza da letto/sensori/temperatura).
Per accedere in tempo reale alle rilevazioni che vengono trasmesse dal sistema di monitoraggio, si dovrà:
- Instaurare una connessione con il broker;
- Sottoscriversi al topic sul quale vengono pubblicate le rilevazioni ed aspettare la ricezione delle rilevazioni.
Per maggiori informazioni sulle funzioni offerte da MQTT, vi rimando al sito ufficiale.
Integrazione nei propri progetti
Questo particolare protocollo di comunicazione, permette di creare un sistema estremamente versatile, dove è possibile accedere in tempo reale a qualsiasi dato che passa dal broker.
Ad esempio, in OpenHAB tramite l’addon MQTT binding ed una veloce configurazione tramite PAPER UI, risulterà molto semplice collegare dei sensori e attuatori per configurare il proprio sistema di Home Automation personalizzato.
Lo scambio di messaggi tra i dispositivi avviene molto velocemente.
Broker MQTT
Per cominciare ad utilizzare sin da subito MQTT con i nostri dispositivi IoT DIY, prima di tutto è necessario munirsi di un broker.
Per lo scopo esistono diversi software e possibili soluzioni, incluse quelle di Cloud MQTT Broker, ma siccome sono sicuro che vogliate fare le cose per bene, velocemente e vi fidate di me (se non lo fate tranquilli, lo capisco e sono d’accordo con voi) sceglierete di installare il software Mosquitto su una board Raspberry Pi con SO Raspbian.
Eclipse Mosquitto is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol versions 3.1 and 3.1.1. Mosquitto is lightweight and is suitable for use on all devices from low power single board computers to full servers.
The MQTT protocol provides a lightweight method of carrying out messaging using a publish/subscribe model. This makes it suitable for Internet of Things messaging such as with low power sensors or mobile devices such as phones, embedded computers or microcontrollers.
The Mosquitto project also provides a C library for implementing MQTT clients, and the very popular mosquitto_pub and mosquitto_sub command line MQTT clients.
Trovate maggiori informazioni su Mosquitto nel sito ufficiale.
Vi ho promesso una guida veloce, perciò basta perder tempo, vediamo come procedere.
Installiamo mosquitto su Raspbian
Ho scelto di utilizzare una board Raspberry Pi model B, ma naturalmente è possibile scegliere la board che si preferisce.
Per l’installazione di Mosquitto ed il suo relativo client, da terminale digitare i seguenti comandi:
sudo apt update sudo apt install -y mosquitto mosquitto-clients
Confermare l’installazione ed aspettare che vengano scaricati ed installati i pacchetti.
Per abilitare l’attivazione automatica di Mosquitto ad ogni accensione del lampone in fase di boot, sempre da terminale digitare:
sudo systemctl enable mosquitto.service
Digitando il seguente comando, sul terminale verrà visualizzata la versione di Mosquitto installata.
mosquitto -v
Testiamo Mosquitto su raspberry pi
Vediamo adesso come è possibile pubblicare e ricevere dei messaggi con l’ausilio del terminale utilizzando il client di Mosquitto.
Subscribe
Per prima cosa, apriamo una nuova finestra del terminale e inseriamo il seguente comando:
mosquitto_sub -d -t FirstTopic
In questo modo, ci siamo iscritti al topic FirstTopic e in questa finestra possiamo visualizzare i messaggi ricevuti.
Publish
Per pubblicare un messaggio sul topic FirstTopic, aprire una seconda finestra del terminale e inviare il comando:
mosquitto_pub -d -t FirstTopic -m "Hello world!"
Una volta pubblicato il messaggio, il client sottoscritto al topic FirstTopic, riceverà il messaggio “Hello world!”.
Sicurezza
Per rendere il collegamento il più sicuro possibile, specialmente per applicazione che prevedono di esporre il sistema online, è buona norma quella di settare alcuni parametri di sicurezza, partendo dall’impostazione di almeno un username e relativa password per il broker MQTT.
Prossimamente vedremo quali sono i migliori accorgimenti per rendere sicuro il proprio sistema con alcuni esempi.
Anticipazioni
Presto approfondiremo l’utilizzo di MQTT per la realizzazione di dispositivi IoT DIY, focalizzandoci sulla creazione di dispositivi per la domotica DIY.
Fra le varie cose, avremo a che fare con:
- Integrazione con OpenHAB;
- Progetti con moduli ESP e broker MQTT;
- Integrazione di Google Home per il controllo vocale;
- Configurazioni ad hoc di un sistema duratuto;
- Ottimizzazione per un sistema stabile e sicuro.
Stay Tuned!