洗碗机告警 Cluster(DishwasherAlarm)

Cluster ID: 0x005D  |  所在 Endpoint: 通常在 Endpoint 1(功能端点)

DishwasherAlarm 是 Matter 中专门用于洗碗机告警和故障上报的 Cluster。 它通过一组位图(bitmap)来描述设备支持哪些告警、当前启用了哪些、哪些正在激活。 控制器可以订阅告警状态变化,也可以让用户自行配置关心哪些告警。

RESET 特性

DishwasherAlarm Cluster 定义了一个 RESET Feature。 启用 RESET 后,Cluster 提供 Reset 命令以及 Latch 属性, 允许用户手动复位已锁存(latch)的告警。不支持 RESET 特性的设备, 告警会在故障解除后自动清除,无法手动复位。

命令(Commands)

DishwasherAlarm Cluster 有 2 个命令。ModifyEnabledAlarms 允许用户选择关心哪些告警, Reset 用于手动复位锁存的告警(需要 RESET 特性)。 点击下方表格中的命令 ID 可跳转到对应的详细说明。

ID 名称 说明 所需特性
0x00 Reset 复位指定的锁存告警 RESET
0x01 ModifyEnabledAlarms 修改启用的告警掩码 无

Reset —— 复位告警(0x00)

手动复位一个或多个已锁存(latched)的告警。只有在 Latch 属性中标记为锁存的告警位才需要手动复位, 其他告警会在故障解除后自动清除。此命令需要设备支持 RESET 特性。

参数类型说明
Alarms bitmap32 要复位的告警位图。每一位对应一种告警(见告警位定义),置 1 表示要复位该告警
使用场景

洗碗机排水故障(DrainError)被修复后,由于该告警是锁存类型,State 中仍然保持激活。 用户在 App 上点击「清除告警」,App 发送 Reset 命令并将 Alarms 参数的 bit 1 置为 1, 设备收到后清除 State 中的 DrainError 位。

ModifyEnabledAlarms —— 修改启用告警(0x01)

修改告警掩码(Mask),控制哪些告警处于启用状态。只有在 Mask 中启用的告警才会被设备上报。 用户可以通过这个命令屏蔽不关心的告警类型。

参数类型说明
Mask bitmap32 新的告警掩码。每一位对应一种告警(见告警位定义),置 1 表示启用该告警的上报
Mask 限制

写入的 Mask 值不能超出 Supported 属性的范围。 如果尝试启用设备不支持的告警位,命令会被拒绝。 例如设备 Supported = 0x07(只支持前 3 种告警), 则 Mask 只能在 0x00 ~ 0x07 范围内设置。

使用场景

用户在设置页面取消勾选「门未关好」告警(DoorError, bit 2), App 发送 ModifyEnabledAlarms 命令,将 Mask 中的 bit 2 清零。 之后即使门未关好,设备也不会上报 DoorError 告警。

属性详解

DishwasherAlarm Cluster 共有 4 个应用属性,全部为 bitmap32 类型。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。

ID 名称 类型 说明 所需特性
0x0000 Mask bitmap32 已启用的告警掩码 无
0x0001 Latch bitmap32 需要手动复位的告警位 RESET
0x0002 State bitmap32 当前激活的告警 无
0x0003 Supported bitmap32 设备支持的告警位 无

Mask —— 告警掩码(0x0000)

指示哪些告警当前处于启用状态。只有 Mask 中对应位为 1 的告警,设备才会在 State 中上报。 用户可以通过 ModifyEnabledAlarms 命令修改此属性。 Mask 的每一位含义见告警位定义。

ID名称类型说明
0x0000 Mask(告警掩码) bitmap32 每一位对应一种告警。1 = 启用上报,0 = 屏蔽。初始值通常等于 Supported(全部启用)

Latch —— 锁存位图(0x0001)

指示哪些告警是「锁存」类型 —— 即故障解除后告警不会自动清除,必须通过 Reset 命令手动复位。 此属性仅在设备支持 RESET 特性时存在。

ID名称类型说明
0x0001 Latch(锁存位图) bitmap32 每一位对应一种告警。1 = 锁存(需手动复位),0 = 自动清除。需要 RESET 特性
锁存 vs 自动清除

锁存告警的典型用途:即使进水故障已经物理排除,设备仍然保持告警状态, 直到用户确认已处理。这避免了用户错过重要的故障事件。 自动清除的告警则在故障消失后立即恢复正常,适合临时性异常(如瞬时温度波动)。

State —— 当前告警状态(0x0002)

反映设备当前正在激活的告警。每一位对应一种告警类型,置 1 表示该告警当前处于激活状态。 这是控制器最常订阅的属性,用于实时监测设备故障。

ID名称类型说明
0x0002 State(当前告警状态) bitmap32 每一位对应一种告警。1 = 告警激活,0 = 正常。值始终是 Mask 的子集(被屏蔽的告警不会出现在 State 中)

Supported —— 支持的告警位(0x0003)

声明设备硬件层面支持哪些告警类型。这是一个只读属性,由设备固件决定。 Mask 和 State 的有效位不能超出 Supported 的范围。

