Zum Hauptinhalt springen

MQTT Modul "mqtt"

Beschreibung

Das MQTT Modul dient der Kommunikation mit einem MQTT Broker in beiden Richtungen.

Hierbei können jeweils mehrere smartCORE Kanäle einem MQTT Topic zugeordnet werden, wobei das Modul eine Auswahl mehrerer Topics ermöglicht.

Es können darüberhinaus mehrere Module instantiiert werden, um mit mehreren unterschiedlichen Brokern gleichzeitig kommunizieren zu können.

Bezüglich der Interpretation und Vorbereitung von MQTT Payloads werden sogenannte Payload Hints unterstützt, die der Formatbeschreibung dienen.

In Publikationsrichtung dienen diese dazu, eine Syntaxüberprüfung der Publikationsschablonen, in welche dann konsumierte Kanalwerte eingefügt werden, durchzuführen (z.B. für gänige Formate wie JSON, XML, ...).

Umgekehrt dienen diese Payload Hints in Abbonierungsrichtung (subscribe) dazu, geeignete Datenextraktionsmechanismen für o.g. Formate bereitzustellen, so dass die hiermit extrahierten Werte in entsprechende smartCORE Kanäle produziert werden können.

Verwendete Schnittstellen & Protokolle

  • MQTT

JSON-Konfiguration

Im folgenden Abschnitt soll die gesamte JSON-Konfiguration des Moduls beschrieben und die einzelnen Parameter erläutert werden.

Beispielkonfiguration (minimal und typisch)

Im folgenden eine minimale Beispielkonfiguration:

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

<MQTT TOPIC KONFIGURATIONEN>

]
}
}

Beispielkonfiguration (maximal)

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

]
}
}

Beispiele von JSON Objekten zur Topic Konfiguration...

Die folgenden JSON Objekte können in das o.g. Array von topics eingefügt werden.

...in Publikationsrichtung

Hierbei dienen die unter mqttName aufgeführten Strings als Platzhalter, welche 1:1 durch die Werte der unter channelName aufgeführten smartCORE Kanäle ersetzt werden.

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

Hierbei wird durch die unter mqttName aufgeführten Strings beschrieben, wie Kanaldaten aus dem MQTT Payload zu extrahieren sind, was auf unterschiedliche Art und Weise möglich ist (siehe unten).

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

Modulparameter

ParameternameErforderlichDatentypsinnvoller WertebereichDefaultBeschreibung
useLocalBrokerNeinBOOLtrue, falsefalseStarte MQTT Broker auf dem Gerät und kommuniziere mit diesem
enabledNeinBOOLtrue, falsetrueAktivität der Kommunikation zum Broker
pollingIntervalMsNeinINT1 -1000Modulbezogenes Verarbeitungsintervall [ms]
brokerAddressNeinSTRINGgültige Broker URL"ssl://awe.some.io:8883" , "tcp://awe.some.io:1883" (nicht empfohlen)
brokerAuthenticationNeinBOOLtrue, falsetrueBroker-Authentifizierung
trustStoreNeinSTRING/etc/ssl/certs/ca-certificates.crtTrust Store für Broker-Authentifizierung
brokerUserIdNeinSTRINGBroker-Benutzerkennung
brokerUserPasswordNeinSTRINGBroker-Benutzerpasswort
brokerClientIdNeinSTRINGBroker-Client-/Gerätekennung
maxBufferedMessagesNeinINT1 -10Maximale Anzahl gepufferter MQTT Botschaften innerhalb des MQTT Clients
connectTimeoutSNeinINT1 -10Timeout bzgl. Verbindungsherstellung
disconnectTimeoutSNeinINT1 -10Timeout bzgl. Verbindungstrennung nach Aufforderung
keepaliveIntervalSNeinINT1 -10Timeout bzgl. Detektion einer getrennten Verbindung
completionIntervalSNeinINT1 -10Timeout bzgl. Quittierungsempfang nach Versand einer MQTT Botschaft
sendingIntervalSNeinINT1 -10Timeout bzgl. Versand einer MQTT Botschaft
topicsJAJSON Arraysiehe MQTT Topic Konfiguration

MQTT Topic Konfiguration "topics"

Man unterscheidet hierbei zwischen zu publizierenden (published) und zu abbonierenden (subscribed) Topics.

Zu publizierende Topics (published topics)

Ein zu publizierendes Topic, welches i.A. eine Auswahl von smartCORE Kanälen beinhaltet, wird hierbei als JSON Objekt, das folgende Parameter enthält, konfiguriert.

