脚本的解析能力包括获取消息内容、转换数据格式、处理字符串、组装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格式,可不使用脚本解析数据,直接编辑输出文件,进行数据映射。

脚本编辑的更多语法说明,请参见脚本语法