Passa al contenuto principale

Modulo MQTT "mqtt"

Descrizione​

Il modulo MQTT serve alla comunicazione bidirezionale con un broker MQTT.

È possibile associare più canali smartCORE a un topic MQTT, e il modulo consente la selezione di più topic.

Inoltre è possibile istanziare più moduli, per poter comunicare contemporaneamente con più broker diversi.

Per l'interpretazione e la preparazione dei payload MQTT sono supportati i cosiddetti payload hint, che servono alla descrizione del formato.

In direzione di pubblicazione servono a eseguire un controllo della sintassi dei modelli di pubblicazione, nei quali vengono poi inseriti i valori dei canali consumati (ad es. per formati comuni come JSON, XML, ...).

Viceversa, in direzione di sottoscrizione (subscribe) questi payload hint servono a fornire meccanismi di estrazione dei dati adatti ai formati citati, in modo che i valori così estratti possano essere prodotti nei corrispondenti canali smartCORE.

Interfacce e protocolli utilizzati​

  • MQTT

Configurazione JSON​

Nella sezione seguente viene descritta l'intera configurazione JSON del modulo e vengono illustrati i singoli parametri.

Configurazione di esempio (minima e tipica)​

Di seguito una configurazione di esempio minima:

{
"module":"MQTT",
"factory":"mqtt",
"config":{
"brokerAddress": "ssl://awe.some.io:8883",
"brokerUserId": "USER_ID",
"brokerUserPassword": "USER_PASSWORD",
"brokerClientId": "CLIENT_ID",
"topics":[

<MQTT TOPIC KONFIGURATIONEN>

]
}
}

Configurazione di esempio (massima)​

{
"module":"MQTT",
"factory":"mqtt",
"config":{
"useLocalBroker":false,
"enabled":true,
"pollingIntervalMs":1000,

"brokerAddress": "ssl://awe.some.io:8883",
"brokerAuthentication": true,
"trustStore": "/etc/ssl/certs/ca-certificates.crt",
"brokerUserId": "USER_ID",
"brokerUserPassword": "USER_PASSWORD",
"brokerClientId": "CLIENT_ID",

"maxBufferedMessages": 10,
"connectTimeoutS": 10,
"disconnectTimeoutS": 10,
"keepaliveIntervalS": 10,
"completionIntervalS": 10,
"sendingIntervalS": 10,
"topics":[

<MQTT TOPIC KONFIGURATIONEN>

]
}
}

Esempi di oggetti JSON per la configurazione dei topic...​

I seguenti oggetti JSON possono essere inseriti nell'array topics citato sopra.

...in direzione di pubblicazione​

Le stringhe indicate in mqttName fungono da segnaposto, che vengono sostituiti 1:1 dai valori dei canali smartCORE indicati in channelName.

{
"name":"sensor/state",
"direction":"publish",
"payload":"{\"voltage\":%BAT_VOLTAGE%,\"current\":%BAT_CURRENT%}",
"payloadHint":"json",
"channels":[
{
"mqttName":"%BAT_VOLTAGE%",
"channelName":"PowerSupplyVoltage"
},
{
"mqttName":"%BAT_CURRENT%",
"channelName":"PowerSupplyCurrent"
}
]
}

...in direzione di sottoscrizione​

Le stringhe indicate in mqttName descrivono come devono essere estratti i dati dei canali dal payload MQTT, cosa possibile in modi diversi (vedere sotto).

{
"name":"sensor/status/switch:0",
"direction":"subscribe",
"payloadHint":"json",
"channels":[
{
"mqttName":"power",
"channelName":"Power",
"dataType":"float"
},
{
"mqttName":"current",
"channelName":"Current",
"dataType":"float"
},
{
"mqttName":"temperature/tC",
"channelName":"TemperatureTC",
"dataType":"float"
}
]
}

Parametri del modulo​

Nome del parametroObbligatorioTipo di datiIntervallo di valori sensatoDefaultDescrizione
useLocalBrokerNoBOOLtrue, falsefalseAvvia un broker MQTT sul dispositivo e comunica con esso
enabledNoBOOLtrue, falsetrueAttività della comunicazione con il broker
pollingIntervalMsNoINT1 -1000Intervallo di elaborazione relativo al modulo [ms]
brokerAddressNoSTRINGURL del broker valido"ssl://awe.some.io:8883" , "tcp://awe.some.io:1883" (sconsigliato)
brokerAuthenticationNoBOOLtrue, falsetrueAutenticazione del broker
trustStoreNoSTRING/etc/ssl/certs/ca-certificates.crtTrust store per l'autenticazione del broker
brokerUserIdNoSTRINGIdentificativo utente del broker
brokerUserPasswordNoSTRINGPassword utente del broker
brokerClientIdNoSTRINGIdentificativo del client/dispositivo del broker
maxBufferedMessagesNoINT1 -10Numero massimo di messaggi MQTT in buffer all'interno del client MQTT
connectTimeoutSNoINT1 -10Timeout per lo stabilimento della connessione
disconnectTimeoutSNoINT1 -10Timeout per la disconnessione dopo richiesta
keepaliveIntervalSNoINT1 -10Timeout per il rilevamento di una connessione interrotta
completionIntervalSNoINT1 -10Timeout per la ricezione della conferma dopo l'invio di un messaggio MQTT
sendingIntervalSNoINT1 -10Timeout per l'invio di un messaggio MQTT
topicsSÌJSON Arrayvedere Configurazione dei topic MQTT

