Skip to main content

Payload Format Change - Array

Due to a discrepancy with the IIH we have two different modes for putting data on it.

  • The first mode is sending data as an array, even when it is only one datapoint
  • The second mode is keeping arrays as arrays, but splitting up single-value arrays to only be one datapoint. This means we are sending both arrays and single DPs to the IIH.
    Both methods keep their names like "DP1", "DP2", etc.

Example config for single values:

{
"seq":0,
"connections":[
{
"name":"EDGE_DB1",
"type":"sql",
"dataPoints":[
{
"name":"SENSOR_DATA",
"topic":"ie/d/j/simatic/v1/sqlc1/dp/r/EDGE_DB1/SENSOR_DATA/single_value",
"pubTopic":"ie/d/j/simatic/v1/sqlc1/dp/w/EDGE_DB1/SENSOR_DATA",
"dataPointDefinitions":[
{
"name":"VALUE",
"id":"DP1",
"dataType":"Real",
"accessMode":"rw",
"valueRank":1,
"arrayDimensions":[
1
],
"acquisitionCycleInMs":15000,
"acquisitionMode":"Select"
},
{
"name":"TS",
"id":"DP2",
"dataType":"DateTime",
"accessMode":"rw",
"valueRank":1,
"arrayDimensions":[
1
],
"acquisitionCycleInMs":15000,
"acquisitionMode":"Select"
},
{
"name":"NAME",
"id":"DP3",
"dataType":"String",
"accessMode":"rw",
"valueRank":1,
"arrayDimensions":[
1
],
"acquisitionCycleInMs":15000,
"acquisitionMode":"Select"
}
],
"publishType":"bulk"
},
{
"name":"SENSOR_DATA",
"topic":"ie/d/j/simatic/v1/sqlc1/dp/r/EDGE_DB1/SENSOR_DATA",
"pubTopic":"ie/d/j/simatic/v1/sqlc1/dp/w/EDGE_DB1/SENSOR_DATA",
"dataPointDefinitions":[
{
"name":"VALUE",
"id":"DP1",
"dataType":"Real",
"accessMode":"rw",
"valueRank":1,
"arrayDimensions":[
1
],
"acquisitionCycleInMs":15000,
"acquisitionMode":"Select"
},
{
"name":"TS",
"id":"DP2",
"dataType":"DateTime",
"accessMode":"rw",
"valueRank":1,
"arrayDimensions":[
1
],
"acquisitionCycleInMs":15000,
"acquisitionMode":"Select"
},
{
"name":"NAME",
"id":"DP3",
"dataType":"String",
"accessMode":"rw",
"valueRank":1,
"arrayDimensions":[
1
],
"acquisitionCycleInMs":15000,
"acquisitionMode":"Select"
}
],
"publishType":"bulk"
}
]
}
],
"applicationName":"SQL Connector",
"statustopic":"ie/s/j/simatic/v1/sqlc1/status"
}

Originally, the datapoints were being sent like this:

{
"seq":10,
"ts":"2025-02-13T14:13:36.274201300Z",
"vals":[
{
"id":"DP1",
"val":[
718.59
]
},
{
"id":"DP2",
"val":[
"2025-02-12T14:34:56Z"
]
},
{
"id":"DP3",
"val":[
"xcR3rdiB"
]
}
]
}

"vals" is an array composed of multiple datapoints with and id and a value. This value is an array with a single value in it.

Now, they look like this:

{
"seq":10,
"ts":"2025-02-13T14:13:36.274201300Z",
"vals":[
{
"id":"DP1",
"val":718.59
},
{
"id":"DP2",
"val":"2025-02-12T14:34:56Z"
},
{
"id":"DP3",
"val":"xcR3rdiB"
}
]
}

"vals" is still an array that is sent to the IIH. It still has multiple datapoints with and id and a value.
The difference here is that the "val" has the value saved directly in it and not in an array.