Gateway-Konfiguration über MQTT


 

Allgemein 

Die implementierten Funktionen können durch Aktivierung von 'EditDrvConfig' unter 'INTERNAL' aktiviert werden.

Hinweis

Im Allgemeinen sollten alle Nachrichten an das Gateway mit QoS 2 oder QoS 0 gesendet werden.

QoS 1 sollte besser vermieden werden, da die Anfragen dann möglicherweise mehr als einmal ausgeführt werden. Dies sollte aber auch nicht zu Fehlern führen.

Lesen und einstellen

von Treiber-Konfigurationsdateien.

Die Konfigurationsdateien eines Treibers können nun über mqtt gelesen und gesetzt werden. Dazu muss eine mqtt-Nachricht an das Topic veröffentlicht werden: cmd/[ClientID]/[CmdId]/(set|get)/file/(config|datapoint|dispatch)/route

Die Datei oder der Status des Uploads wird dann über das selbe Topic mit dem Zusatz "/result" veröffentlicht.

Die Payload beim Senden der "get"-Anfrage sollte leer bleiben. Die zu setzende Konfiguration muss unter dem JSON-Schlüssel "content" bei "set" stehen. Die Konfiguration wird als JSON-Objekt gesendet, dessen Format eine 1:1-Übersetzung der Konfigurationsdatei ist.

Ein Abschnitt der Treiberkonfigurationsdateien entspricht also einem JSON-Objekt, dessen Schlüssel der Name des Abschnitts ist. Die Eigenschaften des Abschnitts entsprechen bei JSON ebenfalls jeweils einzelnen Objekten. Alternativ kann auch ein String mit "set" übermittelt werden. Der String wird dann ungeprüft in die Datei geschrieben.

Hinweis

Beim Setzen der Treiberkonfigurationsdateien ist zu beachten, dass die Dateien komplett überschrieben werden. Außerdem sollte der Datapoint Manager manuell neu gestartet werden, was zu einer Unterbrechung der Kommunikation führt.

Besonderheiten der Dispatch-Dateien

Treiber können entweder ihre eigene Dispatch-Datei (optional) oder aber die globale Dispatch-Datei verwenden. Wenn der Treiber die globale Dispatch-Datei verwendet, verarbeitet das obige Kommando auch die globale Dispatch-Datei.

Bei den Dispatch-Dateien kann im Gegensatz zu den anderen Treiberkonfigurationsdateien der Name einer Sektion mehrfach verwendet werden. Dies ist notwendig, um einen Datenpunkt an mehrere Datenpunkte zu verteilen.

JSON-Schlüssel müssen eindeutig und präzise sein. Um die Formate ineinander umzuwandeln, werden solche Abschnitte daher in ein JSON-Array für JSON umgewandelt.

Die Route im Topic ist optional. Wenn keine angegeben wird, wird das globale dispatch file verwendet.

Beispiel

Die folgende Konfiguration:

[570 sim random 1] 
target = 1630 mqtt publish ugw/random1 
[570 sim random 1] 
target = 1630 mqtt publish ugw/random2 

Wird in umgewandelt in: 

{
"570 sim random 1": [
{
"target": "1630 mqtt publish ugw/random1"
},
{
"target": "1630 mqtt publish ugw/random2"
}
]
}

Beispiel CSV Treiber

Wenn man zum Beispiel die Treiberkonfiguration des CSV-Treibers über mqtt einstellen möchte (syspretopic ist "cmd" und die Client-ID ist "ugw"), muss folgende Nachricht an das Topic gesendet werden cmd/ugw/set/file/config/1070:

