标准MQTT接入
# 1. 操作流程
# 2. 云平台添加MQTT设备
# 2.1. 添加BOX
点击【第三方BOX接入】—>BOX管理—>批建设备—>输入批建设备数量(这里1台为例)
所属协议:标准MQTT
设备来源:BOX输入
设备ID:设备ID,可以使用MQTT设备名称
添加完后设备列表里新增了刚才添加的设备,点击设备名称,可以查看设备的详细信息。
其中 mqtt 主机名,mqtt端口号,mqtt username,mqtt password 要填入MQTT配置中;
若MQTT 通讯正常,设备状态变为“在线”;
若MQTT 通讯异常,设备状态变为“离线”;
# 2.2. 修改设备密钥
设备密钥有平台自动生成,也可以手动修改,操作方法如下:
# 3. MQTT设备设置
本文以mqtt.fx客户端为例
# 3.1. 配置mqtt服务
- 添加设备
Broker Address:云平台的mqtt 主机名;
Broker Address:9006
Client ID:设备ID
User Name:云平台的mqtt username
Password:云平台的mqtt password
- 点击 connect
绿色表示连接正常
# 3.2. 添加主题
# 3.2.1. 发布监控点
在【发布】页面下添加主题:
主题名称:sys/device/${deviceId}/variant_data,如sys/device/123456/variant_data
参数说明:
# 3.2.2. 写监控点
- 在【Subscribe】页面下添加主题
主题名称:sys/device/123456/write_variant
- 在【Subscribe】页面下添加主题:
说明:当设备收到云平台发送的控制信息后,需要自动回复,格式如下
主题:sys/device/123456/write_variant_reply
# 4. 云平台【第三方BOX】添加变量和报警
# 4.1. 添加变量
【第三方BOX接入】-点击设备-【变量列表】-新建变量,弹出【新建变量】页面
变量名称:自定义,可填写MQTT设备变量名称。
对接名称: MQTT设备变量名称,默认与变量名称一致,可修改;
变量单位:自定义
数据类型:布尔/整数/长整数/浮点数,与MQTT设备变量设置保持一致
读写类型:只读/可读可写,与MQTT设备变量设置保持一致
存储方式:不存储/周期
启用线性换算:不启用/启用
# 4.2. 添加报警
报警名称:必填,自定义
报警详情:必填,自定义
报警变量:选择【变量列表】中的变量
报警规则:可输入=、!=、>=、>、<=、<,a<=变量值<b,a<变量值<b,a<=变量值<=b,a<变量值<=b规则
# 5. 云平台【项目中心】添加项目和设备
# 5.1. 添加项目
进入【项目中心】-->【新建项目】
项目名称:自定义
设备来源:第三方设备
# 5.2. 添加设备
进入进入【项目中心】-->选择项目-->【项目配置】,点击“绑定设备”弹出【添加设备】的页面,此页面出现的设备均为第三方设备里添加的设备并且没有被其他项目绑定过;选择相应设备后点击“保存”。
# 6. 云平台【项目中心】 查看数据监控和报警
# 6.1. 查看数据监控
【项目中心】-->【数据监控】--->【实时监控】可以看到添加的变量及属性;
# 6.2. 查看报警
当报警触发后,在【项目中心】——【报警监控】-->【活跃报警】里可以看到报警信息
# 7. 标准协议概述
# 7.1. 协议简介
标准对接协议是基于MQTT协议制定的数据通信规范,实现了设备端和物联网平台之间的的业务数据交互。
支持MQTT 3.1、MQTT 3.1.1协议,数据传输格式为JSON,字符串编码使用UTF-8。
# 7.1.2. 身份认证
设备登录验证采用一机一密式,在平台端的设备基本信息页面可以查看该设备的mqtt连接相关参数:
- 主机名
- 端口号
- clientId(等同于deviceId)
- username(等同于deviceId)
- password(默认为系统随机生成,用户可以自定义修改)
客户端被允许使用的topic:
- sys/device/${deviceId}/#
# 7.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
# 7.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
}
}
# 参数说明
名称 | 数据类型 | 必需 | 说明 |
---|---|---|---|
type | String | 是 | 功能类型,当前协议版本固定为"variant_data" |
version | String | 是 | 协议版本号,当前协议版本固定为"1.0" |
time | Number | 否 | 发生时间,格式为毫秒级的UNIX时间戳(从1970年开始的毫秒数) |
params | Object | 是 | 需要上报的数据信息,以变量名为json key,数值为value,支持同时上报一个或多个数据。 |
注:bool类型的数据点在上报实时数据时,对应数据值请使用1、0来代表true、false
# 7.2.2. 数据控制请求
# topic
sys/device/deviceId/write_variant
# payload示例
{
"id": "2ui7SBz6bzzawjrL",
"type": "write_variant",
"version": "1.0",
"time": 1600324099000,
"params": {
"开关1": 1
}
}
# 参数说明
名称 | 数据类型 | 必需 | 说明 |
---|---|---|---|
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
# 7.2.3. 数据控制回复
# topic
sys/device/deviceId/write_variant_reply
# payload示例
{
"id": "2ui7SBz6bzzawjrL",
"type": "write_variant_reply",
"version": "1.0",
"time": 1600324099000,
"code": 0
}
# 参数说明
名称 | 数据类型 | 必需 | 说明 |
---|---|---|---|
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:数据只读 |
# 7.2.4. 报警上报
# topic
sys/device/deviceId/alarm_event
# payload示例
{
"type": "alarm_event",
"version": "1.0",
"time": 1600324099000,
"params": {
"alarm1": 1,
"alarm2": 1
}
}
# 参数说明
名称 | 数据类型 | 必需 | 说明 |
---|---|---|---|
type | String | 是 | 功能类型,当前协议版本固定为"alarm_event" |
version | String | 是 | 协议版本号,当前协议版本固定为"1.0" |
time | Number | 否 | 发生时间,格式为毫秒级的UNIX时间戳(从1970年开始的毫秒数) |
params | Object | 是 | 需要上报的报警信息,以报警名称为json key,报警触发类型为value(1:报警已触发,0:报警已恢复),支持同时上报一个或多个报警。 |