Skip to content

监控离线与电源事件

适用场景

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

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

推荐流程

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 后持久化并触发告警;收到 device.power.restored 后可以结束电源告警,但应等待 device.connection.online 后再恢复可控制状态。
  7. 电源事件只使用结构化 topic 和时间字段,不要解析固件原始文本或据此做程序分支。
  8. 重连后使用 REST 恢复账号状态基线,只立即确认关键设备。

关键接口与事件

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

失败与恢复策略

  • 检测连接关闭和心跳超时,使用有上限的指数退避和随机抖动重连。
  • 不要复用 wsTicket;每次尝试建连前都创建新 ticket。
  • 事件不会补发。重连后应重建当前状态,而不是假设断线期间没有事件。
  • 重试或重连边界可能出现重复处理。使用已有的 topic、deviceId、时间字段和最终状态实现幂等,不要依赖事件契约中不存在的字段。
  • 电源与连接事件不保证顺序,也可能只有其中一类到达。不要从 online/offline 推导供电变化。

生产环境注意事项

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

下一步

Docs buildVersion v1.5.8-20260814-180545-84
Copyright © 2026 WLTE