MQTT (ISO/IEC PRF 20922) è un protocollo binario di trasmissione dati client-server leggero, semplice e realizzato per essere implementato rapidamente anche in progetti già finiti. Queste caratteristiche lo rendono ideale per essere usato in molteplici situazioni come per esempio gli ambienti di comunicazione Macchina-Macchina (M2M) e l'Internet delle Cose, dove è maggiormente richiesto un certo risparmio sia nel codice eseguito sui dispositivi sia nella banda di comunicazione per interscambio dati in condizioni critiche come la comunicazione in tempo reale. MQTT è attualmente usato da un po tutti i servizi cloud e si candida a diventare il protocollo di riferimento per la trasmissione massiccia di dati in tempo reale.
Al posto del modello client/server di HTTP, il protocollo MQTT adotta un meccanismo di pubblicazione e sottoscrizione per scambiare messaggi tramite un appostivo "broker". Invece di inviare messaggi a un determinato set di destinatari, i mittenti pubblicano i messaggi su un certo argomento (detto topic) sul broker, ogni destinatario si iscrive 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 modo è molto semplice configurare una messaggistica uno-a-molti.
Ogni topic è composto da diversi livelli (topic levels) i quali sono delle stringhe composte da caratteri e simboli con codifica UTF-8 case sensitive (tiene conto delle lettere maiuscole e minuscole).
Nel nostro sistema ogni topic level serve ad identificare un determinato valore (Tag) che arriva nel nostro sistema seguendo una precisa logica:
<prefisso>/<zona>/<sub-zone>.../<nome/id_dispositivo>/<tags_variabile>.../<tipo_variabile>
impianto1/produzione/linea1.setpoint/max setpoint/min.temperature, kwh, watt, status, command, lux, baron-board/impianto1/centrale_termica/trasformatore1/total/kwh
Il topic va letto da destra a sinistra: qui riceverò tutti gli updates dei kwh totali del trasformatore1 della centrale_termica dell'impianto1.
on-board/casa/piano_terra/cucina/termostato/temperature
Il nostro sistema riserva alcuni topic. Ogni topic riservato presenta una forma del tipo:
<prefisso>/_<nome_riservato>
Tra i nomi riservati troviamo:
Il payload nel protocollo MQTT rappresenta il dato che viene spedito. Il nostro sistema supporta diversi tipi di payload:
{
"value": 25,
"time": 1557741542
}
{
"value": 25
}
Il campo time, se presente, sarà utilizzato per inserire il valore nel database con quell'ora, se non presente verrà utilizzata l'ora di ricezione del dato.
Questo campo accetta anche date in formato stringa. Esempio: "Mon May 13 2019 12:02:46 GMT+0200", "2019-05-13T10:03:26.889Z" ecc...
Nel caso non si voglia storicizzare un valore basta inserire un campo "dontStore": true nel JSON.
25. Il dato verrà storicizzato utilizzando l'ora del momento di ricezione del valore.N.B: Nel caso i dispositivi interessati non pubblichino i valori nel formato richiesto è possibile utilizzare il nostro software Mqtt2Mqtt