洗衣机模式 Cluster(LaundryWasherMode)
Cluster ID: 0x0051 |
所在 Endpoint: 通常在 Endpoint 1(功能端点)
LaundryWasherMode 是 Matter 中用于洗衣机模式选择的 Cluster,派生自 ModeBase Cluster。 它允许用户在洗衣机支持的多种洗涤模式之间切换,例如标准洗、轻柔洗、强力洗、漂白洗等。 每种模式通过语义标签(ModeTag)描述其用途,使不同厂商的洗衣机能以统一方式被控制。
LaundryWasherMode 继承了 ModeBase Cluster 的全部命令和属性结构, 并定义了洗衣机专属的 ModeTag 值(0x4000 ~ 0x4003)。 如果你已经熟悉 ModeBase 的工作方式,这个 Cluster 的使用方式完全一致,只是模式标签不同。
命令(Commands)
LaundryWasherMode Cluster 只有一个命令 ChangeToMode,用于切换洗涤模式。 命令执行后设备返回 ChangeToModeResponse,告知切换是否成功。
| ID | 名称 | 方向 | 说明 |
|---|---|---|---|
0x00 |
ChangeToMode | Client → Server | 切换到指定洗涤模式 |
0x01 |
ChangeToModeResponse | Server → Client | 切换结果响应(Status + StatusText) |
ChangeToMode -- 切换模式(0x00)
请求设备切换到指定的洗涤模式。NewMode 的值必须是 SupportedModes 列表中某个 ModeOptionStruct 的 Mode 字段。 设备收到后返回 ChangeToModeResponse。
请求参数
| 参数 | 类型 | 说明 |
|---|---|---|
| NewMode | uint8 | 目标模式编号,必须存在于 SupportedModes 列表中 |
响应字段(ChangeToModeResponse)
| 字段 | 类型 | 说明 |
|---|---|---|
| Status | enum8 | 操作结果状态码(见状态码) |
| StatusText | string(可选) | 人类可读的状态描述,失败时提供原因 |
使用场景
用户在 App 上选择「轻柔洗」模式,App 发送 ChangeToMode(NewMode = 1)。 洗衣机返回 ChangeToModeResponse(Status = 0x00, Success),CurrentMode 更新为 1。 如果洗衣机正在运行中不允许切换,会返回 GenericFailure 并在 StatusText 中说明原因。
属性详解
LaundryWasherMode Cluster 继承 ModeBase 的 4 个属性。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
SupportedModes | list<ModeOptionStruct> | 设备支持的所有洗涤模式 |
0x0001 |
CurrentMode | uint8 | 当前选中的模式 |
0x0002 |
StartUpMode 新版已移除 | uint8 / null | 设备启动时的默认模式 |
0x0003 |
OnMode 新版已移除 | uint8 / null | 设备开机时自动切换到的模式 |
SupportedModes -- 支持的模式列表(0x0000)
设备支持的全部洗涤模式,每个元素是一个 ModeOptionStruct:
| 字段 | 类型 | 说明 |
|---|---|---|
| Label | string | 模式名称,供人类阅读(如 "Normal"、"Delicate") |
| Mode | uint8 | 模式编号,在列表中唯一,用于 ChangeToMode 命令 |
| ModeTags | list<ModeTagStruct> | 语义标签列表,描述模式的用途(见ModeTag 标签) |
Label 是厂商自定义的显示文字,不同厂商可能用不同措辞("Normal"、"Standard"、"Regular")。 ModeTag 是标准化的语义标签,App 应优先根据 ModeTag 值判断模式类型,Label 仅用于界面展示。
CurrentMode -- 当前模式(0x0001)
当前选中的洗涤模式编号。值必须是 SupportedModes 中某个 ModeOptionStruct 的 Mode 字段。 通过 ChangeToMode 命令修改。可订阅此属性获取模式变更通知。
StartUpMode -- 启动模式(0x0002) 新版已移除
StartUpMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。新版本中上电后的模式由设备自行决定,控制端改用 ChangeToMode 命令切换模式。
设备上电或重启后的初始模式。Nullable -- 值为 null 时表示保持上次断电前的模式。
设置具体值时,该值必须存在于 SupportedModes 列表中。
OnMode -- 开机模式(0x0003) 新版已移除
OnMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。它依赖的 DEPONOFF(OnOff 依赖)特性也一并被移除;控制端改用 ChangeToMode 命令切换模式。
当设备从 Off 切换到 On 时自动应用的模式。Nullable -- 值为 null 时不覆盖,保持 CurrentMode 不变。
如果 OnMode 有值,每次开机都会将 CurrentMode 强制设为该值,忽略 StartUpMode 的设置。
如果 OnMode 不为 null,它的优先级高于 StartUpMode。 设备上电流程:先应用 StartUpMode(如果有),再在 Off → On 时应用 OnMode 覆盖。 实际效果是开机后始终使用 OnMode 指定的模式。
ModeTag 语义标签
LaundryWasherMode 定义了 4 个专属 ModeTag 值,用于标准化描述洗涤模式的类型。 App 应根据这些标签识别模式用途,而不是依赖厂商自定义的 Label 文字。
状态码(StatusCode)
ChangeToModeResponse 中 Status 字段的可能取值:
示例数据
一台支持 4 种洗涤模式、当前处于标准洗的洗衣机的 LaundryWasherMode Cluster 读取结果:
{
// --- 支持的模式列表 ---
"0x0000": [ // SupportedModes
{
"Label": "Normal",
"Mode": 0,
"ModeTags": [{ "Value": 16384 }] // 0x4000 = Normal
},
{
"Label": "Delicate",
"Mode": 1,
"ModeTags": [{ "Value": 16385 }] // 0x4001 = Delicate
},
{
"Label": "Heavy",
"Mode": 2,
"ModeTags": [{ "Value": 16386 }] // 0x4002 = Heavy
},
{
"Label": "Whites",
"Mode": 3,
"ModeTags": [{ "Value": 16387 }] // 0x4003 = Whites
}
],
// --- 当前模式 ---
"0x0001": 0 // CurrentMode = 0(Normal)
// --- 启动与开机模式 ---
}
SupportedModes 的内容由设备厂商定义,不同洗衣机支持的模式数量和编号可能不同。 App 展示模式列表时应动态读取 SupportedModes,不要硬编码模式选项。 使用 ModeTag 值判断模式类型,而不是比较 Label 字符串。
常见场景
场景 1:选择洗涤模式
- 读取
SupportedModes (0x0000)获取设备支持的所有洗涤模式 - 在 App 界面展示模式列表,根据 ModeTag 值显示对应图标和说明
- 用户选择「轻柔洗」,发送
ChangeToMode (0x00),NewMode 填入对应的 Mode 编号 - 检查 ChangeToModeResponse 的 Status:
0x00(Success)-- 切换成功,订阅 CurrentMode 确认更新0x01(UnsupportedMode)-- 模式编号无效,检查是否与 SupportedModes 同步0x02(GenericFailure)-- 设备拒绝切换,读取 StatusText 展示原因(如「洗涤中无法切换模式」)
场景 2:配置启动模式
- 读取
SupportedModes (0x0000)获取可选模式列表 - 写入
StartUpMode (0x0002)新版已移除 设置上电默认模式:- 写入具体 Mode 编号 -- 每次上电自动使用该模式(如始终默认标准洗)
- 写入
null-- 保持断电前的模式(推荐)
- 如需每次开机强制使用某个模式,可设置
OnMode (0x0003)新版已移除,其优先级高于 StartUpMode - 大多数家用场景建议两者都设为
null,让用户每次手动选择模式