IoT Worlds
MQTT
BlogDispositivi Smart

Il significato di MQTT per connettere dispositivi IoT con applicazioni Web

Con tutti i protocolli di messaggistica disponibili, può essere difficile sceglierne uno solo. E con così tante opzioni disponibili, è fin troppo facile trovarsi in una situazione in cui ne provi una che non funziona per te o per il tuo team. Mqtt è un protocollo leggero che richiede solo client e broker, quindi è perfetto per le situazioni in cui non vuoi problemi. Questo articolo esplorerà di cosa è capace questo protocollo e come raggiunge queste cose!

Cos’è MQTT?

Mqtt è un protocollo di messaggistica leggero che richiede solo client e broker. È perfetto per le situazioni in cui non vuoi problemi o complicazioni, perché richiede così poco da te.

Che cos’è un protocollo di messaggistica?

Un protocollo di messaggistica è un insieme di regole utilizzate per consentire alle applicazioni su macchine diverse di comunicare. Mqtt è stato progettato specificamente per l’Internet delle cose (IoT). Con una gamma così ampia di altri protocolli disponibili, può sembrare strano crearne un altro per questo scopo. Ma, dal momento che così tanti dispositivi e servizi si basano su questo campo, probabilmente ne vedremo sempre di più nel tempo!

Cosa c’è di così bello in MQTT?

Mqtt è davvero unico, perché ti dà così tanto con quasi niente. Non hai bisogno di un server dedicato o di un forwarder come fanno molti altri protocolli, il che significa che nessun mal di testa per l’infrastruttura. Tutto ciò di cui hai bisogno è un broker già esistente e qualsiasi hardware con una connessione a Internet. Grazie alla qualità del suo lavoro e alla sua leggerezza, questo protocollo sta diventando sempre più popolare. Poiché è open source e gratuito, puoi iniziare facilmente senza dover pagare commissioni o costi di abbonamento. E con il supporto del broker integrato nella libreria MQTT per Arduino, siamo entusiasti di vedere quali grandi prodotti arriveranno sulla nostra strada.

Quali sono le caratteristiche di MQTT?

Mqtt è uno dei migliori esempi di protocollo di messaggistica semplice e leggero che troverai. Il suo principale punto di forza è la facilità d’uso: qualsiasi dispositivo con una connessione Internet può sfruttare ciò che questo protocollo ha da offrire. Ma c’è molto di più della semplice facilità d’uso di questo protocollo. Esploriamo cos’altro puoi aspettarti da esso!

Esempi di utilizzo di MQTT

un. Dispositivi IoT in una fabbrica che controlla pompe e valvole

B. Una stazione meteorologica con un sensore che segnala a un database sul cloud

C. Un sistema di allarme che segnala quando le porte si aprono o si chiudono

D. Alcune luci in un ufficio si accendono quando viene rilevato un movimento

1. Che cos’è MQTT e quali sono le sue caratteristiche?

MQTT sta per Message Queuing Telemetry Transport, che potrebbe sembrare complicato ma significa semplicemente che è un modo per i dispositivi IoT di comunicare tra loro tramite Internet. Funziona su TCP/IP come HTTP, SMTP ecc., ma a differenza di HTTP che serve per comunicare su Internet, MQTT viene utilizzato con dispositivi collegati tra loro con una rete, di solito una rete IP. È più comunemente usato nell’IoT con dispositivi embedded a bassa potenza che si connettono a cose come Raspberry Pi o schede Arduino.

2. Come funziona?

Funziona un po’ come la posta elettronica. Un dispositivo IoT pubblica un messaggio in un argomento. È come inviare un’e-mail a qualcuno, ma invece di una persona è il nome di un argomento. Il messaggio può contenere fino a 2kb di dati e viene inviato come pacchetto.

Un secondo abbonato MQTT ascolta i pacchetti con il proprio ID univoco o ID client. Quindi fa qualcosa con il messaggio. È come quando qualcuno riceve un’e-mail, ci fa qualcosa; leggerlo, inviarlo da qualche altra parte ecc.

