f in x
MQTT per IoT — Come Progettare una Rete di Dispositivi che Comunica senza Sprechi
> cd .. / HUB_EDITORIALE > Visualizza in Inglese
Hardware, architetture & componenti

MQTT per IoT — Come Progettare una Rete di Dispositivi che Comunica senza Sprechi

[2026-07-10] Author: Ing. Calogero Bono
Zenithby Meteora Web Il sistema operativo della tua attività. Social, clienti, prenotazioni e fatture in un'unica piattaforma. Palestre, barber, professionisti. Scopri Zenith Demo gratis · senza carta

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

  1. Installa Mosquitto su un server Linux (locale o VPS) e verifica la comunicazione con mosquitto_pub/mosquitto_sub.
  2. Proteggi subito il broker: anche se è solo per test, aggiungi un utente e una password.
  3. Collega un sensore reale: un ESP8266 o ESP32 con libreria PubSubClient può pubblicare dati reali.
  4. Integra i dati in un backend web usando il pacchetto PHP o uno script Python.
  5. Consulta la nostra guida completa su IoT e hardware programmabile per PMI per il contesto architetturale.
  6. Leggi le specifiche ufficiali MQTT per approfondire QoS e wildcard.
Ing. Calogero Bono

> AUTHOR_EXTRACTED

Ing. Calogero Bono

Ingegnere informatico, fondatore di Meteora Web e Zenith OS. System administrator e progettista di piattaforme, app e CMS proprietari, con esperienza in sviluppo full-stack, marketing digitale ed ecosistema Google.
[ Read Full Dossier ]

> METEORA_WEB // WEB AGENCY

Costruiamo la presenza digitale che la tua azienda merita.

Siti web, social, pubblicità online, e-commerce e hosting performante: ingegnerizzati con metodo da ingegneri informatici a Sciacca, per tutta Italia.

> MW_JOURNAL

> READ_ALL()