洗衣机控制 Cluster(LaundryWasherControls)
Cluster ID: 0x0053 |
所在 Endpoint: 通常在 Endpoint 1+(家电功能端点)
LaundryWasherControls 用于管理洗衣机的操作参数 —— 脱水转速和漂洗次数。 它是一个纯属性驱动的 Cluster(没有命令),所有操作通过直接写属性完成。 与 LaundryWasherMode(0x0051) 配合使用: Mode 负责选择洗涤模式(标准、轻柔、强力等),Controls 负责调整具体的运行参数。
洗衣机通常同时实现两个 Cluster:
- LaundryWasherMode(0x0051) —— 选择洗涤程序(标准、轻柔、强力、漂白等),决定整体洗涤策略
- LaundryWasherControls(0x0053) —— 在选定模式的基础上微调参数(脱水转速、漂洗次数)
类比来说:Mode 是「选哪个菜谱」,Controls 是「盐多放一点还是少放一点」。 两者通常在同一个 Endpoint 上,App 界面上可以设计为模式选择 + 参数调节的组合面板。
Feature 位图
LaundryWasherControls 通过 FeatureMap(0xFFFC)声明设备支持哪些控制能力。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 存储的是 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 枚举值
并非所有洗衣机都支持全部 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 的数据来构建完整的控制界面。
- 读取
LaundryWasherMode的SupportedModes (0x0000)和CurrentMode (0x0001),展示模式选择按钮 - 读取
LaundryWasherControls的FeatureMap (0xFFFC),确认支持哪些参数调节 - 如果支持 SPIN:读取
SpinSpeeds (0x0000)生成转速选择器,用SpinSpeedCurrent (0x0001)标记当前选中项 - 如果支持 RINSE:读取
SupportedRinses (0x0003)生成漂洗选项,用NumberOfRinses (0x0002)标记当前值 - 用户切换洗涤模式后,设备可能自动调整 SpinSpeedCurrent 和 NumberOfRinses —— 订阅这两个属性的变化,及时刷新界面
场景 2:敏感衣物洗涤 —— 低转速 + 额外漂洗
用户洗婴儿衣物或丝绸等精细织物时,需要降低脱水转速以减少磨损,同时增加漂洗次数以去除洗涤剂残留。
- 先通过
LaundryWasherMode切换到「轻柔 / Delicate」模式 - 读取
SpinSpeeds (0x0000),找到最低转速的索引(通常是 0) - 写入
SpinSpeedCurrent (0x0001) = 0,选择最低转速 - 检查
SupportedRinses (0x0003)是否包含2(Extra)或3(Max) - 写入
NumberOfRinses (0x0002) = 2(Extra),增加漂洗次数 - App 可以为常见场景(婴儿衣物、过敏体质等)预设这套参数组合,一键应用