MQTT ha un livello di qualità del servizio (QoS), il che significa che possono esserci diversi livelli di priorità per i messaggi. Il livello di QoS è impostato dal client e ogni pacchetto inviato ha quel livello di priorità.

3. Vantaggi di MQTT

È leggero, funziona su TCP/IP, meno sovraccarico di HTTP

I messaggi vengono archiviati in una coda finché non possono essere inviati al dispositivo di destinazione

Ha il supporto di riconnessione integrato

Ogni client può avere la propria configurazione di sicurezza per l’autenticazione e la crittografia

QoS consente ai diversi tipi di messaggio di avere diversi livelli di priorità

4. Applicazioni di MQTT

Alcuni esempi di come viene utilizzato nel mondo reale sono con M2M Alliance, un progetto che mira a connettere “cose” con una piattaforma sicura per il trasferimento di dati tra dispositivi. Un altro caso d’uso è con il progetto CEPH. Questo è un sistema di archiviazione cloud in grado di archiviare e condividere file contemporaneamente a più utenti. Utilizza MQTT per proteggere l’accesso distribuito crittografando i dati, che consente di trasferirli tra dispositivi IoT utilizzando vari gateway senza doversi preoccupare della sicurezza dei dati.

5. Iniziare con MQTT

La prima cosa di cui hai bisogno è un client MQTT; questa è l’applicazione che invia e riceve messaggi. La fondazione Raspberry Pi ha una guida per iniziare con MQTT sul tuo dispositivo Pi. Ci sono anche altre guide disponibili là fuori come questa di Hackster che ti dà il codice da eseguire sul linguaggio di programmazione Python.

I migliori corsi online MQTT

  1. Padroneggiare MQTT
  2. Protocollo MQTT principale
  3. Sviluppa l’app Android client MQTT
  4. Masterclass MQTT
  5. Padroneggiare il protocollo MQTT: guida di livello da principiante a avanzato
  6. IoT: MQTT con Adafruit, App Inventor ed ESP8266
  7. MQTT Nodemcu (ESP8266) con nodo, Wi-Fi e Bluetooth

TLS e SSL per la creazione di un broker MQTT

Vantaggi dell’utilizzo di TLS:

-Sicurezza: TLS fornisce una connessione sicura tra il client e il broker. Questo aiuta a proteggersi dagli attacchi e dalle intercettazioni man-in-the-middle.

-Autenticazione: TLS fornisce l’autenticazione del broker e del client, contribuendo a garantire che solo i client autorizzati siano in grado di connettersi al broker.

-Crittografia: TLS fornisce la crittografia dei dati tra il client e il broker, aiutando a proteggere le informazioni dall’essere viste da persone non autorizzate.

Contro dell’utilizzo di TLS:

-Prestazioni: TLS può aggiungere un sovraccarico alle comunicazioni, riducendo le prestazioni.

-Certificati: per utilizzare TLS, sono necessari certificati sia per il client che per il broker. Questi certificati possono essere difficili da ottenere e possono essere costosi da usare, il che può aumentare il costo dell’utilizzo di TLS.

Vantaggi dell’utilizzo di SSL:

-Sicurezza: SSL fornisce una connessione sicura tra il client e il broker, proprio come TLS. Aiuta anche a proteggere dagli attacchi e dalle intercettazioni man-in-the-middle.

-Certificati: poiché SSL è basato su TLS, puoi utilizzare gli stessi certificati per crittografare il traffico.

Contro dell’utilizzo di SSL:

-Prestazioni: la crittografia tra il client e il broker aggiungerà un sovraccarico alle comunicazioni, riducendo le prestazioni.

-Utilizzo della memoria: il protocollo SSL utilizzerà più memoria rispetto ad altri protocolli perché mantiene una sessione di crittografia/decrittografia con il broker.

-Problemi di versione: SSL è un protocollo meno recente e non supporta alcune delle funzionalità fornite da TLS (ad es. cifrature più recenti).

Come puoi vedere, TLS e SSL forniscono entrambi sicurezza, autenticazione e crittografia per la comunicazione tra client e broker; tuttavia lo fanno in modi leggermente diversi. Non c’è un vincitore chiaro quando si tratta di decidere se utilizzare TLS o SSL per il tuo broker MQTT, poiché la decisione dipenderà da ciò di cui hai bisogno dalla tua infrastruttura e da quanto tempo/denaro hai a disposizione.

