修改日期 | 修改人 | 备注 |
2020-07-16 10:58:34[当前版本] | admin | 修正 |
2020-07-16 10:26:06 | admin | 增加检查更新协议 |
2019-07-30 14:34:04 | 秦大人 | 系统管理员修改 |
2019-07-04 10:24:40 | admin | 完善协议 |
一、建立与MQTT服务器的连接
HOST : auth.mqtt.9iot.cn
PORT : 1883
USERNAME : 请登录厂商运营系统查看。
PASSWORD : 请登录厂商运营系统查看。
CLIENT ID : 请根据设备情况,写入设备全球唯一标识。一般为设备/WIFI 模块MAC地址。 16字节,不足末尾补零。
二、MQTT发布与订阅 TOPIC 格式约定
设备端:
发布 : /${cust_id}/${product_id}/${device_mac}/update
订阅 : /${cust_id}/${product_id}/${device_mac}/get
故障上报: /${cust_id}/${product_id}/${client_mac}/update/error
客户端 :
发布 : /${cust_id}/${product_id}/${client_id}/set
订阅 : /${cust_id}/${product_id}/${client_id}/get
三、指令说明。
1)协议结构说明
|
字段 |
大小(byte) |
描述 |
协议头 |
version |
2 |
版本号 |
length |
2 |
数据包大小 |
|
header_crc |
2 |
协议头校验码 |
|
协议体 |
body |
Length - 8 |
数据体 |
body_crc |
2 |
数据体校验码 |
Version : 版本号(公有协议 0001 开始,私有协议 0501开始)
Length : 完整协议包大小
Header_crc : 协议头校验码。采用的多项式为CRC-16/CCITT的16位循环校验码
Body : 数据体,以下为数据体结构定义
字段 |
大小(byte) |
描述 |
PackageType |
1 |
协议包类型 |
Command |
2 |
应用命令字 |
Data |
不定长 |
数据 |
PackageType :协议包类型,用于应用层消息逻辑处理方式。以下为协议包类型值约定:
字节值 |
描述 |
0x00 |
Message,无需回复协议包类型 |
0x01 |
Get,需回复协议包类型,用于请求获取数据回复 |
0x02 |
Set,需回复协议包类型,用于设置数据需返回设置成功与否 |
0x03 |
Result,无需回复协议包类型,用于set/get类型正确回复包,序列号与set和get包相同 |
0x04 |
Error,无需回复协议包类型,用于set/get类型错误回复包,序列号与set和get包相同 |
Command : 应用命令字,以下为值约定:
数据包类型 |
command |
source数据来源 |
设备登录认证 |
0x0001 |
设备 |
设备数据上传 |
0x0002 |
设备 |
发送设备控制指令 |
0x0003 |
Server |
时间同步 |
0x0004 |
Server |
心跳包 |
0xFFFF |
设备 |
发送设备查询指令 |
0X0005 |
Server |
数据透传 |
0x0010 |
Server/设备 |
2)设备与服务端建立连接之后,应首先发送设备认证数据包。以下为设备认证指令说明与实例:
分类 | 描述 | 长度[字节] | 字段名 | 数据样例 |
Header |
|
2 | VERSION/版本 | 0001 |
|
|
2 | LENGTH/长度 | 0000 |
|
|
2 | Header_CRC/头部校验码 | 0000 |
PayLoad |
|
1 | PackgeType / 协议包类型 | 01 |
|
|
2 | Command / 数据包类型 | 0001 |
|
|
1 | Device Type / 设备类型 | 01 |
|
|
2 | PayLoad_CRC / 数据体校验码 | 0000 |
|
|
设备(Device Type)类型说明:
设备
标识(1byte)
电视
0x01
灯
0x02
空调
0x03
空气净化器
0x04
插座
0x05
单开开关
0x06
扫地机器人
0x07
窗帘
0x08
加湿器
0x09
风扇
0x0A
暖奶机
0x0B
豆浆机
0x0C
电热水壶
0x0D
饮水机
0x0E
电饭煲
0x0F
热水器
0x10
烤箱
0x11
净水器
0x12
冰箱
0x13
机顶盒
0x14
洗衣机
0x16
智能床
0x17
香薰机
0x18
窗
0x19
空气开关
0x1A
温度传感器
0x1B
烟雾传感器
0x1C
可燃气体传感器
0x1D
PM2.5传感器
0x1E
人体传感器
0x1F
光照传感器
0x20
雨水传感器
0x21
3)设备认证通过之后,应根据实际持续情况上报心跳包:
此处应结合接入设备和上层应用的实际情况,合理选择心跳包上传频率及方案。一般情况下,如设备在接受云端指令之外的动作触发(如机械或者红外等方案),应即时通过心跳方式将当前状态上报上来。
如设备某些参数时刻变化,如传感器类设备,则建议按一定时间间隔上报最新状态。
分类
描述
长度[字节]
字段名
数据样例
Header
2
VERSION/版本
0001
2
LENGTH/长度
0000
2
Header_CRC/头部校验码
0000
PayLoad
1
PackgeType / 协议包类型
00
2
Command / 数据包类型
FFFF
1
Device Type / 设备类型
01
不定长
0000
结合实际情况,一般可将设备当前状态值上报上来
2
PayLoad_CRC / 数据体校验码
0000
4)云端接受各客户终端的控制请求,向设备发送控制指令:
分类
描述
长度[字节]
字段名
数据样例
Header
2
VERSION/版本
0001
2
LENGTH/长度
0000
2
Header_CRC/头部校验码
0000
PayLoad
1
PackgeType / 协议包类型
02
2
Command / 数据包类型
0003
1
Control Type / 控制类型
01
1
01
Control Value / 控制设值
2
PayLoad_CRC / 数据体校验码
0000
设备应反馈控制结果:
分类
描述
长度[字节]
字段名
数据样例
Header
2
VERSION/版本
0001
2
LENGTH/长度
0000
2
Header_CRC/头部校验码
0000
PayLoad
1
PackgeType / 协议包类型
03
2
Command / 数据包类型
0002
1
00[SUCCESS]
0X[FAILD]
2
PayLoad_CRC / 数据体校验码
0000
RESULT / 控制结果
4)云端接受各客户终端的控制请求,向设备发送控制指令:
分类 |
描述 |
长度[字节] |
字段名 |
数据样例 |
Header |
2 |
VERSION/版本 |
0001 |
|
2 |
LENGTH/长度 |
0000 |
||
2 |
Header_CRC/头部校验码 |
0000 |
||
PayLoad |
1 |
PackgeType / 协议包类型 |
02 |
|
2 |
Command / 数据包类型 |
0005 |
||
1 |
Query Type / 查询类型 |
01 [为查询所有状态值] |
||
|
||||
2 | PayLoad_CRC / 数据体校验码 | 0000 |
设备应反馈查询结果:
分类 |
描述 |
长度[字节] |
字段名 |
数据样例 |
Header |
2 |
VERSION/版本 |
0001 |
|
2 |
LENGTH/长度 |
0000 |
||
2 |
Header_CRC/头部校验码 |
0000 |
||
PayLoad |
1 |
PackgeType / 协议包类型 |
03 |
|
2 |
Command / 数据包类型 |
0002 |
||
1 |
Device Type / 设备类型 |
01 |
||
不定长 |
结合实际情况 |
0000 |
||
2 | PayLoad_CRC / 数据体校验码 | 0000 |