网关设备MQTT数据交互规范
概述
本规范描述通过MQTT协议连接到ThingsPanel的网关设备接入要求,定义了设备与平台之间的数据交互格式和流程。
重要说明
- message_id 为消息标识符,近期消息不重复即可,可取毫秒时间戳的后七位(仅为建议,实际不限制长度)
- device_number 为设备编号,设备唯一标识,平台可修改
- sub_device_address 为子设备地址,网关下唯一,平台可修改
- 核心交互数据分为四类:遥测、属性、事件、命令
灵活性说明
- 订阅和发布 - 设备对于主题的订阅和发布都是可选的,可根据实际需求选择
- 响应机制 - 设备响应也是可选的,可根据业务场景决定是否实现
- 报文格式 - 非规范的报文也支持,可 通过平台脚本转换为规范格式
设备要求
设备需具备以下特性:
- ✅ MQTT客户端能力
- ✅ 可联网并稳定运行
接入步骤
- 注册设备 - 在ThingsPanel创建设备并获取配置
- 建立连接 - 设备连接到MQTT服务器
- 发送请求 - 设备发送连接请求消息
- 激活确认 - ThingsPanel确认并激活设备
- 数据交互 - 设备上报数据,接收平台控制
MQTT主题规范
设备上报主题(平台订阅)
主题 | 说明 | 数据类型 | 是否必需 |
---|---|---|---|
gateway/telemetry | 上报遥测数据 | 遥测 | 可选 |
gateway/attributes/{message_id} | 上报属性状态 | 属性 | 可选 |
gateway/event/{message_id} | 上报事件信息 | 事件 | 可选 |
gateway/command/response/{message_id} | 命令执行响应 | 响应 | 可选 |
gateway/attributes/set/response/{message_id} | 属性设置响应 | 响应 | 可选 |
设备订阅主题(平台下发)
主题说明
注意: +
表示 message_id
占位符,长度不限制
主题 | 说明 | 数据类型 | 是否必需 |
---|---|---|---|
gateway/telemetry/control/{device_number} | 接收遥测控制指令 | 控制 | 可选 |
gateway/attributes/set/{device_number}/+ | 接收属性设置指令 | 属性设置 | 可选 |
gateway/attributes/get/{device_number} | 接收属性查询请求 | 属性查询 | 可选 |
gateway/command/{device_number}/+ | 接收命令执行请求 | 命令 | 可选 |
gateway/attributes/response/{device_number}/+ | 接收属性响应确认 | 响应确认 | 可选 |
gateway/event/response/{device_number}/+ | 接收事件响应确认 | 响应确认 | 可选 |
数据交互格式
1. 遥测数据上报
主题: gateway/telemetry
遥测数据格式示例
{
"gateway_data": {
"temperature": 28.5,
"version": "v0.1",
"switch": true
},
"sub_device_data": {
"28da4985": {
"temperature": 28.5,
"version": "v0.1",
"switch": true
},
"sub_device_address2": {
"temperature": 28.5,
"version": "v0.1",
"switch": true
}
}
}
2. 属性数据上报
主题: gateway/attributes/{message_id}
属性数据格式示例
{
"gateway_data": {
"ip": "127.0.0.1",
"version": "v0.1"
},
"sub_device_data": {
"sub_device_address1": {
"ip": "127.0.0.1",
"version": "v0.1"
},
"sub_device_address2": {
"ip": "127.0.0.1",
"version": "v0.1"
}
}
}
3. 事件数据上报
主题: gateway/event/{message_id}
事件数据格式示例
{
"gateway_data": {
"method": "FindAnimal",
"params": {
"count": 2,
"animalType": "cat"
}
},
"sub_device_data": {
"sub_device_address1": {
"method": "FindAnimal",
"params": {
"count": 2,
"animalType": "cat"
}
},
"sub_device_address2": {
"method": "FindAnimal",
"params": {
"count": 2,
"animalType": "cat"
}
}
}
}
4. 接收控制指令
主题: gateway/telemetry/control/{device_number}
控制指令格式示例
{
"gateway_data": {
"temperature": 28.5,
"version": "v0.1",
"switch": true
},
"sub_device_data": {
"sub_device_address1": {
"temperature": 28.5,
"version": "v0.1",
"switch": true
},
"sub_device_address2": {
"temperature": 28.5,
"version": "v0.1",
"switch": true
}
}
}
5. 接收属性设置
主题: gateway/attributes/set/{device_number}/+
属性设置格式示例
{
"gateway_data": {
"ip": "127.0.0.1",
"version": "v0.1"
},
"sub_device_data": {
"sub_device_address1": {
"ip": "127.0.0.1",
"version": "v0.1"
},
"sub_device_address2": {
"ip": "127.0.0.1",
"version": "v0.1"
}
}
}
6. 接收属性查询请求
主题: gateway/attributes/get/{device_number}
请求所有属性:
查询所有属性
{
"gateway_data": []
}
请求指定属性:
查询指定属性
{
"gateway_data": [],
"sub_device_data": {
"sub_device_address1": ["temp", "hum"],
"sub_device_address2": ["temp", "hum"]
}
}
7. 接收命令执行请求
主题: gateway/command/{device_number}/+
命令执行格式示例
{
"gateway_data": {
"method": "FindAnimal",
"params": {
"count": 2,
"animalType": "cat"
}
},
"sub_device_data": {
"sub_device_address1": {
"method": "FindAnimal",
"params": {
"count": 2,
"animalType": "cat"
}
},
"sub_device_address2": {
"method": "FindAnimal",
"params": {
"count": 2,
"animalType": "cat"
}
}
}
}
响应格式规范
响应参数说明
参数 | 是否必输 | 类型 | 说明 |
---|---|---|---|
result | ✅ | number | 执行结果:0 -成功,1 -失败 |
errcode | ❌ | string | 错误码(失败时提供) |
message |