标准MQTT协议介绍
# 标准协议概述
# 1.1. 协议简介
标准对接协议是基于MQTT协议制定的数据通信规范,实现了设备端和物联网平台之间的的业务数据交互。 支持MQTT 3.1、MQTT 3.1.1协议,数据传输格式为JSON,字符串编码使用UTF-8。
# 1.1.2. 身份认证
设备登录验证采用一机一密式,在平台端的设备基本信息页面可以查看该设备的mqtt连接相关参数:
- 主机名
- 端口号
- clientId(等同于deviceId)
- username(等同于deviceId)
- password(默认为系统随机生成,用户可以自定义修改)
客户端被允许使用的topic:
- sys/device/${deviceId}/#
# 1.2. 协议内容
功能名称 | 类型 | topic | 说明 |
---|---|---|---|
实时数据上报 | 发布 | sys/device/deviceId/variant_data | 设备端主动上报实时数据 |
数据控制请求 | 订阅 | sys/device/deviceId/write_variant | 平台端发起数据点控制请求 |
数据控制回复 | 发布 | sys/device/deviceId/write_variant_reply | 设备端回复数据控制结果 |
报警上报 | 发布 | sys/device/deviceId/alarm_event | 设备端主动上报报警事件 |
注:topic中的变量deviceId}在实际通信时需要替换为平台端显示的设备id
# 1.2.1. 实时数据上报
topic
sys/device/deviceId/variant_data
payload示例
{
"type": "variant_data",
"version": "1.0",
"time": 1600324099000,
"params": {
"Va": 221.5,
"Vb": 216.65,
"开关1": 0
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
参数说明
名称 | 数据类型 | 必需 | 说明 |
---|---|---|---|
type | String | 是 | 功能类型,当前协议版本固定为"variant_data" |
version | String | 是 | 协议版本号,当前协议版本固定为"1.0" |
time | Number | 否 | 发生时间,格式为毫秒级的UNIX时间戳(从1970年开始的毫秒数) |
params | Object | 是 | 需要上报的数据信息,以变量名为json key,数值为value,支持同时上报一个或多个数据。 |
注:bool类型的数据点在上报实时数据时,对应数据值请使用1、0来代表true、false
# 1.2.2. 数据控制请求
topic
sys/device/deviceId/write_variant
payload示例
{
"id": "2ui7SBz6bzzawjrL",
"type": "write_variant",
"version": "1.0",
"time": 1600324099000,
"params": {
"开关1": 1
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
参数说明
名称 | 数据类型 | 必需 | 说明 |
---|---|---|---|
id | String | 是 | 消息唯一id号,由平台端自动生成 |
type | String | 是 | 功能类型,当前协议版本固定为"write_variant" |
version | String | 是 | 协议版本号,当前协议版本固定为"1.0" |
time | Number | 否 | 发生时间,格式为毫秒级的UNIX时间戳(从1970年开始的毫秒数) |
params | Object | 是 | 需要控制的数据,以变量名为json key,数值为value,支持同时控制一个或多个数据。 |
注:bool类型的数据点在平台下发控制时,数值使用1、0代表true、false
# 1.2.3. 数据控制回复
topic
sys/device/deviceId/write_variant_reply
payload示例
{
"id": "2ui7SBz6bzzawjrL",
"type": "write_variant_reply",
"version": "1.0",
"time": 1600324099000,
"code": 0
}
1
2
3
4
5
6
7
2
3
4
5
6
7
参数说明
名称 | 数据类型 | 必需 | 说明 |
---|---|---|---|
id | String | 是 | 消息唯一id号,需要和write_variant协议中的id对应 |
type | String | 是 | 功能类型,当前协议版本固定"write_variant_reply" |
version | String | 是 | 协议版本号,当前协议版本固定为"1.0" |
time | Number | 否 | 发生时间,格式为毫秒级的UNIX时间戳(从1970年开始的毫秒数) |
code | Number | 是 | 状态码,标识该操作是否成功。0:无错误,10000:其他原因,10001:不支持该操作,41001:子设备离线,41002:数据只读 |
# 1.2.4. 报警上报
topic
sys/device/deviceId/alarm_event
payload示例
{
"type": "alarm_event",
"version": "1.0",
"time": 1600324099000,
"params": {
"alarm1": 1,
"alarm2": 1
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
参数说明
名称 | 数据类型 | 必需 | 说明 |
---|---|---|---|
type | String | 是 | 功能类型,当前协议版本固定为"alarm_event" |
version | String | 是 | 协议版本号,当前协议版本固定为"1.0" |
time | Number | 否 | 发生时间,格式为毫秒级的UNIX时间戳(从1970年开始的毫秒数) |
params | Object | 是 | 需要上报的报警信息,以报警名称为json key,报警触发类型为value(1:报警已触发,0:报警已恢复),支持同时上报一个或多个报警。 |