洗衣机控制 Cluster(LaundryWasherControls)

Cluster ID: 0x0053  |  所在 Endpoint: 通常在 Endpoint 1+(家电功能端点)

LaundryWasherControls 用于管理洗衣机的操作参数 —— 脱水转速和漂洗次数。 它是一个纯属性驱动的 Cluster(没有命令),所有操作通过直接写属性完成。 与 LaundryWasherMode(0x0051) 配合使用: Mode 负责选择洗涤模式(标准、轻柔、强力等),Controls 负责调整具体的运行参数。

与 LaundryWasherMode 的分工

洗衣机通常同时实现两个 Cluster:

  • LaundryWasherMode(0x0051) —— 选择洗涤程序(标准、轻柔、强力、漂白等),决定整体洗涤策略
  • LaundryWasherControls(0x0053) —— 在选定模式的基础上微调参数(脱水转速、漂洗次数)

类比来说:Mode 是「选哪个菜谱」,Controls 是「盐多放一点还是少放一点」。 两者通常在同一个 Endpoint 上,App 界面上可以设计为模式选择 + 参数调节的组合面板。

Feature 位图

LaundryWasherControls 通过 FeatureMap(0xFFFC)声明设备支持哪些控制能力。Feature 决定了哪些属性可用:

Bit 0
SPIN(SpinSpeedControl) 脱水转速控制 —— 启用 SpinSpeeds 和 SpinSpeedCurrent 属性,允许用户选择脱水转速
Bit 1
RINSE(RinseControl) 漂洗次数控制 —— 启用 NumberOfRinses 和 SupportedRinses 属性,允许用户选择漂洗次数
Feature 组合示例

FeatureMap = 0x01(仅 SPIN)—— 只能调转速,漂洗次数由洗涤模式固定。
FeatureMap = 0x02(仅 RINSE)—— 只能调漂洗次数,脱水转速由洗涤模式固定。
FeatureMap = 0x03(SPIN + RINSE)—— 转速和漂洗次数都可以独立调节,这是功能最完整的配置。

属性详解

LaundryWasherControls 没有命令,所有操作通过读写属性完成。 共有 4 个属性,分属两组,分别对应 SPIN 和 RINSE 两个 Feature。 点击下方汇总表中的属性 ID 可跳转到对应的详细说明。

ID 名称 类型 分组 说明
0x0000 SpinSpeeds list<string> 脱水转速 支持的转速列表
0x0001 SpinSpeedCurrent uint8 / null 脱水转速 当前选择的转速索引
0x0002 NumberOfRinses enum8 漂洗次数 当前漂洗次数设置
0x0003 SupportedRinses list<enum8> 漂洗次数 支持的漂洗选项列表

脱水转速(0x0000, 0x0001)

需要 SPIN(SpinSpeedControl) Feature。 控制洗衣机脱水阶段的转速 —— 转速越高脱水越彻底,但对衣物的磨损也越大。

ID 名称 类型 说明
0x0000 SpinSpeeds
转速列表
list<string> 设备支持的所有脱水转速,以字符串列表表示。只读属性。列表中的每个元素是厂商定义的转速名称(如 "400"、"800"、"1200",或 "Low"、"Medium"、"High")。列表的索引用于 SpinSpeedCurrent
0x0001 SpinSpeedCurrent
当前转速
uint8 / null 当前选择的脱水转速,值为 SpinSpeeds 列表的索引(从 0 开始)。可读写。Nullable —— null 表示转速由设备根据洗涤模式自动决定。写入时值必须在 0 ~ SpinSpeeds.length - 1 范围内
SpinSpeedCurrent 是索引,不是转速值

SpinSpeedCurrent 存储的是 SpinSpeeds 列表的索引,不是实际转速数字。 例如 SpinSpeeds = ["400", "800", "1200"] 时,写入 SpinSpeedCurrent = 1 表示选择 "800" 转。 App 展示时应先读取 SpinSpeeds,再用 SpinSpeedCurrent 的值作为索引去取对应的字符串。

转速名称不一定是数字

SpinSpeeds 里的字符串由厂商自行定义,不一定是纯数字。 有些洗衣机可能用 "Low"、"Medium"、"High" 这样的描述性文字, 也有些可能用 "400 RPM"、"No Spin" 等带单位的标记。 App 应直接显示这些字符串,而不是尝试解析成数字做计算。

漂洗次数(0x0002, 0x0003)

