Hai deciso di collegare sensori, attuatori o dispositivi smart in un progetto IoT. Il primo ostacolo è farli parlare tra loro in modo affidabile e senza consumare dati inutili. Il protocollo giusto lo trovi già installato su migliaia di sistemi embedded, e si chiama MQTT. Noi di Meteora Web lo usiamo ogni volta che dobbiamo connettere hardware a un backend che deve restare leggero e reattivo. In questa guida vediamo cos'è, come funziona, come configurarlo su un server e come evitare gli errori più comuni.
Perché MQTT è il protocollo più usato nell'IoT industriale?
MQTT (Message Queuing Telemetry Transport) è un protocollo di messaggistica publish/subscribe pensato per reti a bassa larghezza di banda, alta latenza e dispositivi con risorse limitate. A differenza di HTTP, dove ogni client interroga il server con richieste continue, in MQTT i dispositivi pubblicano messaggi su un topic e chi è interessato li riceve tramite sottoscrizione. Il broker fa da smistatore centrale. Questo elimina il polling e riduce drasticamente il traffico di rete. Un sensore che invia temperatura ogni 5 minuti con HTTP consuma centinaia di byte di header; con MQTT bastano pochi byte. Per questo è lo standard di fatto in smart home, automazione industriale, agricoltura di precisione e logistica.
Sponsored Protocol
Esempio concreto: In un progetto di monitoraggio serre realizzato da noi, abbiamo collegato 24 sensori a un broker Mosquitto su un Raspberry Pi. Ogni sensore pubblicava su topic come serra/temperatura/01. Il backend si sottoscriveva e aggiornava un database. Risultato: consumi di banda ridotti del 90% rispetto a HTTP, batterie dei sensori durate 18 mesi invece di 4.
Come funziona un broker MQTT e quali scegliere?
Il broker è il cuore della rete MQTT. Riceve i messaggi dai publisher e li inoltra a tutti i subscriber del topic. I topic sono gerarchici: casa/soggiorno/temperatura. I client possono usare wildcard: casa/+/temperatura per tutti i sensori temperatura di ogni stanza, oppure casa/# per tutto. Il broker gestisce anche qualità del servizio (QoS): 0 (al massimo una volta), 1 (almeno una volta), 2 (esattamente una volta). Per applicazioni critiche usa QoS 1 o 2; per dati statistici va bene 0.
Broker consigliati per ambienti reali:
- Eclipse Mosquitto — open source, leggero, perfetto per server Linux. Lo usiamo su tutte le installazioni che gestiamo.
- EMQX — scalabile, clustering nativo, utile per reti con migliaia di dispositivi.
- HiveMQ — broker enterprise con supporto MQTT 5, ma a pagamento.
- VerneMQ — alternativa open source, buona tolleranza ai guasti.
Per iniziare, Mosquitto è la scelta migliore: si installa con un comando e si configura in pochi minuti.
Sponsored Protocol
Installazione e configurazione base di Mosquitto su Ubuntu/Debian
# Installazione
sudo apt update
sudo apt install mosquitto mosquitto-clients
# Verifica che il broker sia in esecuzione
sudo systemctl status mosquitto
# Modifica il file di configurazione
sudo nano /etc/mosquitto/mosquitto.conf
Aggiungi queste linee per una configurazione minima funzionante (accesso non autenticato, solo locale):
listener 1883 0.0.0.0
allow_anonymous true
Attenzione: questa configurazione è solo per test. Mai esporre un broker anonimo su internet. Dopo il salvataggio, riavvia:
sudo systemctl restart mosquitto
Ora puoi testare con due terminali: uno si sottoscrive, l'altro pubblica.
# Terminale 1 (subscriber)
mosquitto_sub -h localhost -t "test/topic"
# Terminale 2 (publisher)
mosquitto_pub -h localhost -t "test/topic" -m "Ciao MQTT"
Se vedi il messaggio, il broker funziona.
Quali sono gli errori di sicurezza più comuni con MQTT e come evitarli?
Il più frequente? Lasciare l'accesso anonimo su broker esposti pubblicamente. Abbiamo visto reti di sensori aziendali accessibili da chiunque perché il broker ascoltava su 0.0.0.0:1883 senza credenziali. Un attaccante può leggere tutti i dati dei dispositivi e persino pubblicare comandi. Ecco le misure minime obbligatorie:
Sponsored Protocol
- Username e password: configura una password file con
mosquitto_passwd. - TLS/SSL: usa certificati (Let's Encrypt o autofirmati) per cifrare il traffico. I client si connettono su porta 8883.
- Firewall: limita l'accesso al broker solo agli IP dei dispositivi o della rete interna.
- Topic ACL: definisci chi può pubblicare su quali topic e chi può sottoscriversi.
Configurazione di Mosquitto con autenticazione e TLS
# Crea un file password (utente: mqtt_user, password: StrongP@ss123)
sudo mosquitto_passwd -c /etc/mosquitto/passwd mqtt_user
# (inserisci la password due volte)
Modifica /etc/mosquitto/mosquitto.conf:
listener 8883
certfile /etc/mosquitto/certs/cert.pem
keyfile /etc/mosquitto/certs/key.pem
listener 1883 localhost
password_file /etc/mosquitto/passwd
allow_anonymous false
Riavvia Mosquitto. Ora solo client autenticati possono connettersi, e la porta esposta (8883) è crittografata.
Come integrare MQTT con un backend PHP/Laravel o Python?
Per ricevere messaggi in un'applicazione web, hai due strade: usare un client MQTT lato server oppure un bridge. Noi in Meteora Web preferiamo usare un demone Python che si sottoscrive e inserisce i dati in un database MySQL, oppure direttamente in Laravel con pacchetti come PhpMqtt/Client.
Sponsored Protocol
Esempio con PhpMqtt/Client in Laravel
composer require php-mqtt/client
use PhpMqtt\Client\MqttClient;
use PhpMqtt\Client\ConnectionSettings;
$server = 'localhost';
$port = 1883;
$clientId = 'laravel_mqtt_' . uniqid();
$mqtt = new MqttClient($server, $port, $clientId);
$connectionSettings = (new ConnectionSettings)
->setUsername('mqtt_user')
->setPassword('StrongP@ss123');
$mqtt->connect($connectionSettings, true); // true = use clean session
// Sottoscrizione
$mqtt->subscribe('sensori/#', function ($topic, $message) {
// Salva nel database
$data = json_decode($message, true);
SensorReading::create([
'topic' => $topic,
'value' => $data['value'] ?? $message,
'timestamp' => now(),
]);
}, 1); // QoS 1
// Il loop rimane in ascolto fino a interruzione
$mqtt->loop(true);
Nota: in produzione non eseguire questo script in un processo web (PHP-FPM). Lancia un worker separato (es. con Supervisor) che tiene la connessione aperta.
Domande frequenti su MQTT nel contesto PMI
MQTT è adatto a progetti IoT su larga scala?
Sì, se il broker è scalabile. EMQX e VerneMQ supportano clustering e milioni di connessioni simultanee. Per una PMI con centinaia di sensori, un singolo Mosquitto su un VPS da 2 GB basta e avanza.
Sponsored Protocol
Posso usare MQTT su dispositivi a bassissimo consumo?
Assolutamente sì. MQTT è nato per sensori a batteria. Con QoS 0 e topic brevi si riduce il payload. Esistono varianti come MQTT-SN (per sensori su reti non TCP).
Quale versione di MQTT usare?
MQTT 3.1.1 è ancora lo standard più diffuso e stabile. MQTT 5 introduce funzionalità come session expiry e user properties, ma non sempre necessario.
Cosa fare adesso
- Installa Mosquitto su un server Linux (locale o VPS) e verifica la comunicazione con
mosquitto_pub/mosquitto_sub. - Proteggi subito il broker: anche se è solo per test, aggiungi un utente e una password.
- Collega un sensore reale: un ESP8266 o ESP32 con libreria PubSubClient può pubblicare dati reali.
- Integra i dati in un backend web usando il pacchetto PHP o uno script Python.
- Consulta la nostra guida completa su IoT e hardware programmabile per PMI per il contesto architetturale.
- Leggi le specifiche ufficiali MQTT per approfondire QoS e wildcard.