◉ Mobile e IoT

MQTT spiegato semplice: come comunicano i dispositivi IoT

Broker, topic, publish e subscribe, livelli QoS e messaggi retained: come funziona MQTT, perché è diffuso nell'IoT e come configurarlo in modo sicuro.

Quando un sensore di temperatura deve comunicare il suo valore, il modo più intuitivo sarebbe inviarlo direttamente a chi lo usa: l'hub, l'app, il termostato. Con decine di dispositivi questa rete di collegamenti diretti diventa ingestibile. MQTT risolve il problema con un'idea semplice: tutti parlano con un solo intermediario, il broker, che smista i messaggi a chi li ha chiesti.

Il modello publish/subscribe

In MQTT esistono due ruoli, che uno stesso dispositivo può avere contemporaneamente.

  • Chi pubblica (publish) invia un messaggio su un certo argomento, il topic.
  • Chi si iscrive (subscribe) a quel topic riceve tutti i messaggi che vi vengono pubblicati.

Chi pubblica non sa chi riceverà il messaggio, e chi riceve non sa chi l'ha inviato. Il broker fa da centralino. Questo disaccoppiamento è il motivo per cui MQTT si adatta così bene all'IoT: aggiungere un nuovo dispositivo che ascolta non richiede di modificare quelli esistenti.

I topic

Un topic è una stringa gerarchica separata da barre, simile al percorso di una cartella:

casa/soggiorno/temperatura
casa/soggiorno/umidita
casa/cucina/luce/stato
casa/cucina/luce/comando

Per iscriversi a più topic insieme si usano due caratteri jolly:

  • + sostituisce un solo livello: casa/+/temperatura riceve la temperatura di tutte le stanze;
  • # sostituisce tutti i livelli successivi: casa/cucina/# riceve tutto ciò che riguarda la cucina.

Una buona struttura dei topic, decisa all'inizio, rende il sistema leggibile anche dopo anni. Conviene separare i topic di stato, su cui il dispositivo comunica come si trova, da quelli di comando, su cui riceve ordini.

Livelli di qualità del servizio (QoS)

MQTT permette di scegliere quanto garantire la consegna di ogni messaggio.

QoS Garanzia Uso tipico
0 al massimo una volta, senza conferma letture frequenti di sensori
1 almeno una volta, possibili duplicati comandi e notifiche
2 esattamente una volta casi in cui un duplicato crea problemi

Per un sensore che invia la temperatura ogni minuto, perdere una lettura non è grave: QoS 0 basta. Per il comando di chiusura di un'elettrovalvola conviene almeno QoS 1. QoS 2 è più pesante e serve raramente in casa.

Messaggi retained e last will

Due funzioni rendono MQTT particolarmente pratico.

  • Retained: il broker conserva l'ultimo messaggio di un topic e lo consegna subito a chi si iscrive dopo. Un'app che si apre conosce immediatamente lo stato della luce senza aspettare il prossimo aggiornamento.
  • Last Will and Testament: al momento della connessione il dispositivo comunica al broker un messaggio da pubblicare se si disconnette in modo anomalo. Tipicamente si pubblica «offline» su un topic di disponibilità, così l'hub sa che il dispositivo non risponde.

Un broker in casa

Il broker più diffuso per uso domestico è Mosquitto, leggero e open source. Gira senza problemi su un Raspberry Pi o su un mini PC, spesso accanto all'hub domotico. Molti dispositivi con firmware alternativo, schede ESP32 e strumenti come Zigbee2MQTT lo usano come punto di scambio.

Per verificare che tutto funzioni bastano due comandi dei client a riga di comando, in due finestre diverse:

mosquitto_sub -h 192.168.1.10 -t 'casa/#' -v
mosquitto_pub -h 192.168.1.10 -t 'casa/test' -m 'ciao'

Se nella prima finestra compare il messaggio, broker e rete sono a posto.

Sicurezza: le impostazioni minime

Un broker configurato male permette a chiunque sulla rete di leggere tutti i dati e inviare comandi. Le regole di base sono poche:

  1. autenticazione obbligatoria con utente e password, disattivando l'accesso anonimo;
  2. utenti distinti per dispositivi diversi, con permessi limitati ai topic necessari;
  3. cifratura TLS, soprattutto se il traffico esce dalla rete locale: la porta standard senza cifratura è la 1883, quella con TLS la 8883;
  4. nessuna esposizione diretta su internet: per l'accesso da fuori meglio passare da una VPN.

Quando MQTT non serve

Con pochi dispositivi dello stesso ecosistema, o con dispositivi Matter, l'hub gestisce già la comunicazione e MQTT aggiunge solo complessità. Diventa utile quando si costruiscono dispositivi propri, si integrano marchi diversi o si vogliono far parlare tra loro sistemi separati.

In sintesi

  • MQTT usa un broker centrale e il modello publish/subscribe per far comunicare i dispositivi.
  • I topic sono gerarchici; i jolly + e # permettono iscrizioni multiple.
  • Il livello QoS va scelto in base all'importanza del messaggio.
  • Retained e Last Will danno stato immediato e rilevamento delle disconnessioni.
  • Autenticazione, permessi per topic e niente esposizione su internet sono il minimo indispensabile.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica e in psicologia, unisce l'analisi tecnica alla comprensione del fattore umano.

Leggi anche