Lora水肥机通讯文档
Lora水肥机远程控制网关
水肥机的远程控制系统通讯部分,由网关和控制终端组成。改设计主要描述网关和通讯终端之见的通讯协议。
指令结构
设备号 | 会话ID | 指令号 | 有效载荷 | 校验和 |
---|---|---|---|---|
3byte | 2byte | 1byte | 5byte | 1byte |
- 设备号:终端设备的编号,网关和终端通信均以该编号作为身份依据。
- 会话ID:网关每次通讯的标识符
- 指令号:设备的通讯操作指令
- 有效载荷:通讯的业务数据
- 校验和:设备号-有效载荷的数据加和
加密方式
由于Lora通讯本身的保密性较强,要进行干扰和窃听比较困难,由于单片机性能有限,加密本身会增加通讯数据的处理时间造成通讯时延。而且该设备应用在农业空旷的区域,被窃听破坏的可能性很低,所以不考虑使用推车锁类似复杂方式进行通讯协议层面的加密。
业务指令
心跳指令
心跳指令是网关设备用来确定设备是否存在,功能是否可行的指令
指令号:0x01
方向:网关->设备
心跳字符 | 时间戳 |
---|---|
1byte | 4byte |
'I'代表发送心跳 | UNIX时间戳,精确到秒 |
心跳响应
终端收到心跳后,应该在100ms内进行响应,表明终端存在,并通知终端状态
指令号:0xB1
方向:终端->网关
心跳字符 | 设备状态 | 电池电量 | 设备温度 |
---|---|---|---|
1byte | 1byte | 2byte | 1byte |
'A'代表响应心跳 | 0x01-代表设备正常,0x02代表设备动作故障,0x03-代表低电量,0x04-代表设备过度过高,0x05-代表设备进水 | 0xFFFF-代表不支持设备电量读取,否则以以0.01V为单位表示电压,1200表示12V | 0xFF表示不支持温度,温度显示偏移-50,单位为1摄氏度 |
动作指令
该指令是网关用来控制终端动作的指令,可以定义1-255 个不同的动作,动作不带参数,如果需要参数,则通过不同的动作进行配置,比如需要开启电磁阀1分钟,和需要开启电磁阀5分钟,可以配置成动作1-电磁阀开启1分钟,动作2-电磁阀开启5分钟,具体的配置在服务端和终端设备的程序中定义
指令:0x02
方向:网关->终端
动作指令 | 动作确认 | 时间戳 |
---|---|---|
1byte | 1byte | 3byte |
0x01-0xFE | 0xFF-动作指令,用来判断接受到的指令无误 | UNIX时间戳后三位 |
动作指令响应
当设备接收到动作指令后进行动作,之后返回动作结果,该指令的响应超时时间为1S,超过1S后网关认为响应超时进行重发,重发几次无响应则认为通讯失败
指令:0xB2
方向:终端->网关
动作响应 | 失败错误码 | 返回下发的时间戳 |
---|---|---|
1byte | 1byte | 3byte |
动作结果0xA1-成功,0xB2-失败 | 具体指令定义 | 下发的时间戳后三位 |
水肥机目前没有错误码,因为电磁阀较简单,无法知道失败原因,没有错误码为0x00