使用sokit工具模拟设备与平台交互
1、建立TCP连接
接下来使用sokit工具进行设备登录操作。打开sokit软件,选择客户端,填写服务器地址。
TCP设备接入的IP端口地址为:180.106.148.146:8996。
点击“TCP连接”,建立TCP连接后可进行登录报文发送。
2、设备登录
按TCP接口要求(请参考TCP协议-终端线下开发-接口介绍)组装登录报文:
消息类型 | 类型描述 | 消息格式 | 备注 |
0x01 | 登录报文 | 0x01 +deviceId_length(2字节) +deviceId +password_length(2字节) +password +version_length(2字节) +version | deviceId是由产品ID和设备编号拼接而成的字符串; password由平台生成,在设备管理业务可以查看; version固定1.1 业务数据非透传格式遵循物模型,上下行业务数据需要响应。 |
deviceId即12.2.3中设备“认证信息”中的“设备ID”,password即“认证信息”中的“特征串”。非十六进制的数据需按字节数要求转换成十六进制编码,可通过在线进制转换工具(https://www.sojson.com/hexadecimal.html)进行转换。
字段 | 消息类型 | deviceId_length | deviceId | password_length | password | version_length | version |
字段值 | 0x01 | 11 | 15152950001 | 43 | INz-2uj17b7db_LPFnzzKaP-nKBk1KDt-IPkXf-H9pY | 3 | 1.1 |
16进制编码 | 01 | 000b | 3135313532393530303031 | 002b | 494e7a2d32756a3137623764625f4c50466e7a7a4b61502d6e4b426b314b44742d49506b58662d48397059 | 0003 | 312e31 |
得到设备登录报文为:01000b3135313532393530303031002b494e7a2d32756a3137623764625f4c50466e7a7a4b61502d6e4b426b314b44742d49506b58662d483970590003312e31
将登陆报文填写到sokit工具的数据发送框,点击发送,得到登录响应:
050000
返回结果码为0,说明设备登录成功。
消息类型 | 类型描述 | 消息格式 | 备注 |
0x05 | 登录响应 | 0x05+ 结果码(2字节) | 登录结果: 0 成功 1 未知错误 2 设备未注册 3 设备认证失败 4 设备已登录 |
登陆报文发送成功后,设备状态由“已注册”变为“已激活”。
3、数据上报
以"充电口工作状态"数据上报为例。
“充电口工作状态”包含“充电口编号cell_index”和“充电开关charging”2个属性,属性值的数据类型和字节数可以通过属性列表查看。整型4字节,枚举值1字节。
数据上报为上行数据报文。
消息类型 | 类型描述 | 消息格式 | 备注 |
0x02 | 上行数据报文 | 0x02+数据长度(2字节)+msgid(2字节)+serviceid(2字节)+param1+params2+param3+…… | 数据长度:从msgid开始,到报文结尾的长度;msgid:报文标识,由终端分配;serviceId:平台分配的服务ID;param:平台服务包含的属性 |
按照接口要求组装数据报文如下:
字段 | 消息类型 | 数据长度 | msgid (2字节) | serviceid (2字节) | cell_index (4字节) | charging (1字节) |
字段值 | 0x02 | 9 | 6 | 1 | 1 | 1 |
16进制编码 | 02 | 0009 | 0006 | 0001 | 00000001 | 01 |
得到上行数据报文为:020009000600010000000101
将数据上报报文填写到sokit工具的数据发送框,点击发送,得到上行数据响应:
82000400060000
消息类型 | 类型描述 | 消息格式 | 备注 |
0x82 | 上行数据响应 | 0x82+数据长度(2字节)+msgid(2字节)+结果码(2字节) | 数据长度:从msgid开始,到报文结尾的长度;msgid:报文标识,跟上行报文中msgid对应;结果码:0-成功、1-报文解析失败 |
对应结果码为0,上行数据发送成功。可在设备管理中点击“数据查看”,看到已发送的数据。
4、事件上报
以"事件报警"服务为例。
“事件报警”包含“充电口编号cell_index”、“充电事件代码event_code”和“时间戳timestamp”3个属性,属性值的数据类型和字节数可以通过属性列表查看。时间戳可使用在线转换工具进行转换:https://tool.lu/timestamp/。
同样地,事件上报也是上行数据报文。
消息类型 | 类型描述 | 消息格式 | 备注 |
0x02 | 上行数据报文 | 0x02+数据长度(2字节)+msgid(2字节)+serviceid(2字节)+param1+params2+param3+…… | 数据长度:从msgid开始,到报文结尾的长度;msgid:报文标识,由终端分配;serviceId:平台分配的服务ID;param:平台服务包含的属性 |
按照接口要求组装数据报文如下:
字段 | 消息类型 | 数据长度 | msgid (2字节) | serviceid (2字节) | cell_index (4字节) | event_code (1字节) | timestamp (8字节) |
字段值 | 0x02 | 17 | 8 | 1001 | 1 | 0 | 2020-10-30 14:31:13 |
16进制编码 | 02 | 0011 | 0008 | 03e9 | 00000001 | 00 | 0000001604039473 |
得到事件上报报文为:020011000803e900000001000000001604039473
将事件上报报文填写到sokit工具的数据发送框,点击发送,得到上行数据响应:
82000400080000
对应结果码为0,上行数据发送成功。
消息类型 | 类型描述 | 消息格式 | 备注 |
0x82 | 上行数据响应 | 0x82+数据长度(2字节)+msgid(2字节)+结果码(2字节) | 数据长度:从msgid开始,到报文结尾的长度;msgid:报文标识,跟上行报文中msgid对应;结果码:0-成功、1-报文解析失败 |
可在设备管理中点击“事件上报”,看到已发送的数据。
5、指令下发及指令下发响应
在设备管理中,点击“指令下发”按钮,可进行指令下发操作。
以“set_charging”为例:
点击确定,完成指令下发操作。在“指令下发日志”中,可查看已下发的指令,此时指令下发状态为“指令已发送”。
点击右侧“详情”按钮,可查看指令内容,此时返回内容为空。
在sokit中可看到接收到的指令内容。下行数据消息格式为:
0x03+数据长度(2字节)+msgid(2字节)+serviceId(2字节)param1+param2+……
下面可根据指令下发内容向平台回复指令下发响应。
指令下发响应的消息格式如下:
消息类型 | 类型描述 | 消息格式 | 备注 |
0x83 | 下行数据响应 | 0x83+数据长度(2字节)+msgid(2字节)+结果码(2字节)+serviceId(2字节)+param1+param2+param3+…… | 数据长度:从msgid开始,到报文结尾的长度;msgid:报文标识,对应下行指令中的msgid;结果码:0-成功,不带serviceId和参数;1-成功,带serviceId和参数;2-下行数据处理失败,不带serviceId和参数 |
从服务列表可以查看,指令下发响应“充电口充电开关响应”服务包含“充电口编号cell_index”、“动作指令代码act_result”和“时间戳timestamp”3个属性,属性值的数据类型和字节数可以通过属性列表查看。
按照格式组装报文:
字段 | 消息 类型 | 数据 长度 | msgid (2字节) | 结果码 (2字节) | serviced (2字节) | cell_index (4字节) | act_result (1字节) | timestamp (8字节) |
字段值 | 0x83 | 19 | 1 | 1 | 9001 | 1 | 0 | 2020-10-30 15:38:13 |
16进制编码 | 83 | 0013 | 0001 | 0001 | 2329 | 00000001 | 00 | 000000 |
指令下发响应报文为:
83001300010001232900000001000000001604043493
在指令下发日志中可查看指令下发状态变为已完成。点击右侧“详情”按照,可查看返回内容。