扫地机清洁模式 Cluster(RvcCleanMode)

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

RvcCleanMode 是扫地机器人(Robotic Vacuum Cleaner)的清洁强度模式 Cluster, 派生自 ModeBase(0x0049)。它定义了扫地机不同的清洁方式 —— 深度清洁、仅吸尘、仅拖地、吸拖一体等。 与 RvcRunMode(0x0054,运行模式:清扫/映射/回充)搭配使用:RvcRunMode 决定「做什么任务」, RvcCleanMode 决定「用什么强度做」。

ModeBase 派生 Cluster

RvcCleanMode 继承 ModeBase 的全部命令和属性结构,但不支持 StartUpMode 属性 (规范明确禁止)。开机后的默认清洁模式由 OnMode 控制。 模式标签(ModeTag)在 0x4000~0x4003 范围内定义了 RVC 专属的清洁类型。

命令(Commands)

RvcCleanMode 只有一个命令 ChangeToMode,继承自 ModeBase。 设备收到后切换清洁模式,并通过 ChangeToModeResponse 返回执行结果。

ID 名称 方向 说明
0x00 ChangeToMode 客户端 → 设备 切换清洁模式
0x01 ChangeToModeResponse 设备 → 客户端 模式切换结果

ChangeToMode —— 切换模式(0x00)

请求设备切换到指定的清洁模式。NewMode 必须是 SupportedModes 列表中存在的 Mode 值,否则设备会拒绝。

参数类型说明
NewMode uint8 目标模式编号,取自 SupportedModes 中的 Mode 字段
切换时机限制

扫地机运行中时切换清洁模式,设备可能会拒绝并返回 InvalidInMode (0x03)。部分设备只允许在空闲或回充状态下切换。 建议先检查 RvcRunMode 的 CurrentMode,确认设备处于非活动状态再切换。

ChangeToModeResponse —— 响应(0x01)

设备收到 ChangeToMode 后返回此响应,指示切换是否成功。

字段类型说明
Status uint8 状态码。0x00 (Success) 表示切换成功,其余见状态码
StatusText string 可选的说明文字,失败时提供更多信息

属性详解

RvcCleanMode 继承 ModeBase 的三个属性。注意:ModeBase 定义的 StartUpMode (0x0002) 在 RvcCleanMode 中被禁止,不会出现。

ID 名称 类型 说明
0x0000 SupportedModes list<ModeOptionStruct> 设备支持的所有清洁模式
0x0001 CurrentMode uint8 当前清洁模式
0x0003 OnMode 新版已移除 uint8 / null 开机后自动切换到的模式

SupportedModes —— 模式列表(0x0000)

设备支持的全部清洁模式列表。每个模式包含编号、标签和模式标签(ModeTag), ModeTag 用于标识该模式的清洁类型(如深度清洁、仅吸尘等)。

字段(ModeOptionStruct)类型说明
Label string 模式的可读名称,最长 64 字符,如「深度清洁」「仅吸尘」
Mode uint8 模式编号,在列表内唯一。ChangeToMode 命令的参数就是这个值
ModeTags list<ModeTagStruct> 模式标签列表,至少一个。详见模式标签

CurrentMode —— 当前模式(0x0001)

设备当前的清洁模式编号,始终是 SupportedModes 中某个条目的 Mode 值。 订阅此属性可以在模式切换时同步更新 App 界面。

OnMode —— 开机模式(0x0003) 新版已移除

新版 Matter 已移除

OnMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。新版本中控制端通过 ChangeToMode 命令切换模式。

设备开机后自动切换到的清洁模式。Nullable —— null 表示开机后保持上次使用的模式。写入需要操作权限。

OnMode vs StartUpMode

ModeBase 规范中定义了 StartUpMode (0x0002),但 RvcCleanMode 明确禁止使用 StartUpMode。开机模式的控制统一通过 OnMode 完成。 如果 OnMode 为 null,设备保持断电前的清洁模式。

模式标签(ModeTag)