In conclusione direi che c’è una risposta giusta a seconda delle esigenze del progetto. In questo caso è meglio utilizzare TLS, poiché offre più vantaggi rispetto a SSL.

I 5 principali motivi per utilizzare il protocollo MQTT nei tuoi progetti IoT

MQTT è un protocollo di messaggistica machine-to-machine (M2M), progettato per dispositivi con risorse limitate, che collega i dispositivi al cloud.

1. È leggero e facile da usare: MQTT è un protocollo di messaggistica di pubblicazione/sottoscrizione progettato per essere leggero e facile da usare.

2. Ha un ingombro ridotto: MQTT utilizza circa 1/10 della larghezza di banda di HTTP, rendendolo ideale per applicazioni IoT con risorse di rete limitate.

3. Supporta QoS: MQTT supporta Quality of Service (QoS), che garantisce la consegna dei messaggi alla latenza o alla qualità desiderata.

4. Può funzionare su qualsiasi rete: MQTT è un protocollo multipiattaforma che può funzionare su reti cellulari WiFi, Bluetooth Low Energy (BLE) o 2G/3G.

5. Ha diverse librerie client disponibili in molti linguaggi di programmazione: ci sono librerie client per C, C++, JavaScript, Arduino IDE, Python e Java.

Come configurare un broker MQTT utilizzando un Docker Container sul tuo PC o un server VPS?

MQTT è un protocollo di messaggistica da macchina a macchina (M2M)/”IoT”, progettato come un trasporto di messaggistica di pubblicazione/sottoscrizione estremamente leggero. È utile per le connessioni con località remote in cui è richiesta una piccola impronta di codice e/o la larghezza di banda della rete è ridotta.

In questo articolo, ti mostreremo come configurare un broker MQTT utilizzando un container Docker sul tuo PC o un server VPS.

Docker è un motore di containerizzazione che ti aiuta a distribuire facilmente le tue applicazioni con tutte le sue dipendenze. Fornisce un ambiente coerente su ciascun host Docker, consente di risparmiare tempo e migliorare la portabilità del codice tra varie distribuzioni Linux. Ad esempio, se qualsiasi applicazione che dipende da un gran numero di librerie di sistema o da alcune versioni di librerie rare, e quindi non facilmente portabile, puoi semplicemente avvolgerla e distribuirla come un contenitore Docker.

1) Installazione di Docker per Windows/Mac

Docker è disponibile per gli utenti di Microsoft Windows e Mac OS X. Puoi scaricare la versione appropriata da qui: https://docs.docker.com/docker-for-windows/install/.

2) Installazione di Docker-compose sul tuo host

Per distribuire facilmente il nostro broker MQTT fatto in casa, utilizzeremo lo strumento di composizione mobile. Ti consente di definire ed eseguire applicazioni Docker multi-container utilizzando un semplice file YAML. Puoi saperne di più su docker-compose da qui: https://docs.docker.com/compose/.

Puoi scaricare lo strumento docker-compose da qui: https://github.com/docker/compose/releases/. Una volta fatto, dovresti essere in grado di eseguire il comando ‘docker-compose’ nel tuo terminale e verificarne la versione o utilizzare uno dei suoi sottocomandi.

Terminologia di base di Docker per questo articolo:

1) “Contenitore Docker” è il processo che viene eseguito in background quando si esegue un’immagine utilizzando il comando docker run. Un’istanza in esecuzione di un’immagine è chiamata ‘contenitore’, per quanto riguarda la sua creazione durante la build docker.

2) “Immagine Docker” è un modello di sola lettura con le istruzioni per creare un contenitore Docker. È composto da una serie di livelli di filesystem che rappresentano diversi stati dell’immagine finale che vogliamo creare

3) Il comando copy at docker build crea un’immagine leggendone la descrizione da un Dockerfile nella directory di lavoro corrente e quindi eseguendo il comando appropriato in un nuovo livello sopra l’immagine corrente.

