Aller au contenu principal

Module MQTT « mqtt »

Description​

Le module MQTT sert à la communication bidirectionnelle avec un broker MQTT.

Plusieurs canaux smartCORE peuvent être affectés à un même topic MQTT, le module permettant de sélectionner plusieurs topics.

Il est en outre possible d'instancier plusieurs modules afin de communiquer simultanément avec plusieurs brokers différents.

Pour l'interprétation et la préparation des payloads MQTT, des « payload hints » sont pris en charge ; ils servent à décrire le format.

Dans le sens de la publication, ils permettent de vérifier la syntaxe des modèles de publication dans lesquels les valeurs de canal consommées sont ensuite insérées (par exemple pour des formats courants comme JSON, XML, ...).

Inversement, dans le sens de l'abonnement (subscribe), ces payload hints permettent de fournir des mécanismes d'extraction de données adaptés aux formats précités, de sorte que les valeurs ainsi extraites puissent être produites dans les canaux smartCORE correspondants.

Interfaces et protocoles utilisés​

  • MQTT

Configuration JSON​

La section suivante décrit l'ensemble de la configuration JSON du module et explique chacun des paramètres.

Exemple de configuration (minimale et typique)​

Voici un exemple de configuration minimale :

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

<MQTT TOPIC KONFIGURATIONEN>

]
}
}

Exemple de configuration (maximale)​

{
"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>

]
}
}

Exemples d'objets JSON pour la configuration des topics...​

Les objets JSON suivants peuvent être insérés dans le tableau topics mentionné ci-dessus.

...dans le sens de la publication​

Les chaînes indiquées sous mqttName servent ici d'espaces réservés, qui sont remplacés tels quels par les valeurs des canaux smartCORE indiqués sous 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"
}
]
}

...dans le sens de l'abonnement​

Les chaînes indiquées sous mqttName décrivent ici comment extraire les données de canal du payload MQTT, ce qui est possible de différentes manières (voir ci-dessous).

{
"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"
}
]
}

Paramètres du module​

Nom du paramètreRequisType de donnéesPlage de valeurs pertinenteDéfautDescription
useLocalBrokerNonBOOLtrue, falsefalseDémarre un broker MQTT sur l'appareil et communique avec celui-ci
enabledNonBOOLtrue, falsetrueActivité de la communication avec le broker
pollingIntervalMsNonINT1 -1000Intervalle de traitement [ms] propre au module
brokerAddressNonSTRINGURL de broker valide"ssl://awe.some.io:8883" , "tcp://awe.some.io:1883" (non recommandé)
brokerAuthenticationNonBOOLtrue, falsetrueAuthentification auprès du broker
trustStoreNonSTRING/etc/ssl/certs/ca-certificates.crtTrust store pour l'authentification auprès du broker
brokerUserIdNonSTRINGIdentifiant utilisateur du broker
brokerUserPasswordNonSTRINGMot de passe utilisateur du broker
brokerClientIdNonSTRINGIdentifiant du client/de l'appareil auprès du broker
maxBufferedMessagesNonINT1 -10Nombre maximal de messages MQTT mis en tampon dans le client MQTT
connectTimeoutSNonINT1 -10Timeout pour l'établissement de la connexion
disconnectTimeoutSNonINT1 -10Timeout pour la déconnexion après demande
keepaliveIntervalSNonINT1 -10Timeout pour la détection d'une connexion interrompue
completionIntervalSNonINT1 -10Timeout pour la réception de l'accusé de réception après l'envoi d'un message MQTT
sendingIntervalSNonINT1 -10Timeout pour l'envoi d'un message MQTT
topicsOUIJSON Arrayvoir Configuration des topics MQTT

Configuration des topics MQTT « topics »​

On distingue ici les topics à publier (published) et les topics auxquels s'abonner (subscribed).

Topics à publier (published topics)​

Un topic à publier, qui contient en général une sélection de canaux smartCORE, est configuré sous forme d'objet JSON contenant les paramètres suivants.

