MQTT 应用端订阅
ZhiLian.Yun 支持开放的 MQTT 应用端订阅服务,适用于您在自有软件应用或第三方应用中实时接收设备的最新消息。
您不仅可以在服务器上订阅设备消息,也可以在基于浏览器的 Web 应用中通过 Javascript 和 MQTT@Websocket 直接订阅设备实时消息,来实现 Web 页面实时更新设备数据,这在开发物联网数据可视化界面时发挥重要的作用。
提示 ZhiLian.Yun 提供的 MQTT 应用端订阅服务,和设备的 MQTT 接入并不是同一个 MQTT 服务,请您使用专用的 MQTT 应用端订阅服务地址和主题。
MQTT 应用端订阅功能对企业版及以上付费版项目开放。
示例代码
示例代码展示了如何使用 ZhiLian.Yun MQTT 应用端订阅服务,通过程序代码实现订阅设备实时消息的功能。
- [Node.js 示例代码 (GitHub)]
- [Python 示例代码 (GitHub)]
支持订阅哪些消息?
应用端通过 MQTT 应用端订阅可以获得的消息包括:
- 设备属性变化(包括属性上报、属性下发、云端属性更新)
- 设备事件上报
- 设备命令回复
- 设备自定义数据上报
- 设备告警/恢复
- 设备上线/断开
如何获得 MQTT 连接参数
在 项目 > 设置 > MQTT 应用端订阅 中,可以获得 MQTT 连接参数,包括:
| 参数 | 说明 |
|---|---|
| MQTT 地址 | 包含服务器地址和端口号。采用 wss:// 连接方式,支持服务器端或网页端使用。 |
| Username | 使用 ProjectViewKey |
| Password | 使用 ProjectViewSecret |
MQTT 订阅主题
以下主题中的字段说明:
<ProjectViewKey>:项目内唯一,可在 项目 > MQTT 应用端订阅 中获得。<DeviceCode>:每个设备唯一,可在设备详情页中获取,或通过 [项目 HTTP API]获取。+:表示通配符的主题,可订阅项目中的所有设备。
订阅指定设备属性变化
<ProjectViewKey>/device/<DeviceCode>/attributes订阅接收的消息为 JSON 格式,举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"attributes", // 主题类型,固定:attributes
"ts":1778404996019, // 消息发送时间,单位:毫秒
"traceId":"08***71", // 消息跟踪ID
"device":{ // 设备信息
"deviceCode":"10000023" // 设备码
},
"attributes":{ // 设备属性 JSON
"a":{"value":433,"time":1778404995919,"type":"integer"}, // 属性1
"ELEC6":{"value":0,"time":1778406009470,"type":"decimal"}, // 属性2
"AKW":{"value":"0.00","time":1778406009470,"type":"string"} // 属性3
}
}订阅项目内所有设备属性变化
<ProjectViewKey>/device/+/attributes订阅接收的消息格式同上。
订阅指定设备事件上报
<ProjectViewKey>/device/<DeviceCode>/event/report订阅接收的消息为 JSON 格式,举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"event/report", // 主题类型,固定: event/report
"ts":1778408271107, // 消息发送时间,单位:毫秒
"traceId":"aa**bb", // 消息跟踪ID
"device":{ // 设备信息
"deviceCode":"10000104" // 设备码
},
"events":[ // 事件列表
{
"msgId":13000, // 事件消息ID
"key":"alarmEvent", // 事件标识
"time":1778408270988,// 事件时间戳
"input":{ // 事件附加参数
"P":0,
"V":222
}
}
]
}订阅项目内所有设备事件上报
<ProjectViewKey>/device/+/event/report订阅接收的消息格式同上。
订阅指定设备命令回复
<ProjectViewKey>/device/<DeviceCode>/command/reply订阅接收的消息为 JSON 格式,举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"command/reply", // 主题类型,固定: command/reply
"ts":1778408271107, // 消息发送时间,单位:毫秒
"traceId":"aa**bb", // 消息跟踪ID
"device":{ // 设备信息
"deviceCode":"10000104" // 设备码
},
"service":{ // 命令回复信息
"msgId":110, // 命令回复ID
"key":"cmd_set", // 命令标识
"time":0, // 命名回复时间戳,单位:毫秒
"output":{ // 命名回复附加参数
"b":20
}
}
}订阅项目内所有设备命令回复
<ProjectViewKey>/device/+/command/reply订阅接收的消息格式同上。
订阅指定设备自定义数据上报
<ProjectViewKey>/device/<DeviceCode>/data/report订阅接收的消息为 JSON 格式,以接收 HEX 16进制数据类型为例,举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"data/report", // 主题类型,固定: data/report
"ts":1778408271107, // 消息发送时间,单位:毫秒
"traceId":"aa**bb", // 消息跟踪ID
"device":{ // 设备信息
"deviceCode":"10000104" // 设备码
},
"data": { // 设备自定义数据
"customTopicIdentifier": "stream", // 自定义数据流标识符
"formatType": "hex", // 自定义数据流数据类型
"topic": "data/stream", // 自定义数据流主题
"data": "010304010E01CA1BCB", // 自定义数据内容
"time": 1778408271107 // 自定义数据时间
}
}以接收 JSON 格式的自定义数据流为例,举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"data/report", // 主题类型,固定: data/report
"ts":1778408271107, // 消息发送时间,单位:毫秒
"traceId":"aa**bb", // 消息跟踪ID
"device":{ // 设备信息
"deviceCode":"10000104" // 设备码
},
"data": { // 设备自定义数据
"customTopicIdentifier": "stream", // 自定义数据流标识符
"formatType": "json", // 自定义数据流数据类型
"topic": "data/stream", // 自定义数据流主题
"data": { // 自定义数据内容
"AB":1234,
"CD":3568,
// ...
},
"time": 1778408271107 // 自定义数据时间
}
}订阅项目内所有设备自定义数据上报
<ProjectViewKey>/+/data订阅接收的消息格式同上。
订阅指定设备告警消息
<ProjectViewKey>/device/<DeviceCode>/alarm/message包含设备告警触发和告警恢复的消息。
订阅接收的消息为 JSON 格式,举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"alarm/message", // 主题类型,固定: alarm/message
"ts":1778408271107, // 消息发送时间,单位:毫秒
"traceId":"aa**bb", // 消息跟踪ID
"device":{ // 设备信息
"deviceCode":"10000104" // 设备码
},
"alarmRule":{ // 告警规则
"id":4, // 告警规则ID
"name":"高温告警", // 告警规则名称
"triggerType":"attrs_changed" // 告警规则触发类型
},
"alarmInfo":{ // 告警信息
"logId":1074, // 告警日志ID
"name":"高温告警", // 告警名称
"alarmLevel":2, // 告警级别:1 普通告警,2 重要告警,3 紧急告警
"alarmStatus":0, // 当前告警状态,1 表示触发,0 表示恢复
"triggerType":"attrs_changed", // 告警触发类型
"triggerValue":"", // 告警触发值
"recoverAlarmType":1, // 告警恢复类型
"recoverAlarmAt":1778406226, // 告警恢复时间戳,单位:秒
"time":1778406226, // 消息时间戳,单位:秒
"startAlarmAt":1778406093 // 告警开始时间戳,单位:秒
}
}订阅项目内所有设备告警消息
<ProjectViewKey>/device/+/alarm/message包含设备告警触发和告警恢复的消息。
订阅接收的消息格式同上。
订阅指定设备上线/断开通知
<ProjectViewKey>/device/<DeviceCode>/online包含设备上线和断开的通知。
需要注意的是,若设备端非主动断开连接,平台不会发送断开通知。关于设备在线和离线状态的详细规则,请参考[设备在线状态]。
订阅接收的消息为 JSON 格式。
设备端连接到平台时,发送上线通知,举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"online", // 主题类型,固定: online
"ts":1778408271107, // 消息发送时间,单位:毫秒
"traceId":"aa**bb", // 消息跟踪ID
"device":{ // 设备信息
"deviceCode":"10000104" // 设备码
},
"onlineStatus":{
"onlineStatus":1, // 当前状态 1:上线 2:离线
"time":1779108398705 // 状态变动时间戳,单位:毫秒
}
}设备端主动断开连接时,发送断开通知,举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"online", // 主题类型,固定: online
"ts":1778408271107, // 消息发送时间,单位:毫秒
"traceId":"aa**bb", // 消息跟踪ID
"device":{ // 设备信息
"deviceCode":"10000104" // 设备码
},
"onlineStatus":{
"onlineStatus":2, // 当前状态 1:上线 2:离线
"time":1779108398705 // 状态变动时间戳,单位:毫秒
}
}订阅项目内所有设备上线/断开通知
<ProjectViewKey>/device/+/online包含设备上线和断开的通知。
订阅接收的消息格式同上。
项目设备信息变化通知
<ProjectViewKey>/device_info_chg设备信息新增、修改、删除发送消息通知
订阅接收的消息为 JSON 格式。
举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"device_info_chg",// 主题类型,固定: device_info_chg
"ts":1778408271107, // 消息发送时间,单位:毫秒
"traceId":"aa**bb", // 消息跟踪ID
"deviceInfoChgs":[ // 设备变动数据
{
"chgId":1234, // 变动ID
"chgType": 1, // 变动类型(1:新增,2:修改,3:删除)
"deviceId":123, // 设备内部ID
"deviceCode":"10000104",// 设备码
"typeKey":"TK100023", // 设备类型标识
"chgTime":1779108398 // 变动时间戳,单位:秒, 可过滤过期消息
}
]
}项目设备类型信息变化通知
<ProjectViewKey>/device_type_chg设备类型信息新增、修改、删除发送消息通知
订阅接收的消息为 JSON 格式。
举例如下:
{
"projectId":"0****0", // 项目ID
"topic":"device_type_chg",// 主题类型,固定: device_type_chg
"ts":1778408271107, // 消息发送时间,单位:毫秒
"traceId":"aa**bb", // 消息跟踪ID
"deviceTypeChgs":[ // 设备类型变动数据
{
"chgId":1234, // 变动ID
"chgType": 1, // 变动类型(1:新增,2:修改,3:删除)
"typeId":123, // 设备类型内部ID
"typeKey":"TK100023", // 设备类型标识
"chgTime":1779108398 // 变动时间戳,单位:秒, 可过滤过期消息
}
]
}