4) I “Volumi” sono cartelle che ti consentono di mappare le cartelle locali sul tuo computer host alle directory all’interno dei contenitori della finestra mobile. Ciò è utile se, ad esempio, desideri archiviare alcuni dati sul tuo contenitore o sui file di configurazione. È possibile creare un volume specificando il percorso della cartella dal sistema host tramite Docker Run.

Il file YAML è un file di configurazione che contiene informazioni per la connessione a un database esterno, server MQTT ecc., nonché informazioni su come e quali contenitori devono essere creati. Creeremo un file YAML per configurare il nostro broker nella prossima sezione.

3) Creazione del file YAML per configurare il tuo broker MQTT

I file YAML sono in genere composti da diverse coppie chiave-valore, che sono collegate da due punti (“:”). Puoi saperne di più su YAML da qui: https://en.wikipedia.org/wiki/YAML#Syntax.

Nel nostro caso, creeremo un file YAML per configurare il broker MQTT come segue:

versione: “3”

In questa sezione dello YAML, definiamo il nome del contenitore come “homer-mqtt” e specifichiamo l’immagine che dovrebbe essere utilizzata per crearlo. In questo caso, sceglieremo l’immagine “davidtgoldblatt/homer-mqtt” da Docker Hub da qui: https://hub.docker.com/_/homer-mqtt/.

Nel nostro file YAML, dichiariamo anche un paio di volumi come segue:

volumi:

– /var/esegui/docker.sock:/var/esegui/docker.sock

Questi volumi ci consentiranno di avere uno spazio di archiviazione persistente per il contenitore Docker, consentendo alle nostre impostazioni di persistere durante i riavvii e gli arresti anomali del server. Puoi saperne di più sui volumi da qui: https://docs.docker.com/engine/userguide/dockervolumes/.

Per specificare i dettagli del nostro database, aggiungiamo una sezione “db_addresses” con le seguenti voci:

indirizzi_db:

– “host=172.17.0.2 porta=3306 utente=homer dbname=homer”

Nell’esempio sopra, specifichiamo un host e una porta per la nostra istanza di database. Si noti che quando si specifica un utente, è necessario aggiungere un simbolo “@” prima del nome utente. Questo perché il nome utente è composto da lettere e numeri nei sistemi Unix. Se lo ometti, Docker si lamenta di errori come questo:

devi sfuggire a caratteri speciali come @ o *

Per specificare le credenziali del nostro database, aggiungiamo una sezione “database_password” come segue:

password_database: “homerun1”

Nell’esempio sopra, dovresti usare la password di tua scelta. Nel caso in cui desideri impostare una password per il database per la prima volta, puoi consultare la nostra guida su come creare un nuovo utente root senza password qui: https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user .html

Per specificare i dettagli del nostro server MQTT, aggiungiamo una sezione “mqtt_server” con le seguenti voci:

mqtt_server:

– nome: mqtt host: 172.17.0.1 porta: 8883 nome utente: “homerun” password: “homerun1”

Nell’esempio sopra, eseguiamo il broker sulla porta 8883 e utilizziamo il nome utente di “homerun” e la password di “homerun1”, che abbiamo creato nel nostro database.

4) Esegui il tuo broker MQTT con Docker

In questo passaggio, creeremo un contenitore docker dal nostro file YAML e lo eseguiremo.

Per fare ciò, cd nella directory in cui hai il file YAML ed esegui “docker-compose up” come segue:

$ docker-componi

Questo comando creerà un nuovo contenitore Docker in base alla descrizione nel tuo file YAML e lo avvierà.

Se vuoi iniziare questo in background, usa invece “docker-compose up -d”. Se desideri stampare i log del tuo contenitore Docker, esegui “docker-compose logs mqttclient” come segue:

$ docker-compose logs mqttclient

Puoi anche vedere il contenitore docker dal vivo in tempo reale usando “docker-compose ps” come segue:

$ docker-componi ps

5) Eseguire il client MQTT con Docker

In questo passaggio, creeremo un contenitore docker dal nostro file YAML e lo eseguiremo.

Per fare ciò, cd nella directory in cui hai il file YAML ed esegui “docker-compose up” come segue:

$ docker-componi

