guida veloce home automation diy mqtt mosquitto raspberry

MQTT è meraviglioso, utilizziamolo per i nostri dispositivi IoT con Raspberry Pi

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.

esempio configurazione MQTT broker

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à:

  1. Instaurare una connessione con il broker;
  2. 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à:

  1. Instaurare una connessione con il broker;
  2. 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

Finestra terminale Mosquitto 1

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!"

Finestra terminale Mosquitto 2 pub-test

Una volta pubblicato il messaggio, il client sottoscritto al topic FirstTopic, riceverà il messaggio “Hello world!”.

Finestra terminale Mosquitto 3 sub-test

 

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:round fe

  • 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!

Ivan Scordato
progettista elettrico e appassionato di nuove tecnologie. Scrive articoli di approfondimento tecnico e conosce anche tecniche SEO per la scrittura su web.