Onenet edp数据通信整理
Onenet edp数据通信整理
- 创建产品
1、选多协议接入--edp---添加产品
- 创建设备
- 设备列表--添加设备
三、EDP协议
1、EDP总体包协议定义
消息包括三个部分:必选的消息头(绿色),可选的多个选项(黄色)以及可选的消息体(蓝色)。
字节\bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Byte 1 |
消息类型 |
保留位(全零) |
||||||
Multi-bytes |
剩余消息长度(1-4字节,指示选项+消息体的长度) |
|||||||
Multi-bytes |
选项(根据消息类型0个或多个) |
|||||||
Multi-bytes |
消息体(根据消息类型0或多个字节) |
2、类型定义详解
(1)消息类型:占第一个字节的前4位,取值范围(0-15),定义如下:
类型值 |
含义 |
方向 |
1 |
CONN_REQ:连接建立请求 |
C(client)->S(server) |
2 |
CONN_RESP:连接建立响应 |
S->C |
3 |
PUSH_DATA:转发(透传)数据 |
双向 |
4 |
CONN_CLOSE:连接关闭 |
S->C |
5 |
UPDATE_REQ:上报当前使用的软件信息 |
C->S |
6 |
UPDATE_RESP:平台下发当前最新的软件信息 |
S->C |
7 |
SUB_DEVICE:子设备请求 |
双向 |
8 |
SAVE_DATA:存储(&转发)数据 |
双向 |
9 |
SAVE_ACK:存储确认 |
S->C |
10 |
CMD_REQ |
S->C |
11 |
CMD_RESP |
C->S |
12 |
PING_REQ: 心跳请求 |
C->S |
13 |
PING_RESP: 心跳响应 |
S->C |
14 |
ENCRYPT_REQ |
C->S |
15 |
ENCRYPT_RESP |
S->C |
其他值 |
保留 |
|
(2)剩余消息长度:用于指示选项和消息体的字节数,该字段占用1-4个字节,长度值的低位部分放在传输的前面字节,高位放在后面。每个字节的最高位为延续指示位。延续指示位为1时,标示后面字节也是长度值,最多可延续4个字节。可表示数据范围如下:
字节数 |
最小值 |
最大值 |
1 |
0(0x00) |
127(0x7F) |
2 |
128(0x80, 0x01) |
16383 (0xFF, 0x7F) |
3 |
16 384 (0x80, 0x80, 0x01) |
2 097 151 (0xFF, 0xFF, 0x7F) |
4 |
2 097 152 (0x80, 0x80, 0x80, 0x01) |
268 435 455 (0xFF, 0xFF, 0xFF, 0x7F) |
注意:消息剩余长度 = 选项所占字节数 + 消息体所占字节数,根据该值的大小来确定消息剩余长度字段在EDP数据包中占用多少个字节,比如从上表可以看出,当0<剩余长度<=127的时候,消息剩余长度字段在EDP数据包中只占一个字节,而不是四个字节;当 127<剩余长度<=16383的时候,消息剩余长度字段在EDP数据包中占两个字节,而不是四个字节;依此类推。
- 选项
根据消息类型,选项的格式不同;详见(Enhanced Device Protocol(EDP)协议文档)
- 消息体
根据消息类型,消息体可选,详见(详见Enhanced Device Protocol(EDP)协议文档)。
- 设备端连接
1、建立edp连接(OneNET平台地址为 183.230.40.39 :876)
2、设备登陆上报信息(:ONN_REQ:连接建立请求 消息类型值为1)
连接请求包含三部分:消息头、选项和消息体。
选项包括协议名称、协议版本、连接标志、保持连接时间。
消息体中可能包含设备ID、用户ID(可选)、鉴权信息。三项内容都为长度+内容的字符串格式。设备ID必须传递,若认证方式中不使用设备ID,应将设备ID长度设置为0;用户ID和鉴权信息,根据标志位若存在必须按顺序出现。
可选的登录认证方式:
登陆认证方式 |
携带信息 |
说明 |
1 |
设备ID + 鉴权信息(api-key) |
设备ID:申请设备时平台返回的ID; 鉴权信息:在平台申请的可以操作该设备的api-key字符串; |
2 |
产品ID + 鉴权信息(auth_info) |
产品ID:在平台添加产品时平台生成的ID; 鉴权信息:在平台申请设备时填写设备的auth_info属性(json对象字符串),该属性需要产品内具备唯一性; |
本例采用登陆方式1:设备ID“43101”和api-key“abcdefg”,登录平台的连接请求消息格式如下:
字节 |
说明\bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
消息头 |
|||||||||
Byte 1 |
第一字节: Bit(4-7):消息类型,值为1; Bit(0-3):保留位,值为0; |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
变长剩余消息长度(25编码后需要占用1个字节) |
|||||||||
Byte 2 |
第二字节: 消息剩余字节长度,值为25 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
选项1:协议描述(字符串格式) |
|||||||||
Byte 3 |
长度高位字节,值为0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Byte 4 |
长度低位字节,值为3 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
Byte 5 |
字母’E’ |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
Byte 6 |
字母’D’ |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
Byte 7 |
字母’P’ |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
选项2:协议版本 |
|||||||||
Byte 8 |
一个字节表示,值为1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
选项3:连接标志 |
|||||||||
Byte 9 |
Bit(7):产品ID标志位,值0, Bit(6):鉴权信息标志位,值1,表示后面消息体有该项 Bit(0-5):系统保留位,填0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
选项4:保持连接时间(256秒=0x0100) |
|||||||||
Byte 10
|
第一字节,时间值的高位字节,值1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Byte 11 |
第二字节,时间值的低位字节,值0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
消息体-设备ID(字符串格式) |
|||||||||
Byte 12 |
长度高位字节,值为0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Byte 13 |
长度低位字节,值为5 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
Byte 14 |
字符’4’ |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
Byte 15 |
字符’3’ |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
Byte 16 |
字符’1’ |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
Byte 17 |
字符’0’ |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
Byte 18 |
字符’1’ |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
消息体-鉴权信息(字符串格式) |
|||||||||
Byte 19 |
长度高位字节,值为0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Byte 20 |
长度低位字节,值为7 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
Byte 21 |
字符’a’ |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
Byte 22 |
字符’b’ |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
Byte 23 |
字符’c’ |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
Byte 24 |
字符’d’ |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
Byte 25 |
字符’e’ |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
Byte 26 |
字符’f’ |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
Byte 27 |
字符’g’ |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
发送数据包(hex):10 19 00 03 45 44 50 01 40 01 00 00 05 34 33 31 30 31 00 07 61 62 63 64 65 66 67
接收返回(hex):20 02 00 00 则表明连接成功
3、设备上报数据
(1)存储(&转发)数据协议
字节 |
说明\bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
消息头 |
|||||||||
Byte 1 |
第一字节: Bit(4-7):消息类型,值为8; Bit(0-3):保留位,值为0; |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
剩余消息长度(16664编码后需要占用3个字节) |
|||||||||
Byte 2 |
消息剩余字节长度(16664)-编码第一字节(低) |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
Byte 3 |
消息剩余字节长度(16664)-编码第二字节 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
Byte 4 |
消息剩余字节长度(16664)-编码第三字节(高) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
固定选项:标志 |
|||||||||
Byte 5 |
Bit 7:转发地址指示位,置1,后面有地址信息 Bit 6:消息编号指示位,置1,后面有2字节消息编号 Bit 5-0:系统保留,全零。 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
目的或源地址(根据上面的标志位确定存在与否) |
|||||||||
Byte 6 |
固定两字节长度高位字节,值为0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Byte 7 |
固定两字节长度低位字节,值为5 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
Byte 8 |
字符’1’ |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
Byte 9 |
字母’0’ |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
Byte 10 |
字母’0’ |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
Byte 11 |
字母’1’ |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
Byte 12 |
字母’1’ |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
消息编号(固定2字节,高字节在前,服务器用此编号返回存储确认) 示例:消息编号为261 |
|||||||||
Byte 13 |
消息编号261高位字节 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Byte 14 |
消息编号261低位字节 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
消息体(设备云规定的数据类型格式) |
|||||||||
Byte 15 |
7种数据结构,具体格式见后续说明: Type = 7:带统一时间戳的浮点数数据流 Type = 6:带默认时间戳的自定义间隔字符串格式 type = 5:自定义间隔字符串格式; type = 4:JSON格式3字符串; type = 3:JSON格式2字符串; type = 2:二进制数据点; type = 1:JSON格式1字符串; |
|
|
|
|
|
|
|
|
(2)数据类型3格式说明:
Byte 15 |
数据点类型指示:type=3 // JSON格式2字符串 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
Byte 16 |
//指示后面字符串长度 长度高位字节 |
|
|
|
|
|
|
|
|
Byte 17 |
长度低位字节 |
|
|
|
|
|
|
|
|
Byte 18 |
通用格式: { “datastream_id1”:”value1”, “datastream_id2”:”value2”, … }
|
|
|
|
|
|
|
|
|
(3)本例以EDP协议的Type3格式上传数据
上报数据点报文格式:消息头(1)+剩余消息长度(1)+标志(1)+消息(2)+JSON数据长度(2)+JSON数据(n)
json数据:{"led_1_status":0}
发送(hex):80 18 40 00 01 03 00 12 7B 22 6C 65 64 5F 31 5F 73 74 61 74 75 73 22 3A 30 7D //80--存储(&转发)数据 00 01--消息编号 00 12 -- json数据长度
接收(hex):90 04 40 00 01 00 // 90--SAVE_ACK响应 00 01--消息编号 00--成功
- 平台下发命令及终端接收与解析
终端接收(hex):A0 2D 00 24 33 30 64 32 63 36 64 37 2D 38 30 38 34 2D 35 31 62 37 2D 61 63 63 38 2D 62 38 38 33 31 33 66 39 33 64 63 36 00 00 00 03 31 32 33
//A0 消息类型
//2D 消息长度
// 00 24 命令cmd_uuid长度
//33 30 64 32 63 36 64 37 2D 38 30 38 34 2D 35 31 62 37 2D 61 63 63 38 2D 62 38 38 33 31 33 66 39 33 64 63 36 cmd_uuid
// 00 00 00 03 数据长度
//31 32 33 数据‘123’