ParameternameErforderlichDatentypsinnvoller WertebereichDefaultBeschreibung
nameJASTRINGName/Pfad des Topics auf dem Broker
directionJASTRING"publish"für ein zu publizierendes Topic auf "publish" zu setzen
payloadJASTRINGPayload-Schablone
payloadHintJASTRING"plain", "json""json"Auswahl des zu übertragenen Payload-Formats bzgl. dessen eine Syntaxprüfung der Payload-Schablone erfolgt, falls dies möglich ist
channelsJAJSON Arraysiehe unten

Die Kanalkonfiguration zu publizierender Kanäle erfolgt in Form eines JSON Arrays, das JSON Objekte mit folgenden Parametern enthält.

ParameternameErforderlichDatentypsinnvoller WertebereichDefaultBeschreibung
channelNameJASTRINGName des zu konsumierenden smartCORE Kanals
mqttNameJASTRINGTeilstring innerhalb der Payload-Schablone, der mit einer Stringrepräsentation des aktuellen Kanalwertes ersetzt wird.
formatNEINSTRINGFormatierungsanweisung bzgl. Konvertierung des Kanalwertes nach String
translateFalseNEINSTRING"false"Stringrepräsentation des Booleschen Wertes für falsch
translateTrueNEINSTRING"true"Stringrepräsentation des Booleschen Wertes für wahr

Zu abbonierende Topics (subscribed topics)

Ein zu abbonierendes Topic, welches i.A. eine Auswahl von smartCORE Kanälen bereitstellt, wird hierbei als JSON Objekt, das folgende Parameter beinhaltet, konfiguriert.

ParameternameErforderlichDatentypsinnvoller WertebereichDefaultBeschreibung
nameJASTRINGName/Pfad des Topics auf dem Broker
directionJASTRING"subscribe"für ein zu abbonierendes Topic auf "subscribe" zu setzen
payloadHintJASTRING"plain", "json""json"Auswahl des zu empfangenen Payload-Formats bzgl. dessen eine Datenextraktion in konfigurierte Kanäle erfolgt.
channelsJAJSON Arraysiehe unten

Die Kanalkonfiguration zu publizierender Kanäle erfolgt in Form eines JSON Arrays, das JSON Objekte mit folgenden Parametern enthält.

ParameternameErforderlichDatentypsinnvoller WertebereichDefaultBeschreibung
channelNameJASTRINGName des zu produzierenden smartCORE Kanals
dataTypeJASTRINGgültiger smartCORE DatentypDatentyp des Kanals
bufferSizeNEININT1 -1024Puffergröße des Kanals
physicalUnitNEINSTRINGPhysikalische Einheit des Kanals
mqttNameJASTRINGString, der eine Anweisung zur Extraktion einzelner Kanalwerte aus einem Payload beschreibt (z.B. eine Pfadangabe für JSON Payloads)
translateFalseNEINSTRING"false"Stringrepräsentation des Booleschen Wertes für falsch
translateTrueNEINSTRING"true"Stringrepräsentation des Booleschen Wertes für wahr

Payload-Inhalt-bezogene Besonderheiten

Direkte 1:1 Datenextraktion (payloadHint "plain")

Hierbei wird in Abbonierungsrichtung (subscribe) der gesamte Inhalt des Payloads vollständig als Kanalwert verwendet. Es erfolgt hierbei eine automatische fehlertolerante Konvertierung in den Zieldatentyp, soweit diese möglich ist. Umgekehrt erfolgt keine Syntaxprüfung in Publikationsrichtung.

JSON (payloadHint "json")

Um Kanaldaten aus einem abbonierten Topic mit JSON-formattiertem Payload zu extrahieren, kann als "mqttName" Parameter eine Pfadangabe benutzt werden.

Beispiel: Beinhaltet der empfangene Payload folgendes JSON Objekt.

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

so extrahiert "mqttName":"someObject/someSubObject\/with\/slash/someKey" den Wert 42, welcher dann in den als "channelName" definierten Kanal produziert wird (d.h. es ist erforderlich, das Trennzeichen "/" zu escapen).

Entsprechend extrahiert "mqttName":"someArray/1" den Wert 2 aus o.g. JSON Objekt (d.h. im Fall eines JSON Arrays wird die Pfadkomponente als Index verwendet).

Werden mehrere Trennzeichen "/" hintereinander spezifiziert, so werden diese als einzelnes Trennzeichen betrachtet.

Wird ein ungültiger Pfad spezifiziert, erfolgt in jedem Fall keine Produktion von Kanaldaten.

Modul-Informationen

InformationWert
AutorenoptiMEAS Measurement and Automation Systems GmbH
seit smartCORE2.6
Modultypwahlweise Consumer, Producer oder beides
Abhängigkeitenvorhandener MQTT-Broker