{
“content": {
"csv": {
"PathPattern": "%Y%m%d_oid.csv",
"DatePattern": "%d.%m.%Y",
"DateString": "Datum",
"TimePattern": "%H:%M:%S",
"TimeString": "Uhrzeit",
"FileInterval": "kw",
"LineInterval": 60,
"AdjustFilename": true,
"CRLF": true,
"ColumnSeparator": ";",
"OutputFormat": "standard",
"Columns": "Datum;Uhrzeit;kwWW1;kwhWW1",
"Invalid": -1,
"DecimalSeparator": ".",
"Precision": 1,
"MaxLineCache": 100, "UTC": true,
"Header": true,
"CntFiles": true,
"DataAutoDelete": false
},
"cifs": {
"Server": "//server/share",
"User": "username",
"Password": "password",
"MountPoint": "/mnt/cifs"
}
}

Dadurch wird die Standardkonfigurationsdatei des CSV-Treibers auf dem Gateway festgelegt. Der CSV-Treiber muss dann manuell neu gestartet werden.

Setzen von Datenpunkten und Dispatches

Neben der oben erwähnten Möglichkeit, die Konfigurationsdateien direkt zu bearbeiten, können Datenpunkte und Dispatches für alle Treiber gemeinsam gesetzt werden.

In diesem Fall ist kein Neustart des DP-Managers und je nach Treiber auch kein Neustart der Treiber notwendig. Dazu muss eine Nachricht an das Topic cmd/client-id/cmd-id/set/datapoints gesendet werden.

Die Payload besteht aus verschachtelten JSON-Objekten. In der ersten Ebene wird zwischen den Treibern unterschieden. Die Schlüssel entsprechen den Routen der Treiber. In der Treiberebene werden die neuen Datenpunkte des zu setzenden Treibers beschrieben.

Jeder Datenpunkt ist wieder ein JSON-Objekt, dessen Schlüssel die Adresse des Datenpunktes ist. Die Datenpunktobjekte müssen den Schlüssel "Def" haben. Sein Wert ist ein JSON-Objekt, das die Eigenschaften des Datenpunkts beschreibt. Darüber hinaus kann ein Datenpunktobjekt einen Schlüssel "Targets" haben.

Der Wert des Schlüssels ist ein Array von Zielobjekten, die den Eigenschaften eines Dispatches entsprechen.

Alternativ dazu kann der Wert des Schlüssels auch "true" sein. In diesem Fall erstellt der Treiber automatisch Dispatches des Datenpunkts an mqtt-Datenpunkte. Ist der Datenpunkt lese- und schreibbar, werden zwei Dispatches an einen pub- und einen sub-Datenpunkt bei mqtt erstellt. Wenn der Datenpunkt nur lesbar ist, wird der 'sub'-Datenpunkt nicht erstellt. Das Topic der Datenpunkte ist (get/set)/datapoint/route/Adr, wobei die Adresse im Topic leicht verändert ist. Insbesondere werden in der Adresse im Topic Leerzeichen durch Unterstriche ersetzt und die Zeichen "#", "+" und "/" ignoriert.

Die Datenpunkte werden vom mqtt-Treiber einzeln an den Datenpunktmanager gesendet und überwacht. Nach jedem übertragenen Datenpunkt wird unter dem Topic cmd/client-id/cmd-id/set/datapoints/Adr/result übertragen, ob die Erstellung des Datenpunktes erfolgreich war und der Inhalt in die Konfigurationsdatei übertragen wurde. Die Adr im Topic muss vom Treiber wie oben beschrieben nochmals leicht angepasst werden.

Wenn alle Datenpunkte übertragen sind, werden die Dispatches alle zusammen an den Datenpunktmanager gesendet und verarbeitet. Unter dem Topic cmd/client-id/cmd-id/Id/set/datapoints/result wird Ihnen dann mitgeteilt, welche Treiber neu gestartet werden müssen.

Derzeit unterstützen die sim- und mqtt-Treiber eine Aktualisierung der Datenpunkte ohne Neustart.

Hinweis

