MQTT API
Qui viene descritto come connettere dispositivi di qualsiasi tipo, in grado di comunicare con il protocollo MQTT.
Requisiti
Affinché possiate integrare i vostri dispositivi è necessario aver configurato come scheda Master una delle nostre schede o un nostro dispositivo Gateway.
MQTT
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.
La scheda Master del Sistema (o il Gateway che forniamo in impianti privi di schede) fa le veci del Broker, quindi il dispositivo è ad essa che si deve connettere.
Connessione al Broker
Dall'applicazione tecnico potete ottenere l'indirizzo IP della scheda Master, quindi per la connessione al Broker è sufficiente definire:
Porta: 1883
Indirizzo Server: IP scheda Master o
ohmb-master.local
Consigliamo di impostare un indirizzo IP statico per la scheda Master, per evitare che questo cambi in seguito a riavvii della scheda o del router.
Configurazione Elemento
Per poter integrare output e input via MQTT è necessario, in fase di configurazione di un elemento, definire MQTT come tipo di collegamento.
Di seguito gli elementi che supportano questo tipo di connessione:
Output
Input
Sensori
Led RGB
Variabili Virtuali
Questi i parametri che possono essere definiti:
Topic Lettura
Topic Scrittura (solo Output e Led RGB)
Path Messaggio (payload)
Path Messaggio
Tale parametro va definito solo nel caso in qui il messaggio (o payload) contenga un JSON. Il path permette infatti di definire il percorso per l'ottenimento del valore.
Se abbiamo ad esempio il seguente JSON:
i path per ottenere i valori di temperatura e umidità saranno:
Temperatura:
temp/value
Umidità:
hum/value
Se il JSON contenesse un array (lista) come in questo caso:
i path da definire saranno:
Temperatura:
sensors/0/value
Umidità:
sensors/1/value
Publish
I topic per la pubblicazione degli stati non devono avere un formato particolare, ma è importante che siano univoci per ciascun input e output che desiderate integrare; è invece importante che il messaggio contenga soltanto il valore.
Quindi se vogliamo integrare un sensore di temperatura, il topic potrebbe essere test/temperatura
e il messaggio il valore numerico che vogliamo comunicare.
Non ci sono vincoli sull'origine del valore numerico, potrebbe ad esempio trattarsi di un valore di temperatura ottenuto tramite internet sfruttando qualche API Meteo, o in seguito alla digitazione di un valore da tastiera.
Di seguito il formato del valore da inviare a seconda del tipo di elemento:
Sensore: invio del valore numerico con
.
come separatore decimale (es.23.4
).Input: inviare 0 nel caso di input non verificato, 1 se verificato.
Output Digitale (relè): 0 se disattivo, 1 se attivo.
Output Analogico: valore tra 1 (o valore minimo di dimmerazione) e 255 (o valore massimo di dimmerazione) se attivo; se è disattivo va inviato
0:x
, dovex
è il valore prima di essere disattivato (es.0:130
).Variabile Virtuale: numero intero o decimale (con il
.
come separatore decimale).
Subscribe
Nel caso si voglia integrare un output va definito anche il topic per la ricezione delle richieste. Anche in questo caso non ci sono vincoli, se non la definizione di topic univoci per ciascun output.
Il topic per la ricezione delle richieste potrebbe essere ad esempio out_1/comando
, e a seconda del tipo di richiesta il messaggio sarà:
on
: per l'attivazione dell'outputoff
: per la disattivazioneValore tra
0
e255
: se l'uscita è analogica viene inviato un valore numerico (0
corrisponde alla minima intensità,255
alla massima)
Anche in questo caso non è obbligatorio che il comando sia inviato ad un output reale, o comunque connesso fisicamente al dispositivo che volete integrare, ma tale valore potrebbe essere allegato ad una richiesta HTTP o ad un messaggio via bus seriale.
Esempi
Il codice sottostante (in Python) è stato testato su un Raspberry Pi, e permette di integrare un sensore DHT, per l'invio di temperatura e umidità: