脚本的解析能力包括获取消息内容、转换数据格式、处理字符串、组装JSON格式数据和处理二进制数据等。输出文件是使用固定的JSON数组格式,将设备上报数据或脚本解析后的数据,映射到数字孪生节点中。本文介绍如何编写脚本和输出文件。
背景信息
物联网平台是基于Topic中的数据格式来处理和传递数据的,数据格式的具体内容,请参见数据格式。
脚本和输出示例
本文以上报的属性数据为例,输入数据如下:
{
"iotId":"4z819VQHk6VSLmmBJfrf00107e****",
"productKey":"al12345****",
"deviceName":"deviceName1234",
"gmtCreate":1510799670074,
"deviceType":"Ammeter",
"items":{
"Power":{
"value":"on",
"time":1510799670074
},
"Position":{
"time":1510292697470,
"value":{
"latitude":39.9,
"longitude":116.38
}
}
},
"checkFailedData":{
}
}
解析和处理数据的示例如下:
//通过payload函数,获取设备上报的消息内容,并按照JSON格式转换。
var payload = payload("json");
//定义Map类型数据,存储键值对数据。
var data = {};
//获取位置的latitude值并且+1,将计算后的值存入data。
data["k1"] = payload.items.Position.value.latitude + 1;
//将Power的值进行转换,on转换成1,否则为0。
if (payload.items.Power.value == "on") {
data["k2"] = 1;
} else {
data["k2"] = 0;
}
//获取items的值。
data["items"] = payload.items;
//在data中添加一个常量stage1.stage2。
data["stage1.stage2"] = 1.3;
//返回解析后的数据data。
return data;
将脚本解析返回的data数据,作为输出文件的数据源,使用以下JSON格式,配置数据映射,示例如下:
[
{
//key值对应data数据中的字段。
"key": "k1",
//iotId值对应孪生节点ID。
"iotId": "xx***",
//孪生节点下的功能属性标识符,获取key对应字段的输出值,即节点“xx***”下属性id1值更新为k1的值。
"identifier": "id1"
},
{
"key": "k2",
"iotId": "yy***",
"identifier": "id2"
},{
"key": "items\\.Position\\.value\\.longitude",
"iotId": "yy***",
"identifier": "id3"
},{
"key": "stage1.stage2",
"iotId": "zz***",
"identifier": "id4"
}
]
注意
- 上报的JSON数据格式,为数组或者嵌套的JSON。脚本和输出文件中支持使用JSONPath获取其中的属性值。例如:
- 脚本文件中,使用
payload.items.Position.value.latitude
格式,获取到值39.9。 - 输出文件中,使用
items\\.Position\\.value\\.longitude
格式,获取到值116.38。
有关JSONPath的更多信息,请参见LanguageManual UDF。
- 脚本文件中,使用
- 脚本中定义常量、变量或其他自定义字段的标识符时,半角句号(.)可作为正常字符使用。
- 若设备上报数据是JSON格式,可不使用脚本解析数据,直接编辑输出文件,进行数据映射。
脚本编辑的更多语法说明,请参见脚本语法。