IOT il protocollo MQTT

Home / Knowledge Base / PLC SlimLine/NetSyst Cortex M7/ARM7 / Programmazione LogicLab / Applicazioni / IOT il protocollo MQTT

Come noto il cosiddetto Internet delle cose IoT non è una rete vera e propria, ma una definizione nata dal marketing che sintetizza il crescente utilizzo di microprocessori embedded collegati alla rete. In questo scenario, si rende necessaria la definizione di un protocollo di comunicazione standard sul quale basare le implementazioni IoT: L’Organization for the Advancement of Structured Information Standards (OASIS) ha dichiarato che il protocollo MQTT (Message Queuing Telemetry Transport) di IBM è lo standard di riferimento di comunicazione per l’Internet delle Cose.

Diagramma flusso MQTT

Elsist per i suoi prodotti programmabili in LogicLab offre una libreria dedicata all’IoT che utilizza il protocollo REST (Vedi topic) basato su HTTP, ma a differenza del REST l’MQTT è un protocollo specificatamente studiato per le situazioni in cui è richiesto un basso consumo e dove la banda è limitata. Al posto del modello client/server di HTTP, il protocollo MQTT adotta un meccanismo di pubblicazione e sottoscrizione per scambiare messaggi tramite un appostivo “message broker”. Invece di inviare messaggi a un determinato set di destinatari, i mittenti pubblicano Publisher i messaggi su un certo argomento (detto topic) sul message broker. Ogni destinatario si iscrive Subscriber agli argomenti che lo interessano e, ogni volta che un nuovo messaggio viene pubblicato su quel determinato argomento, il message broker lo distribuisce a tutti i destinatari. In questo articolo un esempio di utilizzo di MQTT per pubblicare dati su un servizio cloud.

Il publisher invia i dati al broker che poi li reinvia ai vari subscribers, il FB MQTTClient permette ai nostri sistemi di agire sia come publisher che come subscriber. Nella pagina del manuale del FB trovate il programma di esempio ST_MQTTClient che eseguito su di un modulo CPU SlimLine pubblica sul broker broker.mqttdashboard.com lo stato di una variabile BOOL sul topic IOCommand e contemporaneamente ne sottoscrive la ricezione dello stato. Esistono moltissimi brokers gratuiti (iot.eclipse.org, test.mosquitto.org, ecc) oltre a servizi più struttrati a pagamento come il CloudMQTT di Amazon.

Allo stesso topic si possono connettere altri publisher ed altri subscriber e questo permette di fare interagire tra di loro diversi dispositivi che possono essere altri moduli SlimLine distribuiti geograficamente e/o altri dispositivi.

Gestione da smartphone

Vediamo come utilizzando una semplice App sullo smartphone (Ne esistono sia per Android che per iOs) sia possibile interagire con il broker sullo steso topic gestito dal nostro SlimLine e ricevere lo stato della variabile Command e/o comandare lo stato della variabile Status. In questo esempio utilizzeremo MyMQTT la più semplice tra le App dedicate all’MQTT.

  1. Per interagire con il topic gestito dal nostro esempio dovremo collegarci al broker.
  2. Sottoscriverci al topic IOCommand, per riceverne le variazioni.
  3. Se pubblichiamo sul topic IOCommand il valore On si attiverà la variabile Status, se pubblichiamo il valore Off la variabile si disattiverà.
Esempio utilizzo MQTT su Smartphone

Esistono moltissime altre Apps per gestire il protocollo MQTT, basterà cercare nello store. Ad ad esempio la Linear MQTT Dashboard, permette di creare delle dashboard personalizzate con interruttori, lampade, bargraph ecc, per visualizare e/o comandare i dispositivi di casa, come fare …

Per gestire la visualizzazione dei valori basterà nel programma sullo SlimLine pubblicare topics diversi per ogni valore (Esempio TCucina per la temperatura cucina, TAcqua per la temperatura acqua, ecc) e pubblicare il relativo valore ciclicamente od ad ogni variazione. Per gestire i comandi basterà sottoscrivere il relativo topic (Esempio ApriCancello per l’apertura del cancello, SetClima per il set point della temperatura, ecc) quando dallo smarphone invierete un nuovo valore al topic esso sarà ricevuto dallo SlimLine.

Installare un broker su SlimLine Raspberry

Abbiamo visto come da programma PLC utilizzare il protocollo MQTTconnettendosi ad un broker pubblico, ma è anche possibile installare nella propria rete un broker per automatizzare lo scambio dati con i vari dispositivi IoT (Esempio i dispositivi Sonoff o Shelly). Vediamo come installare sullo SlimLine Raspberry Mosquitto un broker open source.

Procedura installazione

Collegarsi in SSH allo SlimLine, ed acquisire le chiavi del repository:

sudo wet http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key 

Rendere il repository accessibile al programma di installazione pacchetti apt:

cd /etc/apt/sources.list.d/ 

Scaricare la lista in base alla versione di sistema operativo installato, per verificarlo dare il comando:

cat /etc/os-release 

La versione attuale è la buster, quindi dare il comando:

sudo wget http://repo.mosquitto.org/debian/mosquitto-buster.list 

Ora è possibile eseguire l’installazione:

sudo apt-get update --allow-releaseinfo-change sudo apt-get install mosquitto

Mosquitto viene installato come servizio systemd, ecco i comandi con cui interagire.

systemctl status mosquitto Per vedere il suo stato attuale
sudo systemctl (start|stop) mosquitto Per modificare lo stato della sessione corrente
sudo systemctl (enable|disable) mosquitto Per modificare il comportamento all'avvio (senza influire sullo stato corrente)

Per eseguirlo da console SSH ed avere il report del funzionamento, dopo avere arrestato il servizio è possibile eseguirlo con il comando:

sudo mosquitto -c /etc/mosquitto/mosquitto.conf

Di default il broker accetterà connessioni solo da localhost, se si vuole renderlo accessibile da altri dispositivi su rete ethernet e/o modificare la porta su cui è in ascolto occorre configurare il listener nel file di configurazione /etc/mosquitto/mosquitto.conf.

listener 1883 Attiva solo su localhost
listener 1883 192.168.0.180 Attiva su interfaccia di rete definita
listener 1883 0.0.0.0 Attiva su tutte le interfacce di rete
Was this article helpful?