设备接入 IOTDA-离线开发插件:decode接口说明
decode接口说明
decode接口的入参binaryData为设备发过来的CoAP报文的payload部分。
设备的上行报文有两种情况需要插件处理(消息④是模组回复的协议ACK,无需插件处理):
- 设备上报数据(对应图中的消息①)
字段名
类型
是否必填
参数描述
identifier
String
否
设备在应用协议里的标识, 物联网平台 通过decode接口解析码流时获取该参数,通过encode接口编码时将该参数放入码流。
msgType
String
是
固定值"deviceReq",表示设备上报数据。
hasMore
Int
否
表示设备是否还有后续数据上报,0表示没有,1表示有。
后续数据是指,设备上报的某条数据可能分成多次上报,在本次上报数据后,物联网平台以hasMore字段判定后续是否还有消息。hasMore字段仅在PSM模式下生效,当上报数据的hasMore字段为1时,物联网平台暂时不下发缓存命令,直到收到hasMore字段为0的上报数据,才下发缓存命令。如上报数据不携带hasMore字段,则物联网平台按照hasMore字段为0处理。
data
ArrayNode
是
设备上报数据的内容。
表1 ArrayNode定义 字段名
类型
是否必填
参数描述
serviceId
String
是
服务的id。
serviceData
ObjectNode
是
一个服务的数据,具体字段在产品模型里定义。
eventTime
String
否
设备采集数据时间(格式:yyyyMMddTHHmmssZ)。
如:20161219T114920Z。
示例:
{ "identifier": "123", "msgType": "deviceReq", "hasMore": 0, "data": [{ "serviceId": "NBWaterMeterCommon", "serviceData": { "meterId": "xxxx", "dailyActivityTime": 120, "flow": "565656", "cellId": "5656", "signalStrength": "99", "batteryVoltage": "3.5" }, "eventTime": "20160503T121540Z" }, { "serviceId": "waterMeter", "serviceData": { "internalTemperature": 256 }, "eventTime": "20160503T121540Z" }] }
LwM2M协议的数据格式跟MQTT的数据格式不同。
- 设备对平台命令的应答(对应图中的消息⑤)
字段名
类型
参数描述
是否必填
identifier
String
设备在应用协议里的标识,物联网平台通过decode接口解析码流时获取该参数,通过encode接口编码时将该参数放入码流。
否
msgType
String
固定值"deviceRsp",表示设备的应答消息。
是
mid
Int
2字节无符号的命令id。在设备需要返回命令执行结果(deviceRsp)时,用于将命令执行结果(deviceRsp)与对应的命令进行关联。
物联网平台在通过encode接口下发命令时,把物联网平台分配的mid放入码流,和命令一起下发给设备;设备在上报命令执行结果(deviceRsp)时,再将此mid返回给物联网平台。否则物联网平台无法将下发命令和命令执行结果(deviceRsp)进行关联,也就无法根据命令执行结果(deviceRsp)更新命令下发的状态(成功或失败)。
是
errcode
Int
请求处理的结果码,物联网平台根据该参数判断命令下发的状态。
0表示成功,1表示失败。
是
body
ObjectNode
命令的应答,具体字段由产品模型定义。
注:body体不是数组。
否
示例:
{ "identifier": "123", "msgType": "deviceRsp", "mid": 2016, "errcode": 0, "body": { "result": 0 } }