Skip to content

MQTT 应用端订阅

ZhiLian.Yun 支持开放的 MQTT 应用端订阅服务,适用于您在自有软件应用或第三方应用中实时接收设备的最新消息。

您不仅可以在服务器上订阅设备消息,也可以在基于浏览器的 Web 应用中通过 JavascriptMQTT@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 格式,举例如下:

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 格式,举例如下:

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 格式,举例如下:

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进制数据类型为例,举例如下:

json
{
  "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 格式的自定义数据流为例,举例如下:

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 格式,举例如下:

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 格式。

设备端连接到平台时,发送上线通知,举例如下:

json
{
  "projectId":"0****0",     // 项目ID
  "topic":"online",         // 主题类型,固定: online
  "ts":1778408271107,       // 消息发送时间,单位:毫秒
  "traceId":"aa**bb",       // 消息跟踪ID
  "device":{                // 设备信息
    "deviceCode":"10000104" // 设备码
  },
  "onlineStatus":{
    "onlineStatus":1,      // 当前状态 1:上线 2:离线
    "time":1779108398705   // 状态变动时间戳,单位:毫秒
  }
}

设备端主动断开连接时,发送断开通知,举例如下:

json
{
  "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 格式。

举例如下:

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 格式。

举例如下:

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    // 变动时间戳,单位:秒, 可过滤过期消息
    }
  ]
}