Configurazione dei topic MQTT "topics"​

Si distingue tra topic da pubblicare (published) e topic da sottoscrivere (subscribed).

Topic da pubblicare (published topics)​

Un topic da pubblicare, che in genere contiene una selezione di canali smartCORE, viene configurato come oggetto JSON contenente i seguenti parametri.

Nome del parametroObbligatorioTipo di datiIntervallo di valori sensatoDefaultDescrizione
nameSÌSTRINGNome/percorso del topic sul broker
directionSÌSTRING"publish"da impostare su "publish" per un topic da pubblicare
payloadSÌSTRINGModello di payload
payloadHintSÌSTRING"plain", "json""json"Selezione del formato di payload da trasmettere, rispetto al quale viene eseguito un controllo della sintassi del modello di payload, se possibile
channelsSÌJSON Arrayvedere sotto

La configurazione dei canali da pubblicare avviene sotto forma di JSON Array contenente oggetti JSON con i seguenti parametri.

Nome del parametroObbligatorioTipo di datiIntervallo di valori sensatoDefaultDescrizione
channelNameSÌSTRINGNome del canale smartCORE da consumare
mqttNameSÌSTRINGSottostringa all'interno del modello di payload che viene sostituita con una rappresentazione in stringa del valore attuale del canale.
formatNOSTRINGIstruzione di formattazione per la conversione del valore del canale in stringa
translateFalseNOSTRING"false"Rappresentazione in stringa del valore booleano falso
translateTrueNOSTRING"true"Rappresentazione in stringa del valore booleano vero

Topic da sottoscrivere (subscribed topics)​

Un topic da sottoscrivere, che in genere mette a disposizione una selezione di canali smartCORE, viene configurato come oggetto JSON contenente i seguenti parametri.

Nome del parametroObbligatorioTipo di datiIntervallo di valori sensatoDefaultDescrizione
nameSÌSTRINGNome/percorso del topic sul broker
directionSÌSTRING"subscribe"da impostare su "subscribe" per un topic da sottoscrivere
payloadHintSÌSTRING"plain", "json""json"Selezione del formato di payload da ricevere, rispetto al quale viene eseguita l'estrazione dei dati nei canali configurati.
channelsSÌJSON Arrayvedere sotto

La configurazione dei canali da pubblicare avviene sotto forma di JSON Array contenente oggetti JSON con i seguenti parametri.

Nome del parametroObbligatorioTipo di datiIntervallo di valori sensatoDefaultDescrizione
channelNameSÌSTRINGNome del canale smartCORE da produrre
dataTypeSÌSTRINGtipo di dati smartCORE validoTipo di dati del canale
bufferSizeNOINT1 -1024Dimensione del buffer del canale
physicalUnitNOSTRINGUnità fisica del canale
mqttNameSÌSTRINGStringa che descrive un'istruzione per l'estrazione di singoli valori di canale da un payload (ad es. l'indicazione di un percorso per payload JSON)
translateFalseNOSTRING"false"Rappresentazione in stringa del valore booleano falso
translateTrueNOSTRING"true"Rappresentazione in stringa del valore booleano vero

Particolarità relative al contenuto del payload​

Estrazione diretta 1:1 dei dati (payloadHint "plain")​

In direzione di sottoscrizione (subscribe) l'intero contenuto del payload viene utilizzato integralmente come valore del canale. Viene eseguita una conversione automatica e tollerante agli errori nel tipo di dati di destinazione, nella misura in cui sia possibile. Viceversa, in direzione di pubblicazione non viene eseguito alcun controllo della sintassi.

JSON (payloadHint "json")​

Per estrarre dati di canale da un topic sottoscritto con payload in formato JSON, come parametro "mqttName" può essere utilizzata l'indicazione di un percorso.

Esempio: il payload ricevuto contiene il seguente oggetto JSON.

{
"someObject":{
"someSubObject/with/slash":{
"someKey": 42
}
}
"someArray":[
1,
2,
3
]
}

allora "mqttName":"someObject/someSubObject\/with\/slash/someKey" estrae il valore 42, che viene quindi prodotto nel canale definito come "channelName" (cioè è necessario eseguire l'escape del carattere separatore "/").

Analogamente "mqttName":"someArray/1" estrae il valore 2 dall'oggetto JSON citato (cioè, nel caso di un JSON Array, la componente del percorso viene utilizzata come indice).

Se vengono specificati più separatori "/" consecutivi, essi vengono considerati come un unico separatore.

Se viene specificato un percorso non valido, in ogni caso non viene prodotto alcun dato di canale.

Informazioni sul modulo​

InformazioneValore
AutorioptiMEAS GmbH
da smartCORE2.6
Tipo di moduloa scelta Consumer, Producer o entrambi
Dipendenzebroker MQTT disponibile