Articolo aggiornato il 14 aprile 2022
2 - MQTT, perché sì: i vantaggi
3 - HTTP, perché no: gli svantaggi
6 - Le librerie MQTT che usiamo in DuckMa
MQTT è un termine che alla maggior parte di noi probabilmente non dice nulla. Ma se anziché parlare di MQTT, dicessimo HTTP, diverse lampadine si accenderebbero. Per dirla semplice semplice, MQTT è per l’IoT ciò che HTTP è per il web.
MQTT è l’acronimo di Message Queuing Telemetry Transport e indica un protocollo di trasmissione dati TCP/IP basato su un modello di pubblicazione e sottoscrizione che opera attraverso un apposito message broker. In sostanza, i mittenti inviano messaggi relativi ad argomenti specifici, i destinatari si iscrivono ai temi che trovano interessanti e i broker provvedono alla trasmissione dei messaggi tra le due parti.
Tanto i mittenti quanto i destinatari sono client MQTT che possono comunicare esclusivamente attraverso il message broker.
Qualsiasi device o applicazione può essere un client MQTT che si appoggia a un’apposita libreria MQTT a sua volta connessa in rete a un broker MQTT. I broker MQTT gestiscono la ricezione dei messaggi e il successivo invio ai sottoscrittori e fanno anche un’altra cosa interessante: gestiscono le autorizzazioni. Ciò significa che i mittenti e i destinatari possono accreditarsi presso il broker così che questi li riconosca nel momento in cui inviano un messaggio o si iscrivono a uno o più argomenti. In questo modo il broker comprende elementi importanti, per esempio sa che un determinato client può ascoltare un argomento, ma non può scrivere nulla in merito allo stesso argomento. Addirittura, il broker potrebbe gestire in autonomia tutti gli argomenti possibili, bloccando la creazione degli stessi ai client, ma si tratta di una configurazione particolare che non rappresenta lo standard.
Il protocollo MQTT è un protocollo ISO standard. La porta TCP/IP 1883 è riservata dallo IANA (la Internet Assigned Numbers Authority che assegna gli Ip pubblici e le porte standard) all’esclusivo scambio di comunicazioni con MQTT. Lo stesso vale per la porta 8883 per SSL.
Anche una chat di gruppo potrebbe basarsi sul protocollo MQTT.
MQTT è un protocollo di rete leggero e flessibile che garantisce il corretto equilibrio agli sviluppatori IoT:
Vuoi avere maggiori informazioni su come sviluppiamo App IoT in DuckMa?
Fissa in piena autonomia la consulenza gratuita scegliendo giorno e orario in base alla tua disponibilità.
La maggior parte degli sviluppatori ha già una certa familiarità con i servizi web HTTP. Di conseguenza, perché non connettere i dispositivi IoT agli stessi servizi web? Così facendo, il dispositivo potrebbe inviare i suoi dati su richiesta del client e ricevere aggiornamenti dal sistema non appena ottiene una risposta HTTP. Tuttavia, tale percorso di richiesta e risposta incontra limiti piuttosto severi:
Una caratteristica chiave del protocollo MQTT sta nel suo modello di pubblicazione e sottoscrizione. Come accade in tutti i protocolli di trasmissione dati, disaccoppia mittente e destinatario dei dati. Per dirla con il linguaggio di tutti i giorni, il protocollo MQTT non è indirizzato a una singola persona, ma è più simile a un vasto contenitore di oggetti (nel caso specifico di argomenti) in cui ciascuno va a pescare ciò che più gli interessa.
Il protocollo MQTT definisce due tipologie di entità nella rete: un message broker e un certo numero di client. Il broker altro non è che un server che riceve tutti i messaggi da tutti i client per poi indirizzare tali messaggi ai client di destinazione pertinenti. Per client si intende qualsiasi cosa in grado di interagire con il broker per l’invio e la ricezione di messaggi. Un client, dunque, può essere un sensore IoT oppure un’applicazione in un data center che processa dati IoT.
I messaggi MQTT sono organizzati per argomento e i client possono richiedere di leggere e scrivere su qualsiasi argomento, senza limitazioni di sorta. Quindi chi controlla il controllore? In altre parole, chi decide se un cliente possa o meno leggere o scrivere su un argomento? Il broker, Il quale, tuttavia, non andrà necessariamente a limitare la lettura e/o la scrittura, perché saranno i client ad “auto-limitarsi” scrivendo e ascoltando solo ciò che compete loro.
MQTT ha il vantaggio della leggerezza. Consta semplicemente di un’intestazione che definisce la tipologia di messaggio, un argomento testuale e infine un payload.
L’applicazione può utilizzare ogni formato di dati per il carico, come JSON, XML, binario crittografato o Base64, fintanto che i client destinatari possono analizzare il payload.
Ogni messaggio MQTT ha un comando e un payload. Il comando definisce il tipo di messaggio (per esempio, un messaggio CONNECT, SUBSCRIBE o PUBLISH). Tutte le librerie MQTT forniscono modalità semplici per gestire direttamente tali messaggi e possono popolare automaticamente alcuni campi richiesti, come per esempio “messaggio” e “client Id”.
Per ulteriori informazioni circa le tipologie di messaggio disponibili, puoi consultare la documentazione ufficiale.
In DuckMa utilizziamo le seguenti librerie per la comunicazione via MQTT:
Vuoi parlare con un Esperto IoT per avere maggiori informazioni?
Fissa in piena autonomia la consulenza gratuita scegliendo giorno e orario in base alla tua disponibilità.