Nom du paramètreRequisType de donnéesPlage de valeurs pertinenteDéfautDescription
nameOUISTRINGNom/chemin du topic sur le broker
directionOUISTRING"publish"à régler sur "publish" pour un topic à publier
payloadOUISTRINGModèle de payload
payloadHintOUISTRING"plain", "json""json"Sélection du format de payload à transmettre, pour lequel une vérification de la syntaxe du modèle de payload est effectuée si possible
channelsOUIJSON Arrayvoir ci-dessous

La configuration des canaux à publier se fait sous forme d'un tableau JSON contenant des objets JSON avec les paramètres suivants.

Nom du paramètreRequisType de donnéesPlage de valeurs pertinenteDéfautDescription
channelNameOUISTRINGNom du canal smartCORE à consommer
mqttNameOUISTRINGSous-chaîne du modèle de payload, remplacée par une représentation sous forme de chaîne de la valeur actuelle du canal.
formatNONSTRINGInstruction de formatage pour la conversion de la valeur du canal en chaîne
translateFalseNONSTRING"false"Représentation sous forme de chaîne de la valeur booléenne faux
translateTrueNONSTRING"true"Représentation sous forme de chaîne de la valeur booléenne vrai

Topics auxquels s'abonner (subscribed topics)​

Un topic auquel s'abonner, qui fournit en général une sélection de canaux smartCORE, est configuré sous forme d'objet JSON contenant les paramètres suivants.

Nom du paramètreRequisType de donnéesPlage de valeurs pertinenteDéfautDescription
nameOUISTRINGNom/chemin du topic sur le broker
directionOUISTRING"subscribe"à régler sur "subscribe" pour un topic auquel s'abonner
payloadHintOUISTRING"plain", "json""json"Sélection du format de payload à recevoir, selon lequel s'effectue l'extraction des données vers les canaux configurés.
channelsOUIJSON Arrayvoir ci-dessous

La configuration des canaux à publier se fait sous forme d'un tableau JSON contenant des objets JSON avec les paramètres suivants.

Nom du paramètreRequisType de donnéesPlage de valeurs pertinenteDéfautDescription
channelNameOUISTRINGNom du canal smartCORE à produire
dataTypeOUISTRINGtype de données smartCORE valideType de données du canal
bufferSizeNONINT1 -1024Taille de tampon du canal
physicalUnitNONSTRINGUnité physique du canal
mqttNameOUISTRINGChaîne décrivant une instruction d'extraction de valeurs de canal individuelles à partir d'un payload (par exemple un chemin pour les payloads JSON)
translateFalseNONSTRING"false"Représentation sous forme de chaîne de la valeur booléenne faux
translateTrueNONSTRING"true"Représentation sous forme de chaîne de la valeur booléenne vrai

Particularités liées au contenu du payload​

Extraction directe 1:1 des données (payloadHint "plain")​

Dans le sens de l'abonnement (subscribe), l'intégralité du contenu du payload est ici utilisée comme valeur du canal. Une conversion automatique tolérante aux erreurs vers le type de données cible est effectuée, dans la mesure du possible. Inversement, aucune vérification de la syntaxe n'est effectuée dans le sens de la publication.

JSON (payloadHint "json")​

Pour extraire des données de canal d'un topic auquel on est abonné et dont le payload est au format JSON, un chemin peut être utilisé comme paramètre "mqttName".

Exemple : le payload reçu contient l'objet JSON suivant.

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

alors "mqttName":"someObject/someSubObject\/with\/slash/someKey" extrait la valeur 42, qui est ensuite produite dans le canal défini comme "channelName" (c'est-à-dire qu'il est nécessaire d'échapper le séparateur "/").

De même, "mqttName":"someArray/1" extrait la valeur 2 de l'objet JSON précité (c'est-à-dire que, dans le cas d'un tableau JSON, la composante du chemin est utilisée comme index).

Si plusieurs séparateurs "/" sont spécifiés à la suite, ils sont considérés comme un seul séparateur.

Si un chemin non valide est spécifié, aucune donnée de canal n'est produite dans tous les cas.

Informations sur le module​

InformationValeur
AuteursoptiMEAS GmbH
depuis smartCORE2.6
Type de moduleau choix Consumer, Producer ou les deux
Dépendancesbroker MQTT existant