需要 RINSE(RinseControl) Feature。 控制洗涤过程中漂洗的次数 —— 漂洗越多,衣物残留的洗涤剂越少,但耗水耗时也更多。

ID 名称 类型 说明
0x0002 NumberOfRinses
漂洗次数
enum8 当前设置的漂洗次数级别。可读写。写入的值必须在 SupportedRinses 列表中(见下方枚举)
0x0003 SupportedRinses
支持的漂洗选项
list<enum8> 设备支持的漂洗次数选项列表。只读属性。列表中的每个元素是 NumberOfRinsesEnum 值。App 应只展示此列表中包含的选项

NumberOfRinsesEnum 枚举值

0
None 不漂洗 —— 跳过漂洗阶段,适合预洗或快洗场景
1
Normal 标准漂洗 —— 默认的漂洗次数,适合日常衣物
2
Extra 额外漂洗 —— 多漂洗一次,适合婴儿衣物或敏感肌肤
3
Max 最大漂洗 —— 尽可能多次漂洗,最大程度减少洗涤剂残留
SupportedRinses 决定可选项

并非所有洗衣机都支持全部 4 个漂洗级别。 App 在展示漂洗选项前,必须先读取 SupportedRinses,只显示其中包含的值。 例如 SupportedRinses = [1, 2] 表示只支持 Normal 和 Extra 两个选项, 写入 NumberOfRinses = 0(None)或 3(Max)会被设备拒绝。

示例数据

一台同时支持 SPIN 和 RINSE Feature 的洗衣机在运行中的 LaundryWasherControls Cluster 读取结果:

{
  // --- 脱水转速(SPIN Feature)---
  "0x0000": [                   // SpinSpeeds — 支持的转速列表
    "400",
    "600",
    "800",
    "1000",
    "1200"
  ],
  "0x0001": 2,                  // SpinSpeedCurrent = 2(当前选择 "800" 转)

  // --- 漂洗次数(RINSE Feature)---
  "0x0002": 1,                  // NumberOfRinses = Normal(标准漂洗)
  "0x0003": [0, 1, 2, 3]       // SupportedRinses = [None, Normal, Extra, Max]
}
开发提示

如果设备只支持 SPIN Feature(FeatureMap = 0x01),则只有 SpinSpeeds 和 SpinSpeedCurrent 两个属性; 如果只支持 RINSE Feature(FeatureMap = 0x02),则只有 NumberOfRinses 和 SupportedRinses。 读取前先检查 FeatureMap (0xFFFC),对不支持的属性发起读取会返回 UNSUPPORTED_ATTRIBUTE。

常见场景

场景 1:洗衣机控制面板 —— 模式 + 参数联动

用户在 App 上操作洗衣机时,通常先选洗涤模式,再调整转速和漂洗次数。 App 需要同时读取 LaundryWasherMode 和 LaundryWasherControls 两个 Cluster 的数据来构建完整的控制界面。

  1. 读取 LaundryWasherMode 的 SupportedModes (0x0000) 和 CurrentMode (0x0001),展示模式选择按钮
  2. 读取 LaundryWasherControls 的 FeatureMap (0xFFFC),确认支持哪些参数调节
  3. 如果支持 SPIN:读取 SpinSpeeds (0x0000) 生成转速选择器,用 SpinSpeedCurrent (0x0001) 标记当前选中项
  4. 如果支持 RINSE:读取 SupportedRinses (0x0003) 生成漂洗选项,用 NumberOfRinses (0x0002) 标记当前值
  5. 用户切换洗涤模式后,设备可能自动调整 SpinSpeedCurrent 和 NumberOfRinses —— 订阅这两个属性的变化,及时刷新界面
场景 2:敏感衣物洗涤 —— 低转速 + 额外漂洗

用户洗婴儿衣物或丝绸等精细织物时,需要降低脱水转速以减少磨损,同时增加漂洗次数以去除洗涤剂残留。

  1. 先通过 LaundryWasherMode 切换到「轻柔 / Delicate」模式
  2. 读取 SpinSpeeds (0x0000),找到最低转速的索引(通常是 0)
  3. 写入 SpinSpeedCurrent (0x0001) = 0,选择最低转速
  4. 检查 SupportedRinses (0x0003) 是否包含 2(Extra)或 3(Max)
  5. 写入 NumberOfRinses (0x0002) = 2(Extra),增加漂洗次数
  6. App 可以为常见场景(婴儿衣物、过敏体质等)预设这套参数组合,一键应用