电磁阀终端MQTT通讯协议
目录
通讯协议设计介绍
1、电磁阀终端4G通讯,采用MQTT作为业务通讯数据载体,鉴于目前使用了低成本的通讯模组,无法支持QOS=2,我们采用QOS=0进行 通讯。
2、由于我们通过4G传输的MQTT基于TCP协议通讯,所以已经存在很完善的校验机制,我们在协议中不设置校验字段。
3、MQTT采用一型一密方式进行登入,即同一型号设备登入MQTT消息中间件的用户名密码一致。设备名称为设备的产品型号+IMEI号+平 台注册代码,共计25位。
例如电磁发的登入名称为:
DCF | 867546052066218 | Asl3873 |
设备类型编号 电磁阀:DCF |
设备编号为IMEI码 | 注册码为平台生成, 加工时写入设备, 作为设备合法性的二次验证 |
4、消息订阅地址,每个设备单独的订阅发布地址
地址 | 描述 | 订阅 | 消息通道 |
/device/<IMEI号>/sub | 设备消息订阅地址,用于服务器发送消息给设备 | 设备订阅 | 设备消息通道 |
/device/<IMEI号>/pub | 设备消息发布地址,用于设备发送消息给服务器 | 服务端订阅 | 设备消息通道 |
/area/<区域编号>/pub | 区域群组消息发布地址,用于服务器向某一区域设备进行消息广播 | 设备订阅 | 区域消息通道 |
/area/<设备编号>/<IMEI号>/pub | 区域消息独立回复地址,用于设备单独向服务端应答区域消息 | 服务端按需订阅 | 区域消息通道 |
/area/<区域编号>/pub | 区域群组消息发布地址,用于设备响应或发送区域相关消息给区域相关设备和服务器,例如气象消息 | 服务端按需订阅 | 区域消息通道 |
5、设备消息的订阅
设备消息通道通讯报文格式
消息头 | 长度 | 会话ID | 指令 | 参数 |
3byte | 3byte | 4byte | 2byte | n byte |
固定字"DCF" | 消息的总长度 | 十六进制字符串,用于标识会 话的唯一性,同一会话相同会 话ID,不同会话不同会话ID |
KF:打开电磁阀 GF:关闭电磁阀 CX:查询电磁阀指令 |
指令的参数 |
设备消息通道业务指令
此处所描述的内容为指令对应的参数
打开电磁阀
服务端->设备
电磁阀编号 | 电磁阀类型 |
1byte | 1byte |
数字1-4 | 1:直动式 2:先导式 |
设备->服务端
结果 |
1byte |
1-成功,2-失败 |
关闭电磁阀
服务端->设备
电磁阀编号 | 电磁阀类型 |
1byte | 1byte |
数字1-4 | 1:直动式 2:先导式 |
设备->服务端
结果 |
1byte |
1-成功,2-失败 |
查询电磁阀状态
服务端->设备
电磁阀编号 | 电磁阀类型 |
1byte | 1byte |
数字1-4 | 1:直动式 2:先导式 |
设备->服务端
结果 |
1byte |
1-开启,2-关闭,3-故障 |
区域消息通道通讯报文格式
普通消息格式
消息头 | 长度 | 会话ID | 指令 | 参数 |
3byte | 3byte | 4byte | 2byte | n byte |
固定字"DCF" | 消息的总长度 | 十六进制字符串,用于标识会 话的唯一性,同一会话相同会 话ID,不同会话不同会话ID |
JT:关闭区域所有电磁阀 CX:查询区域内所有电磁阀状态 |
指令的参数 |
独立回复消息格式
消息头 | 长度 | 设备号 | 会话ID | 指令 | 参数 |
3byte | 3byte | 15byte | 4byte | 2byte | n byte |
固定字"DCF" | 消息的总长度 | IMEI | 十六进制字符串,用于标识会 话的唯一性,同一会话相同会 话ID,不同会话不同会话ID |
JT:关闭区域所有电磁阀 CX:查询区域内所有电磁阀状态 |
指令的参数 |
设备消息通道业务指令
此处所描述的内容为指令对应的参数
关闭区域所有电磁阀
服务端->设备
固定值 |
1byte |
"0" |
设备->服务端(独立回复通道)
电磁阀1状态 | 电磁阀2状态 | 电磁阀3状态 | 电磁阀4状态 |
1byte | 1byte | 1byte | 1byte |
1-开启 2-关闭 3-故障 4-未启用 |
1-开启 2-关闭 3-故障 4-未启用 |
1-开启 2-关闭 3-故障 4-未启用 |
1-开启 2-关闭 3-故障 4-未启用 |
查询区域内所有电磁阀状态
服务端->设备
固定值 |
1byte |
"0" |
设备->服务端(独立回复通道)
电磁阀1状态 | 电磁阀2状态 | 电磁阀3状态 | 电磁阀4状态 |
1byte | 1byte | 1byte | 1byte |
1-开启 2-关闭 3-故障 4-未启用 |
1-开启 2-关闭 3-故障 4-未启用 |
1-开启 2-关闭 3-故障 4-未启用 |
1-开启 2-关闭 3-故障 4-未启用 |
心跳和注册消息
心跳消息
由设备通过消息通道主动发送,服务端进行应答。
设备->服务端
消息头 | 长度 | 设备号 | 网络信号强度 | 运行时间 |
3byte | 3byte | 15byte | 1byte | 4byte |
固定字"DCF" | 消息的总长度 | IMEI | 0-5格 | 设备开始运行进行秒计数,返 回开机到当前的秒数,十六进 制字符串形式 |
服务端->设备
消息头 | 长度 | UNIX时间戳 |
3byte | 3byte | 4byte |
固定字"DCF" | 消息的总长度 | UNIX时间戳的十六进制字符串 |
注册消息
设备连接网络成功后,发布的第一条数据,发布后需要等待服务端应答,没有应答不得发送其他数据,需要反复注册,直到成功为止。
设备->服务端
消息头 | 长度 | 设备号 | SIM卡ID | 设备类型编号 | 设备软件版本号 |
3byte | 3byte | 15byte | 20byte | 3byte | 3byte |
固定字"REG" | 消息的总长度 | IMEI | ICCID | DCF:电磁阀终端 | 100,表示1.0.0版本 |
服务端->设备
消息头 | 长度 | 注册结果 | 区域编号 |
3byte | 3byte | 1byte | 4byte |
固定字"REG" | 消息的总长度 | 1-注册成功 2-注册到期 3-设备非法 4-注册失败 |
数字的十六进制字符串, 如果设备不存在区域则返回0 |