消息格式
Object19
Object 19 (LwM2M APPDATA)可以用于应用层业务数据的封装,实现包括业务数据上报、业务指令下发、设备事件上报等功能。
目前平台仅支持Data字段,其他字段暂时不支持,即:
• 消息上行通过/19/0/0传送
• 消息下行通过/19/1/0传送
对于Data字段,平台既支持数据透传也支持非透传(物模型)。对于非透传设备,数据格式支持紧凑二进制和Json两种格式。
l 非透传设备
非透传设备上报的业务数据,平台需要对业务数据按照物模型定义进行解析,因此数据格式必须遵守平台关于Object19的约定,目前Object19支持紧凑二进制和Json两种数据格式。
(1)紧凑二进制格式
业务数据上报、事件上报、无线参数上报的Data字段编码格式:
1byte | 2bytes | 2bytes | n bytes(Payload) | ||
CMDType | ServiceID | Payload_length | Parameter1 | Parameter2 | …… |
说明:
参数名称 | 参数类型 | 类型说明 | 参数说明 |
CMDType | Unsigned Integer(1) | 必选定长 | 报文类型,固定为0x02 |
ServiceID | Unsigned Integer(2) | 必选定长 | 服务ID |
Payload_length | Unsigned Integer(2) | 必选定长 | 业务数据长度 |
Payload | Binary | 长度为Payload_length | 业务数据(二进制格式) |
•CMDType:必填字段,1Byte,数据上报-0x02;事件上报-0x07;无线参数上报-0x03;
•ServiceID:必填字段,2Bytes,填写平台分配的服务ID
•Payload_length:必填字段,2Bytes,根据payload长度填写
•Payload:类型为Binary,Parameter1、Parameter2等需要按照对应服务的属性列表的顺序填写,Parameter的类型要与属性类型一致。
业务指令下发、指令下发响应的Data字段编码格式:
1byte | 2bytes | 2bytes | 2bytes | n bytes(Payload) | ||
CMDType | ServiceID | TaskID | Payload_length | Parameter1 | Parameter2 | …… |
说明:
参数名称 | 参数类型 | 类型说明 | 参数说明 |
CMDType | Unsigned Integer(1) | 必选定长 | 报文类型, 下发指令固定为0x06,指令响应固定为0x86 |
ServiceID | Unsigned Integer(2) | 必选定长 | 服务ID |
TaskID | Unsigned Integer(2) | 必选定长 | 任务ID |
Payload_length | Unsigned Integer(2) | 必选定长 | 数据长度 |
Payload | Binary | 长度为Payload_length | 指令或指令响应数据(二进制格式) |
•CMDType:必填字段,1Byte,下行指令固定为0x06,指令响应固定为0x86
•ServiceID:必填字段,2Bytes,填写平台分配的服务ID
•TaskID:必填字段,2Bytes,由平台分配,用于关联下发指令和回复响应,指令和响应中的TaskID必须一致
•Payload_length:必填字段,2Bytes,Payload的长度
•Payload:类型为Binary,按照服务定义的属性(或参数)进行编码和解码
示例1、设备数据上报
服务类型 | 服务标识 | 服务ID | 属性顺序 | 属性标识符 | 属性类型 | 属性长度 |
数据上报 | up | 1 | 1 | seq | 无符号整型 | 2 |
2 | data1 | 定长字符串 | 5 | |||
3 | data2 | 变长字符串 | / |
数据上报服务ID:1
•属性1:2个字节的整型,值为100
•属性2:5个字节的定长字符串,值为"hello"
•属性3:变长字符串"world"。
首先需要将属性值转换为十六进制:
•属性1十进制整型100的十六进制为0x0064
•属性2定长字符串"hello"转换为十六进制为:0x68656C6C6F(参照ASCII码表转换)
•属性3字符串"world"转化为十六进制为:0x776F726C64,由于该属性为变长字段,还需要在属性前加上2个字节的无符号整型表示长度,即属性3变长字符串的最终编码为0x0005776F726C64。
编码过程为:
•CMDType:0x02
•ServiceID:0x0001
•Payload_length:0x000E
•Payload:0x006468656C6C6F0005776F726C64
因此19/0/0数据上报内容为:020001000E006468656C6C6F0005776F726C64
示例2、指令下发和响应
服务类型 | 服务标识 | 服务ID | 参数顺序 | 参数标识符 | 参数类型 | 参数长度 |
指令下发 | dn | 8001 | 1 | cmd | 无符号整型 | 1 |
指令下发响应 | rsp | 9001 | 1 | time | 定长字符串 | 12 |
指令下发服务ID:8001
TaskID:1
参数1:1个字节无符号整型。参数值为1:1--获取当前时间,0--时钟同步。
编码过程为:
•CMDType:0x06
•ServiceID:0x1F41
•TaskID:0x0001
•Payload_length:0x0001
•Payload:0x01
因此19/1/0指令下发内容为:061F410001000101,解析出指令内容为“获取当前时间”,设备需要将系统时间通过响应发给平台。
指令响应的服务ID:9001
TaskID:1
参数1:12字节的定长字符串。值为当前时间点"202010261600"。
编码过程为:
•CMDType:0x86
•ServiceID:0x2329
•TaskID:0x0001
•Payload_length:0x000C
•Payload:0x323032303130323631363030
因此19/0/0指令响应内容为:8623290001000C323032303130323631363030
(2)JSON格式
业务数据上报、事件上报、无线参数上报的Data部分应满足以下格式:
{"serviceId": XXXX, parameter1:value1, parameter2:value2}
"serviceId"的值为对应服务的服务ID,parameter1、parameter2对应服务中每个属性,用属性标识进行替换,value1、value2对应属性值,按照定义的属性类型填写。
业务指令下发、指令下发响应的Data部分应满足以下格式:
{"serviceId":XXXX, "taskId":XXXX, parameter:value}
"serviceId"的值为对应服务的服务ID, "taskId"由平台分配,用于关联下发指令和回复的响应。parameter和value按照服务定义的属性来填写。
示例1、设备数据上报
服务类型 | 服务标识 | 服务ID | 属性顺序 | 属性标识符 | 属性类型 |
数据上报 | up | 1 | 1 | seq | Int32 |
2 | data1 | string | |||
3 | data2 | string |
19/0/0上报数据内容为:
{"serviceId": 1, "seq":1, "data1": "hello", "data2": "world"}
示例2、指令下发和响应
服务类型 | 服务标识 | 服务ID | 参数顺序 | 参数标识符 | 参数类型 |
指令下发 | dn | 8001 | 1 | cmd | Int32 |
指令下发响应 | rsp | 9001 | 1 | time | String |
19/1/0指令下发内容为:
{"serviceId":8001, "taskId":1, "cmd":1}
19/0/0指令下发响应内容为:
{"serviceId":9001, "taskId":1, "rsp":"202010261600"}
l 透传设备
AEP对19/0/0、19/1/0的Data字段不进行解析,支持任意格式的业务数据的透传。
标准Object
平台支持OMA标准Object的订阅、读、写、执行操作,详细接口说明可参考: