Skip to content

监控离线与断电事件

适用场景

适用于后端更新设备可用性、产生告警或记录设备支持的断电信号,同时避免反复轮询设备状态。

  • device.connection.onlinedevice.connection.offline 表示连接状态变化。
  • device.power.lost 表示设备上报了断电信号。
  • 不同设备类型不一定具有相同的断电检测能力。对产品承诺断电告警前,应检查设备类型定义和交付的设备文档;没有明确记录断电能力时,不能推断为支持。

推荐流程

WebSocket 提供及时通知,但不是永久状态来源。当前状态应保存在你的服务中;发生事件缺口后,通过 REST 恢复。

分步骤实现

  1. 使用查询设备列表建立账号的初始状态。
  2. 开启断电相关 UI 或告警前,检查设备类型定义列表和交付的设备文档。通用操作列表不能证明设备支持断电检测。
  3. 创建 WebSocket Ticket,建立连接,并启动协议 Ping/Pong 与 session.ping
  4. 收到 device.connection.offline 后,停止把设备展示为可控制状态,并记录 occurredAt
  5. 收到 device.connection.online 后,更新连接状态,但不要假定外设数据已经完成同步。需要当前状态时再刷新单台设备。
  6. 收到 device.power.lost 后,持久化事件,并根据结构化 topic 和时间字段告警。不要解析可选的固件 message 或据此做程序分支。
  7. 重连后使用 REST 恢复账号状态基线,只立即确认关键设备。

关键接口与事件

用途文档
当前账号状态基线查询设备列表
确认单台设备查询设备详情
在线和离线事件设备连接事件
断电事件语义设备断电事件
心跳与恢复心跳与重连

失败与恢复策略

  • 检测连接关闭和心跳超时,使用有上限的指数退避和随机抖动重连。
  • 不要复用 wsTicket;每次尝试建连前都创建新 ticket。
  • 事件不会补发。重连后应重建当前状态,而不是假设断线期间没有事件。
  • 重试或重连边界可能出现重复处理。使用已有的 topic、deviceId、时间字段和最终状态实现幂等,不要依赖事件契约中不存在的字段。
  • 断电事件通常会伴随离线事件,但告警流程必须允许其中一类事件单独到达。

生产环境注意事项

  • 分别保存事件接收时间和设备的 occurredAt,便于观测延迟。
  • 设计告警抑制和恢复规则,避免重连抖动产生重复事件单。
  • 将 WebSocket 作为实时更新通道,将 REST 作为状态恢复路径。
  • 设备接入时确认断电检测能力,不要因为其他设备类型支持就直接推断当前设备支持。

下一步

Docs buildVersion v1.3.6-20260720-180213-70
Copyright © 2026 WLTE