device-binary-protocol.md

二进制协议

  • 考虑到传输数据大小,流量约束等需求,支持二进制协议
  • 使用枚举的方式,参照 TLV(type,length,value)协议~
  • 预定义枚举类型,每个 type 是定长数据
  • 支持版本号,为以后迭代准备

1.定义

1.1 数据包结构

Tpye Byte
Command 1
Payload Length 1
Payload N

1.2 Command 定义

Command Value
CONNECT 0x01
PUB 0x02
SUB 0x03
UNSUB 0x04
MSG 0x05
PING 0x06
PONG 0x07
ACK 0x08
ERR 0x09

1.3 Type 定义

Name Type Value
info 0x00 炉具类别
rom_version 0x01 软件版本号
idh 0x02 硬件版本(高 8 位)
idl 0x03 硬件版本(低 8 位)
yy 0x04 生产年份(第 1 字节) yy 年
mm 0x05 生产月份(第 2 字节) mm 月
dd 0x06 生产日期(第 3 字节) dd 日
status 0x07 工作状态(1 字节)
working_mode 0x08 工作模式(1 字节)
heat_mode 0x09 加热模式(1 字节)
gear 0x0A 工作档位(1 字节)
child 0x0B 童锁状态(1 字节)
timingh 0x0C 定时状态值(高 8 位)
timingl 0x0D 定时状态值(低 8 位)
error 0x0E 错误信息(1 字节)
temph 0x0F 炉面温度 AD(高 8 位)4 位 16 进制数 (电磁炉用高 8 位,低 8 位不用)
templ 0x10 炉面温度 AD(低 8 位)0、1、2、3、... 、1100(度)(辐热炉用 2 字节)
igbt 0x11 IGBT 温度 AD(1 字节) 关键功率器件温度(电磁炉)
voltage 0x12 工作电压 AD(1 字节) 工作电压(电磁炉)
furnace_temp 0x13 炉腔温度 AD(1 字节) 0 — 100 度(辐热炉)
offon 0x14 功率通断比(1 字节) 0、1、2、3、...、255(× 100/ 256 %)(辐热炉)
  • 以上是主要的数据推送类型,目前所有的 Length 默认都是 1 一个字节 *
Name Type Value
token 0xA0 当前设备的唯一标识 (长度未确定)
version 0xA1 当前协议版本号 (一个字节)
nonce 0xA2 随机响应值 (两个字节)

2.目前需要的指令

2.1 PING

发送两个字节: | 0x04 | 0x0 |

2.2 PONG

对 PING 的响应,两个字节: | 0x05 | 0x0 |

2.3 PUB

第一次连接服务器,需要推送 token,version,分别是设备的认证和协议版本号: | 0x01 | length | 0xA0 | ... | 0xA1 | 0x01 |

2.4 PUB

根据需要(第一次启动 / 周期性推送)发送不同的数据,比如推送 info 字段: | 0x02 | 2 | 0x00 | 0x01 |

可以大量的推送数据,使用 | key1 | value1 | key2 | value2 | 的方式

3. 工作流程

  • 1 第一次连接之后使用 CONNECT,发送 token,version 进行认证和协议协商

  • 2 周期性的 PUB 指令推送数据

  • 3 使用 PING 机制,得到 PONG 回应。如果一定时间 PONG 没有收到,认为网络不可用,进行重启操作

TODO

  • 1 预留了反向控制指令,其他指令需要的时候可以用上

  • 2 SUB / UNSUB / MSG / ACK / ERR 是预留的命令

  • 3 PUB 之后是否要回应?

你可能感兴趣的:(device-binary-protocol.md)