ID名称类型说明
0x0003 Supported(支持的告警位) bitmap32 每一位对应一种告警。1 = 设备支持该告警。只读,不可写入

告警位定义

Mask、Latch、State、Supported 四个属性共享同一套告警位定义。 每一位代表一种洗碗机可能出现的故障类型:

Bit 0
InflowError(进水异常) 进水管路故障 —— 水压不足、进水阀卡住或供水中断
Bit 1
DrainError(排水异常) 排水管路故障 —— 排水泵故障、管路堵塞或排水超时
Bit 2
DoorError(门未关好) 洗碗机门未完全关闭 —— 运行中门被打开或门锁故障
Bit 3
TempTooLow(温度过低) 水温低于正常工作范围 —— 加热器故障或进水温度异常
Bit 4
TempTooHigh(温度过高) 水温超出安全范围 —— 温控器失灵或加热器持续加热
Bit 5
WaterLevelError(水位异常) 水位超出正常范围 —— 可能是溢水风险或水位传感器故障
位图读取示例

State = 0x00000006(二进制 ...000110) 表示 bit 1(DrainError)和 bit 2(DoorError)同时处于激活状态。 应用层可以通过按位与操作逐一检查每种告警是否激活。

事件(Events)

DishwasherAlarm Cluster 定义了一个 Notify 事件,在告警状态发生变化时触发。 控制器应当订阅此事件以实时获取告警变更通知。

Notify —— 告警通知事件

当告警状态发生变化(告警激活或解除)时,设备会产生 Notify 事件。 事件携带变化时刻的完整快照,方便控制器精确掌握状态变更。

字段类型说明
Active bitmap32 本次变化中新激活的告警位(从 0 变为 1 的位)
Inactive bitmap32 本次变化中已解除的告警位(从 1 变为 0 的位)
State bitmap32 变化后的完整告警状态(与属性 State 一致)
Mask bitmap32 变化时刻的告警掩码(与属性 Mask 一致)
事件示例

洗碗机排水故障触发:设备产生 Notify 事件,Active = 0x02(DrainError 新激活), Inactive = 0x00(无告警解除),State = 0x02(当前只有排水告警), Mask = 0x3F(全部告警已启用)。

故障修复后用户发送 Reset:设备产生另一个 Notify 事件,Active = 0x00, Inactive = 0x02(DrainError 已解除),State = 0x00(无活跃告警), Mask = 0x3F。

Feature 位图

DishwasherAlarm Cluster 通过 FeatureMap(0xFFFC)声明设备支持哪些高级能力:

Bit 0
RESET 支持告警复位 —— 启用 Reset 命令和 Latch 属性,允许手动复位锁存的告警
RESET 特性的影响

启用 RESET:设备提供 Latch 属性和 Reset 命令。某些关键告警(如进水、排水故障) 可以设置为锁存,确保用户不会错过。
不启用 RESET:所有告警都是自动清除的,故障消失后 State 自动归零。 适合不需要用户确认的简单设备。

示例数据

一台支持全部 6 种告警、启用了 RESET 特性的洗碗机,当前存在排水告警时的 Cluster 读取结果:

{
  // --- 告警位图属性 ---
  "0x0000": "0x0000003F",    // Mask = 0x3F(全部 6 种告警均已启用)
  "0x0001": "0x00000003",    // Latch = 0x03(InflowError + DrainError 需手动复位)
  "0x0002": "0x00000002",    // State = 0x02(当前 DrainError 告警激活)
  "0x0003": "0x0000003F"     // Supported = 0x3F(设备支持全部 6 种告警位)
}
开发提示

位图属性读取后,应用层需要逐位解析来确定各告警的状态。 建议先读 Supported (0x0003) 确认设备支持哪些告警位, 再结合 Mask (0x0000) 判断哪些已启用, 最后用 State (0x0002) 获取当前激活的告警。 三者的关系是:State 是 Mask 的子集,Mask 是 Supported 的子集。

常见场景

场景 1:告警监控与处理

  1. 订阅 Notify 事件,实时接收告警状态变化
  2. 收到事件后,检查 Active 字段确定哪些新告警被触发
  3. 在 App 上显示对应的告警信息(如「排水异常」、「门未关好」等)
  4. 读取 Latch (0x0001),判断该告警是否需要手动复位
  5. 如果是锁存告警 —— 用户处理故障后,在 App 上点击「清除告警」,发送 Reset (0x00) 命令
  6. 如果是自动清除告警 —— 等待故障自行消除即可,State 会自动更新

场景 2:用户自定义告警配置

  1. 读取 Supported (0x0003),获取设备支持的全部告警类型
  2. 读取 Mask (0x0000),获取当前已启用的告警
  3. 在设置页面展示开关列表,让用户勾选/取消关心的告警类型
  4. 用户修改后,发送 ModifyEnabledAlarms (0x01) 写入新的 Mask 值
  5. 例如:用户只关心进水和排水告警,发送 Mask = 0x03(bit 0 + bit 1)
  6. 之后设备只会上报 InflowError 和 DrainError,其他告警不再触发通知