Questo comando creerà un nuovo contenitore Docker in base alla descrizione nel tuo file YAML e lo avvierà.

Se vuoi iniziare questo in background, usa invece “docker-compose up -d”. Puoi anche vedere il contenitore docker dal vivo in tempo reale usando “docker-compose ps” come segue:

$ docker-componi ps

6) Utilizzo del client MQTT con Docker

Ora che il nostro file YAML è impostato, ora possiamo iniziare a utilizzare il nostro client MQTT con Docker.

Per fare ciò, vai alla directory in cui hai il tuo file YAML ed esegui “docker exec” come segue:

$ docker exec -it mqttclient /bin/bash

Ora dovresti vedere una directory chiamata “/home/homerun” (che è la directory home per il nostro contenitore docker) e dovresti trovarti all’interno di quella directory.

Ora puoi vedere i tuoi database digitando “mysql -uroot -proot” come segue:

$ mysql -uroot -proot

Dovresti vedere tutti i tuoi database sullo schermo. Puoi vedere come creare un nuovo utente root senza password per l’istanza MySQL qui: https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user.html

Per eseguire il comando client MQTT in Docker, devi digitare “sbin/mqtt” come segue:

$ sbin/mqtt -c /home/homerun/config.yaml

Nell’esempio sopra, specifichiamo un file di configurazione con il flag -c, che legge le nostre impostazioni MQTT dal file di configurazione che abbiamo creato in questo tutorial.

Per verificare se il tuo client MQTT è attivo e funzionante, puoi utilizzare “docker-compose ps” come segue:

$ docker-componi ps

Nell’esempio sopra, il nostro client MQTT è stato avviato con successo. Ora dovresti vedere tutti i tuoi database sullo schermo.

Per eseguire il comando client MQTT in Docker, devi digitare “sbin/mqtt” come segue:

$ sbin/mqtt -c /home/homerun/config.yaml

Nell’esempio sopra, specifichiamo un file di configurazione con il flag -c, che legge le nostre impostazioni MQTT dal file di configurazione che abbiamo creato in questo tutorial.

Per verificare se il tuo client MQTT è attivo e funzionante, puoi utilizzare “docker-compose ps” come segue:

$ docker-componi ps

Nell’esempio sopra, il nostro client MQTT è stato avviato con successo. Ora dovresti vedere tutti i tuoi database sullo schermo e puoi provare a pubblicare alcuni messaggi per verificare se tutto funziona correttamente:

$ docker exec -it mqttclient /bin/bash

$ sbin/mqtt publish -t ‘test’ -h 172.17.0.1 -m ‘hello world!’

$ docker exec -it mqttclient /bin/bash

$ sbin/mqtt iscriviti -t ‘test’ -h 172.17.0.1 -u mqttuser

7) Ripulire il client MQTT con Docker

Per arrestare il tuo contenitore mobile, devi eseguire “docker-compose down” come segue:

$ docker-componi verso il basso

8) Ripulire il client MQTT con Docker Volumes

Per impedire la creazione del database mysql e dell’utente mqtt, è possibile utilizzare il flag -v.

$ docker-componi verso il basso -v

Puoi anche ripulire il tuo ambiente eliminando la directory che contiene il tuo file YAML.

Database MySQL e utente mqtt creati con successo! Verranno rimossi automaticamente quando si rimuove il contenitore Docker. Ora puoi uscire da questa shell digitando “exit”.

In questo tutorial, abbiamo visto come configurare il tuo client MQTT tramite un container Docker.

Conclusione

MQTT è un protocollo di connettività machine-to-machine (M2M) o “Internet of Things”. È stato progettato come un trasporto di messaggistica di pubblicazione/abbonamento estremamente leggero. MQTT è utile per connettere sensori a bassa potenza, dispositivi indossabili e altri piccoli oggetti connessi a Internet al cloud. Poiché MQTT utilizza un modello di pubblicazione/abbonamento, è perfetto per i dispositivi che devono inviare dati di rado o in cui la larghezza di banda della rete è ridotta.

Interessato a sviluppare la tua soluzione MQTT? Contattaci!

Related Articles

WP Radio
WP Radio
OFFLINE LIVE