-> Hier kostenlos registrieren
Guten Tag,
ich tausche mit einem MQTT-Broker Daten aus und generiere über den LSTREAM_JSON_Serializer Baustein von Siemens ein JSON-Script, das unteranderem in einem Array mehrere Messdaten der Anlage enthalten soll.
In den JSON_Serializer kann man über die folgende Tabelle den JSON Code in einem Datenbaustein erstellen.
Das Array "measurements" hat die eigestellte tiefe von 1.
Die Sensornamen, Sensorwerte, Sensor unit und das Objekt "limits" liegt in einer eigestellten tiefe von 2.
Die werte im Objekt limits liegen in einer eigestellten tiefe von 3.
Das ziel ist das dieser Code erstellt und an dem Broker übergegen werden soll:
Bei einem einzelenen Sensor mit der selben Tiefe (Array=1, Sensordaten und objekt limit = 2 und im Objektwerte = 3) wird der Code im Broker richtig angezeigt.
Sobald aber zwei oder mehrere Sensoren hinzugefügt werden, spaltet sich das Array auf und direkt nach der ersten [ fügt sich ein {} hinein.
Beispiel mit zwei Sensoren:
Beispiel mit 10 Sensoren:
Folgende dinge habe ich auch schon ausprobiert:
Wenn ich dann ohne das Objekt und ohne den Inhalt von "limits:{}" arbeite, wird mit der gleichen Strukturtiefe in dem Array der Code im richtigen Format angezeigt und das Array auch wieder geschlossen.
Bei verwendnung von der Tiefe 1 bei beiden bereichen sieht der Code wie folgt aus und somit auch nicht verwendbar:
Ich hoffe meine Problemstellung ist somit ersichtlich und jemand hier weiß vielleicht in dieser Richtung einen passenden Lösungsansatz.
ich tausche mit einem MQTT-Broker Daten aus und generiere über den LSTREAM_JSON_Serializer Baustein von Siemens ein JSON-Script, das unteranderem in einem Array mehrere Messdaten der Anlage enthalten soll.
In den JSON_Serializer kann man über die folgende Tabelle den JSON Code in einem Datenbaustein erstellen.
Type: | [Sint] | -1 Default 0 Object 1 Array 2 String 3 Number 4 Bool |
Key: | [String] | Name of the Key; ' ' = default |
Value: | [String] | Value of the Keyname |
Depth: | [SInt] | Hierarchical depth of the object |
Das Array "measurements" hat die eigestellte tiefe von 1.
Die Sensornamen, Sensorwerte, Sensor unit und das Objekt "limits" liegt in einer eigestellten tiefe von 2.
Die werte im Objekt limits liegen in einer eigestellten tiefe von 3.
Das ziel ist das dieser Code erstellt und an dem Broker übergegen werden soll:
Javascript:
"measurements":
[ {"sensor": "Sensor 1","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
{"sensor": "Sensor 2","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
{"sensor": "Sensor 3","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
{"sensor": "Sensor 4","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
{"sensor": "Sensor 5","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
{"sensor": "Sensor 6","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
{"sensor": "Sensor 7","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
{"sensor": "Sensor 8","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
{"sensor": "Sensor 9","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
{"sensor": "Sensor N","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}]
Bei einem einzelenen Sensor mit der selben Tiefe (Array=1, Sensordaten und objekt limit = 2 und im Objektwerte = 3) wird der Code im Broker richtig angezeigt.
Javascript:
"measurements": [
{"sensor": "Sensor 1","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
]
Sobald aber zwei oder mehrere Sensoren hinzugefügt werden, spaltet sich das Array auf und direkt nach der ersten [ fügt sich ein {} hinein.
Beispiel mit zwei Sensoren:
Javascript:
"measurements": [
{},{ "sensor": "Sensor 1","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}},},
{ "sensor": "Sensor 2","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}}}
Beispiel mit 10 Sensoren:
Javascript:
"measurements":
[ {},{ "sensor": "Sensor 1","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}},},
{ "sensor": "Sensor 2","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 3","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 4","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 5","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 6","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 7","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor N","value": ,10"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}}}
Folgende dinge habe ich auch schon ausprobiert:
Wenn ich dann ohne das Objekt und ohne den Inhalt von "limits:{}" arbeite, wird mit der gleichen Strukturtiefe in dem Array der Code im richtigen Format angezeigt und das Array auch wieder geschlossen.
Javascript:
"measurements":
[ {"sensor": "Sensor 1","value": 10,"unit": "%"}
{"sensor": "Sensor 2","value": 10,"unit": "%"}
{"sensor": "Sensor 3","value": 10,"unit": "%"}
{"sensor": "Sensor 4","value": 10,"unit": "%"}
{"sensor": "Sensor 5","value": 10,"unit": "%"}
{"sensor": "Sensor 6","value": 10,"unit": "%"}
{"sensor": "Sensor 7","value": 10,"unit": "%"}
{"sensor": "Sensor 8","value": 10,"unit": "%"}
{"sensor": "Sensor 9","value": 10,"unit": "%"}
{"sensor": "Sensor N","value": 10,"unit": "%"}]
Bei verwendnung von der Tiefe 1 bei beiden bereichen sieht der Code wie folgt aus und somit auch nicht verwendbar:
Javascript:
"measurements": [
{"sensor": "Sensor 1","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,},
{ "sensor": "Sensor 2","value": ,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,},
{ "sensor": "Sensor 3","value": ,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,},
{ "sensor": "Sensor 4","value": ,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,},
{ "sensor": "Sensor 5","value": ,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,}
}}}}}]
Ich hoffe meine Problemstellung ist somit ersichtlich und jemand hier weiß vielleicht in dieser Richtung einen passenden Lösungsansatz.
Zuletzt bearbeitet: