洗碗机告警 Cluster(DishwasherAlarm)
Cluster ID: 0x005D |
所在 Endpoint: 通常在 Endpoint 1(功能端点)
DishwasherAlarm 是 Matter 中专门用于洗碗机告警和故障上报的 Cluster。 它通过一组位图(bitmap)来描述设备支持哪些告警、当前启用了哪些、哪些正在激活。 控制器可以订阅告警状态变化,也可以让用户自行配置关心哪些告警。
DishwasherAlarm Cluster 定义了一个 RESET Feature。
启用 RESET 后,Cluster 提供 Reset 命令以及 Latch 属性,
允许用户手动复位已锁存(latch)的告警。不支持 RESET 特性的设备,
告警会在故障解除后自动清除,无法手动复位。
命令(Commands)
DishwasherAlarm Cluster 有 2 个命令。ModifyEnabledAlarms 允许用户选择关心哪些告警,
Reset 用于手动复位锁存的告警(需要 RESET 特性)。
点击下方表格中的命令 ID 可跳转到对应的详细说明。
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 值不能超出 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 特性 |
锁存告警的典型用途:即使进水故障已经物理排除,设备仍然保持告警状态, 直到用户确认已处理。这避免了用户错过重要的故障事件。 自动清除的告警则在故障消失后立即恢复正常,适合临时性异常(如瞬时温度波动)。
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 四个属性共享同一套告警位定义。 每一位代表一种洗碗机可能出现的故障类型:
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)声明设备支持哪些高级能力:
启用 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:告警监控与处理
- 订阅
Notify事件,实时接收告警状态变化 - 收到事件后,检查
Active字段确定哪些新告警被触发 - 在 App 上显示对应的告警信息(如「排水异常」、「门未关好」等)
- 读取
Latch (0x0001),判断该告警是否需要手动复位 - 如果是锁存告警 —— 用户处理故障后,在 App 上点击「清除告警」,发送
Reset (0x00)命令 - 如果是自动清除告警 —— 等待故障自行消除即可,State 会自动更新
场景 2:用户自定义告警配置
- 读取
Supported (0x0003),获取设备支持的全部告警类型 - 读取
Mask (0x0000),获取当前已启用的告警 - 在设置页面展示开关列表,让用户勾选/取消关心的告警类型
- 用户修改后,发送
ModifyEnabledAlarms (0x01)写入新的 Mask 值 - 例如:用户只关心进水和排水告警,发送 Mask =
0x03(bit 0 + bit 1) - 之后设备只会上报 InflowError 和 DrainError,其他告警不再触发通知