合宙 IOT 通用报文协议 AirProtcl -- 1.0
二、协议报文详解
报文分为消息头和消息体两部分。
消息头只有一个,在报文开头,固定12个字节,分为设备ID,消息长度,版本标志三个字段。
消息体可以有多个,采用TLV的形式。
除了特殊约定外,报文的各个字节采用大端对齐的方式。
2.1 消息头
消息头一共 16 字节。
1, 设备 ID - 8 字节
其中第一个字节,代表设备类型,4G,WiFi,BLE,等;
剩余 7 字节为设备 ID,可以是 IMEI,也可以是 MAC, 也可以是 Chip ID,不做特殊约定。
设备 ID 采用 BCD 编码方式。
设备 ID 长度不足 7 字节的,自动在高位补 0.
2,流水号 - 2 字节
3,消息长度 - 2 字节
从版本标识开始的消息长度,最长不能大于 1400字节。
4,消息标识-4 字节
用来做协议和消息约定的32个bit。
bit0-3: 协议版本号;
bit4: 是否需要回复
bit5: 是否携带鉴权 key
其余26个bit 为0.
2.2 消息体
消息体有多个 TLV 组成: T-字段类型,L-字段长度,V-字段取值,可以任意多个 TLV, 只要消息长度不超过 1400 字节即可。
1, 字段类型 - 2 字节
前面 12 个 bit, 代表字段含义,比如温度,湿度,转速,工作或者停止,等等;
后面 4bit,代表数据类型(整数,浮点,bool,ascii,binary)
2, 长度 - 2 字节
字段取值的长度
3, 字段值
实际的值。
2.3 消息字段示例
字段 | **字段名** | **长度** | 含义 |
消息头 | 设备ID | 8 | 第一个字节,代表设备类型,4G,WiFi,BLE,等; 剩余7字节为设备ID,可以是IMEI,也可以是MAC, 也可以是Chip ID,不做特殊约定。 |
消息头 | 流水号 | 2 | |
消息头 | 消息长度 | 2 | 从版本标识开始的消息长度,最长不能大于 1400字节。 |
消息头 | 消息标识 | 4 | bit0-3: 协议版本号; bit4: 是否需要回复 bit5: 是否携带鉴权 key 其余26个bit 为0. |
认证key(可选) | key | 64 | 用于 UDP 报文的鉴权 |
TLV1 | 字段类型 | 2 | 前面12个bit, 代表字段含义,比如温度,湿度,转速,工作或者停止,等等; 后面4bit,代表数据类型(整数,浮点,bool,ascii,binary) |
TLV1 | 长度 | 2 | |
TLV1 | 字段值 | N | |
TLV2 | 字段类型 | 2 | |
TLV2 | 长度 | 2 | |
TLV2 | 字段值 | N | |
...... | |||
2.4 设备鉴权
在设备建立连接之前,需要发送鉴权消息。
鉴权的方式是,通过 TLV 传递用户的 key+IMEI(或者 MAC)+MUID,由服务器判断是否合法,如果不合法的话,服务器主动发起断链操作。