Die Datenpunkte werden vom mqtt-Treiber einzeln an den Datenpunktmanager gesendet und überwacht. Nach jedem übertragenen Datenpunkt wird unter dem Topic cmd/client-id/cmd-id/set/datapoints/Adr/result übertragen, ob die Erstellung des Datenpunktes erfolgreich war und der Inhalt in die Konfigurationsdatei übertragen wurde. Die Adr im Topic muss vom Treiber wie oben beschrieben nochmals leicht angepasst werden. 

Wenn alle Datenpunkte übertragen sind, werden die Dispatches alle zusammen an den Datenpunktmanager gesendet und verarbeitet. Unter dem Topic cmd/client-id/cmd-id/Id/set/datapoints/result wird Ihnen dann mitgeteilt, welche Treiber neu gestartet werden müssen. 

Derzeit unterstützen die sim- und mqtt-Treiber eine Aktualisierung der Datenpunkte ohne Neustart. 

Beispiele csv-, mqtt- und sim-Treiber 

Im folgenden Beispiel werden Datenpunkte der Routen 570 (sim-Treiber) und 1070 (csv-Treiber) erstellt und mit dem mqtt-Treiber versendet. Es wird empfohlen, dass die Zieldatenpunkte des mqtt-Treibers bereits auf dem Gateway vorhanden sind.

Hier die Nachricht die an das Topic
cmd/client-id/cmd-id/Id/set/datapoints gesendet wird:

{
"570": {
"X random 0": {
"Def": { "name": "Random",
"format": "S:0 L:0 U:100"
},
"Targets": {
"target": "1630 mqtt publish ugw/Test1"
}
},
"Y random 1": {
"Def": {
"name": "Random 1",
"format": "S:0 L:0 U:100"
},
"Targets": [
{
"target": "1630 mqtt publish ugw/Auto1"
},
{
"target": "1630 mqtt subscribe ugw/Auto1"
}
]
},
"X random 2": {
"Def": {
"name": "Random 2",
"format": "S:0 L:0 U:100"
},
"Targets": true
}
},
"1070": {
"Y TestCsv":
{
"Def": {
"name": "Test CSV Datenpunkt"
},
"Targets": true
}
}
}

Drei Datenpunkte des Sim-Treibers werden dann auf dem Gateway erstellt. Der Datenpunkt "random 0" wird an den mqtt-Datenpunkt 'publish ugw/Test1'

Der Datenpunkt "random 1" wird an die beiden mqtt-Datenpunkte "publish ugw/Auto1" und "subscribe ugw/Auto1" gesendet. 

Der Datenpunkt "X random 2" wird automatisch an einen mqtt-Datenpunkt weitergeleitet. Da der Wert schreibgeschützt ist, wird nur ein puplish-Datapoint erstellt. 

Zusätzlich wird ein Datenpunkt für den CSV-Treiber erstellt und ebenfalls automatisch mit mqtt-Datenpunkten versendet. In diesem Fall werden sowohl ein Publish- als auch ein Subscribe-Datapoint erstellt. 

Nach der Fertigstellung wird der csv-Treiber neu gestartet, der sim-Treiber jedoch nicht. 

Löschen von Datenpunkten

Ermöglicht die direkte Löschung von Datenpunkten über mqtt. Das Löschen von Datenpunkten wird möglich im Topic cmd/client-id/cmd-id/Id/set/datapoints. Dazu muss der zu löschende Datenpunkt auf "False" gesetzt werden. Die Dispatch-Einträge werden dabei automatisch mit gelöscht.

Wenn ein Treiber nicht neu gestartet werden muss, wird der Datenpunkt nicht vom Datenpunktmanager entfernt, sondern nur nicht mehr vom Treiber beachtet.

Format von Ergebnismeldungen

Jede Ergebnismeldung enthält immer die Schlüssel "error-code" und "error-text". Der Fehlercode ist eine Zahl, die auf errno.h basiert. Ein Code von 0 bedeutet, dass alles erfolgreich implementiert wurde. Der Text gibt weitere Informationen über Fehler.