RvcCleanMode 在 0x4000~0x4003 范围内定义了 4 个专属标签,用于标识清洁方式的语义。 App 可以根据 ModeTag 展示对应的图标或分类,而不依赖 Label 字符串匹配。

0x4000
DeepClean 深度清洁 —— 最大吸力 + 多次覆盖,适合重度脏污场景
0x4001
VacuumOnly 仅吸尘 —— 只启动吸尘功能,不启用拖地模块
0x4002
MopOnly 仅拖地 —— 只启用拖地模块,不启动吸尘
0x4003
VacuumAndMop 吸拖一体 —— 同时吸尘和拖地(最常用的日常模式)
ModeTag 与 ModeBase 通用标签

除了上述 RVC 专属标签,每个模式还可以携带 ModeBase 定义的通用标签, 如 Auto (0x0000)、Quick (0x0001)、Quiet (0x0002) 等。 一个模式可以同时拥有多个标签 —— 例如「安静吸尘」可以标记为 VacuumOnly (0x4001) + Quiet (0x0002)。

状态码(StatusCode)

ChangeToModeResponse 中的 Status 字段使用以下状态码,与 RvcRunMode 共享同一套扩展定义。

0x00
Success 成功 —— 模式已切换
0x01
UnsupportedMode 不支持的模式 —— NewMode 不在 SupportedModes 中
0x02
GenericFailure 通用失败 —— 未知原因导致无法切换
0x03
InvalidInMode 当前状态不允许 —— 如扫地机正在运行时切换清洁模式
RVC 专属约束

扫地机在「清扫中」「回充中」等运行状态下,切换清洁模式通常会被拒绝 (返回 InvalidInMode)。建议在发送 ChangeToMode 前, 先读取 RvcRunMode 的 CurrentMode 确认设备处于空闲或待机状态。

示例数据

一台支持四种清洁模式的扫地机器人,当前处于「吸拖一体」模式:

{
  // --- 模式列表 ---
  "0x0000": [                              // SupportedModes
    {
      "Label": "深度清洁",
      "Mode": 0,
      "ModeTags": [{ "Value": 16384 }]    // DeepClean (0x4000)
    },
    {
      "Label": "仅吸尘",
      "Mode": 1,
      "ModeTags": [{ "Value": 16385 }]    // VacuumOnly (0x4001)
    },
    {
      "Label": "仅拖地",
      "Mode": 2,
      "ModeTags": [{ "Value": 16386 }]    // MopOnly (0x4002)
    },
    {
      "Label": "吸拖一体",
      "Mode": 3,
      "ModeTags": [{ "Value": 16387 }]    // VacuumAndMop (0x4003)
    }
  ],

  // --- 当前模式 ---
  "0x0001": 3                              // CurrentMode = 3(吸拖一体)
}
开发提示

不同厂商的扫地机支持的模式数量和标签可能不同。有些机型没有拖地模块, 就不会出现 MopOnly 和 VacuumAndMop 标签。 App 应始终以 SupportedModes 返回的实际列表为准, 通过 ModeTag 识别清洁类型,用 Label 作为展示文字。

常见场景

场景 1:用户切换清洁模式

  1. App 读取 SupportedModes (0x0000),获取设备支持的所有清洁模式列表
  2. 根据每个模式的 ModeTag 展示对应图标 —— 如 VacuumOnly 显示吸尘器图标,MopOnly 显示拖布图标
  3. 用户选择「仅拖地」(Mode = 2),App 发送 ChangeToMode,NewMode = 2
  4. 设备返回 ChangeToModeResponse,Status = 0x00 (Success)
  5. App 订阅 CurrentMode (0x0001) 变化,确认已切换到目标模式并更新高亮

场景 2:设置开机默认清洁模式

  1. 用户在设置页选择「开机默认使用深度清洁」
  2. App 写入 OnMode (0x0003) 新版已移除 = 0(深度清洁的 Mode 值)
  3. 下次扫地机开机或从充电桩激活时,自动切换到深度清洁模式
  4. 如果用户选择「保持上次模式」,App 写入 OnMode = null