Far colloquiare dispositivi eterogenei, soprattuto in ambito IoT e domotica, é un requisito indispensabile. Mosquitto MQTT broker, é un companion efficace per tutti quelli che vogliono introdurre MQTT nel proprio progetto. Vediamo nel dettaglio di cosa si tratta e come possiamo installarlo ed usarlo.
Che cosa é MQTT ?
MQTT é un protocollo di comunicazione M2M (machine-to-machine) ed é usatissimo per mettere in comunicazione, attraverso un sistema publish/subscribe, piú dispositivi IoT, sfruttando una larghezza di banda esigua.
Installiamo Mosquitto MQTT broker su Docker
Come avrete notato nel precedente articolo, ogni volta che necessito di provare un nuovo servizio, prediligo installarlo in un container Docker, anziché direttamente sul mio Mac. Il motivo principale é che non voglio ritrovarmi il sistema operativo pieno zeppo di roba inutile, ma anche il fatto che possa provare il servizio in un ambiente simile a quello definitivo é da considerare (macOS, anche se dotato di shell e dispone di gestore di pacchetti come homwbrew, non sará mai linux).
Quindi, una volta installato Docker, prepariamo i files, esterni al container, necessari per poter configurare mosquitto. Partendo da una directory a vostra scelta:
mkdir ./mosquitto/data
mkdir ./mosquitto/config
mkdir ./mosquitto/log
Come é facile intuire, la prima directory servirá a contenere i dati del broker, la seconda i files di configurazione e la terza i log per l’analisi futura.
Scriviamo il nostro file di configurazione, per semplicitá potete scaricare il mio da questo link e personalizzarlo come volete. Per chiarezza, ho attuato queste modifiche al file:
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
A questo punto lanciamo il docker run, permettendo a Docker di scaricare l’immagine dal Docker Hub e avviando il container con i volumi selezionati:
docker run -itd --name mosquittovixrit -p 1884:1883 -p 9002:9001 -v ~/mosquittovixrit/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf -v ~/mosquittovixrit/mosquitto/data:/mosquitto/data -v ~/mosquittovixrit/mosquitto/log:/mosquitto/log eclipse-mosquitto
Nota: avendo altri container basati su eclipse-mosquitto, non ho potuto mappare le porte locali native (1883 e 9001) ma ho dovuto cambiarle altrimenti docker va in errore.
Nel terminale dovreste notare:
Lanciando poi i comandi di stop e start vi sará possibile controllare il container:
docker stop mosquittovixrit
docker start mosquittovixrit
Come verifico che Mosquitto MQTT stia funzionando correttamente ?
Accedendo alla directory dei log, vi sará possibile capire se ci sono errori e se il servizio sta funzionando correttamente. Nel mio caso, eseguendo un head del file ottengo:
Nel mio caso il log non mostra nulla di anomalo, ci avvisa che é stato avviato il servizio e che é stato caricato il file mosquitto.conf (da noi mappato in fase di run). Fate attenzione perché quelle riportate nel log sono informazioni realtive solo al container, non all’host, ovviamente.
Primo utilizzo: MQTT fx
Il nostro broker, quindi, é pronto all’uso. Per apprendere le caratteristiche di base, iniziamo scaricando un tool molto utile per chi sviluppa con MQTT:
Scarica MQTT fx dal sito ufficiale
Scaricatelo ed installato (é presente una versione per ogni sistema operativo), appena avviato dovreste visualizzare questa interfaccia:
Per prima cosa dovete cliccare sull’icona a forma di ingranaggio alla sinistra del tasto “Connect”, in questo modo produrremo un profilo con i dati del nostro Mosquitto MQTT Broker, appena installato su Docker.
Per il vostro profilo, basatevi sul comando docker run che avete eseguito, se la porta locale che mappa quella dal container 1883, come nel mio caso, é 1884, lasciate la stessa impostazione che vedete nell’immagine. Cambiate il campo “Broker status” con quello appropriato (fate riferimento alla vostra installazione di Docker). Terminata la compilazione del profilo, lasciando inalterati per ora i dati, premete “OK” in modo da tornare alla schermata precedente.
Per verificare che la connessione tra MQTTfx e il vostro broker avviene correttamente, cliccate il tasto “Connect”, se tutto fila liscio dovreste notare il testo “connected” sulla destra.
Come provare MQTT publish e subscribe
Partiamo dal subscribe, selezionando il tab “Subscribe“, impostiamo il nostro primo topic, nel mio esempio é “/vixrit/test/temperatura“, trascurando per ora il significato di QoS 0-2, avviate il subscriber premendo il tasto “Subscribe“.
Aperto il subscriber, simuliamo un publisher. E’ scontato il fatto che, publisher e subscriber, possono essere macchine differenti, per semplicitá ci limiteremo ad usare la stessa.
Nel tab publisher, compiliamo il campo di testo con lo stesso topic inserito nel subscriber e, inserendo un valore nella parte bassa, ad esempio 23.2, premete su “Publish“:
Fatti vari invii con valori differenti, noterete che il subscriber inizia a ricevere i messaggi:
Un caso reale
Con l’esempio sopra riportato, avrete capito che MQTT permette a piú entitá di colloquiare fra di loro. Alcune possono “sottoscrivere” delle informazioni che altri dispositivi “pubblicano” in maniera sistematica, ricorrente o legata ad un evento.
Un caso reale potrebbe essere quello di creare due nodi IoT, uno switch wifi ed un relè wifi. Una volta mappati i dovuti topi con il broker Mosquitto MQTT, potremmo usare lo switch da publisher, per inviare un messaggio al broker e sottoscrivere il relè ad un topic per pilotarne il cambio di stato.
Sto lavorando ad un articolo in cui vi descriverò in modo più completo come progettare e realizzare questa soluzione, per cui non vi resta che mettete Like alla pagina facebook e restate connessi per gli aggiornamenti!
Ciao, mi chiamo Alessandro Lanni. Sono un professionista nel settore IT, ho iniziato la carriera da sviluppatore nel 2002. Mi appassiona l’elettronica amo condividere il know-how: “Cercare risposte e’ meglio che fare domande”
Una risposta.
Buonasera,
mi chiamo Dario e mi sto approcciando per la prima volta a node red.
Quello che vorrei ottenere con questo “strumento” è poter accendere delle luci, cliccando un tasto di accensione presente su un sito web che ho creato (e che gira su nodejs)
Ho già verificato che cliccando questo tasto di accensione (creato sul sito), riesco a raggiungere node red sulla porta 1880 (tramite http), ma da qui non saprei poi come procedere per mandare l’input alla lampada.
Da quello che sto leggendo un po su internet, sembra che debba collegare raspberry PI al computer, e dal raspberry collegare questa lampada, è corretto? E’ possibile collegare questa lampada direttamente al computer?
Grazie in anticipo
Dario