扫地机器人操作状态 Cluster(RvcOperationalState)
Cluster ID: 0x0061 |
所在 Endpoint: 通常在 Endpoint 1(功能端点) |
继承自: OperationalState(0x0060)
RvcOperationalState 是 OperationalState(0x0060) 的扫地机器人专用派生 Cluster。它继承了基础状态机的所有属性和事件结构, 但根据扫地机器人的实际使用场景做了重要调整:
- 去掉了 Start 和 Resume 命令 —— 扫地机器人通过 RvcRunMode Cluster 选择清扫模式来启动,不直接用 Start
- 新增了 GoHome 命令(0x80) —— 让机器人主动回充电座
- 扩展了 3 个 RVC 专属运行状态 —— SeekingCharger(寻找充电座)、Charging(充电中)、Docked(已停靠)
- 扩展了 8 个 RVC 专属错误码 —— 涵盖充电座、卡住、尘盒、水箱、拖布等常见故障
RvcOperationalState 并非替代 OperationalState,而是在其基础上定制了扫地机器人的行为。 基础的 4 个状态(Stopped/Running/Paused/Error)仍然保留,RVC 扩展的 3 个状态(0x40~0x42) 是在此基础上增加的。同样,基础的 4 个错误码(NoError/UnableToStartOrResume 等)仍然有效, RVC 扩展的 8 个错误码(0x40~0x47)用于描述扫地机器人特有的故障场景。
命令(Commands)
RvcOperationalState Cluster 共有 3 个命令。相比基础 OperationalState 的 4 个命令,
去掉了 Start(0x02)和 Resume(0x03),
因为扫地机器人的启动和模式切换由 RvcRunMode Cluster 负责。
新增了 GoHome(0x80) 命令,用于让机器人返回充电座。
所有命令执行后都会返回 OperationalCommandResponse,包含一个
ErrorStateStruct 用于指示操作是否成功。
| ID | 名称 | 说明 | 响应 |
|---|---|---|---|
0x00 |
Pause | 暂停当前操作 | OperationalCommandResponse |
0x01 |
Stop 新版已移除 | 停止操作 | OperationalCommandResponse |
0x80 |
GoHome | 返回充电座 | OperationalCommandResponse |
扫地机器人的启动不是通过 OperationalState 的 Start 命令,而是通过
RvcRunMode Cluster 的 ChangeToMode 命令来实现。
选择清扫模式(如标准清扫、深度清扫)后,机器人自动开始工作。
同理,暂停后的恢复也通过 RvcRunMode 来控制。
如果向 RvcOperationalState 发送 Start 或 Resume 命令,会收到
CommandInvalidInState (3) 错误。
Pause —— 暂停(0x00)
暂停机器人当前正在进行的操作(清扫、回充等)。执行成功后,OperationalState
属性变为 Paused (2)。机器人会原地停止并保留当前位置和清扫进度。不需要参数。
只有当机器人处于 Running (1) 或 SeekingCharger (0x40) 状态时才能暂停。
如果在 Stopped (0)、Charging (0x41)、Docked (0x42)
或 Error (3) 状态下调用,会返回 CommandInvalidInState (3) 错误。
使用场景
机器人正在清扫客厅,用户需要临时搬开地上的杂物。App 发送 Pause 命令, 机器人原地停止等待。整理完毕后通过 RvcRunMode 恢复清扫。
Stop —— 停止(0x01) 新版已移除
Stop 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。新版本的扫地机状态 Cluster 只保留 Pause(0x00)、Resume(0x03)和 GoHome(0x80)三个命令。要结束清扫,应通过 RvcRunMode 把运行模式切回空闲(Idle)模式。
完全停止机器人的当前操作。执行成功后,OperationalState 属性变为
Stopped (0)。与 Pause 不同,Stop 会结束本次清扫任务,
需要通过 RvcRunMode 重新选择模式才能开始新的清扫。不需要参数。
使用场景
用户要出门,不想让机器人继续清扫。发送 Stop 命令终止清扫任务。 回家后可以通过 RvcRunMode 重新启动清扫。
GoHome —— 返回充电座(0x80)
RVC 专属命令。指示机器人停止当前操作并返回充电座。
执行成功后,OperationalState 属性变为 SeekingCharger (0x40),
机器人开始自动导航回充电座。到达后状态依次变为 Charging (0x41)
→ Docked (0x42)。不需要参数。
当机器人已经处于 Charging (0x41) 或 Docked (0x42) 状态时,
调用 GoHome 会返回 CommandInvalidInState (3) 错误 —— 机器人已经在充电座上了。
使用场景
机器人清扫到一半,用户想让它提前回充电座。App 发送 GoHome 命令, 机器人放弃剩余清扫区域,自动导航回充电座充电。 也常用于清扫完成后未自动回充的情况。
OperationalCommandResponse —— 命令响应
所有三个命令(Pause/Stop/GoHome)执行后都会返回此响应。 它包含一个 ErrorStateStruct,用于指示命令是否成功。
| 字段 | 类型 | 说明 |
|---|---|---|
| CommandResponseState | ErrorStateStruct | 命令执行结果。ErrorStateID = 0 (NoError) 表示成功 |
属性详解
RvcOperationalState Cluster 继承了基础 OperationalState 的全部 6 个属性,定义完全一致。 点击下方汇总表中的属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x0000 |
PhaseList | list<string> / null | 阶段信息 | 操作阶段列表 |
0x0001 |
CurrentPhase | uint8 / null | 阶段信息 | 当前所处阶段索引 |
0x0002 |
CountdownTime | elapsed_s / null | 阶段信息 | 剩余时间(秒) |
0x0003 |
OperationalStateList | list<OperationalStateStruct> | 运行状态 | 设备支持的所有状态(含 RVC 扩展) |
0x0004 |
OperationalState | OperationalStateEnum | 运行状态 | 当前运行状态 |
0x0005 |
OperationalError | ErrorStateStruct | 运行状态 | 当前错误信息 |
阶段信息(0x0000, 0x0001, 0x0002)
描述机器人当前清扫任务的阶段进度和剩余时间。 扫地机器人的阶段划分可能包括:主区域清扫、沿边清扫、拖地、回充等。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
PhaseList(阶段列表) | list<string> / null |
机器人清扫操作的有序阶段名称列表。例如 ["主刷清扫", "沿边清扫", "回充中"]。
Nullable —— null 表示机器人不支持阶段划分。
列表最多 32 项
|
0x0001 |
CurrentPhase(当前阶段) | uint8 / null |
当前所处阶段在 PhaseList 中的索引(从 0 开始)。
Nullable —— 当 PhaseList 为 null 时,此值也为 null
|
0x0002 |
CountdownTime(剩余时间) | elapsed_s / null |
当前清扫任务的预计剩余时间,单位秒。机器人会根据剩余面积和电量定期更新此值。
Nullable —— null 表示机器人无法预估剩余时间
|
与洗衣机等家电不同,扫地机器人的阶段划分不一定是固定的线性流程。
有些机器人可能在清扫过程中动态调整阶段(如发现电量不足时插入回充阶段),
因此 PhaseList 的内容可能随任务执行而变化。
App 应定期重新读取 PhaseList,而不是只在任务开始时读取一次。
运行状态(0x0003, 0x0004, 0x0005)
描述机器人的运行状态和错误信息。OperationalStateList 会包含基础的 4 个状态
以及 RVC 扩展的 3 个状态(SeekingCharger/Charging/Docked)。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0003 |
OperationalStateList(状态列表) | list<OperationalStateStruct> | 机器人支持的所有运行状态。除了基础的 0~3 四个状态之外, RVC 还会在列表中包含 0x40~0x42 三个扩展状态(寻找充电座/充电中/已停靠) |
0x0004 |
OperationalState(运行状态) | OperationalStateEnum | 机器人当前的运行状态,取值范围见 OperationalStateEnum(含 RVC 扩展值)。 这是 App 展示机器人状态的核心属性 |
0x0005 |
OperationalError(当前错误) | ErrorStateStruct |
机器人当前的错误状态。当 OperationalState 为
Error (3) 时,此属性包含具体的错误信息(含 RVC 扩展错误码)。
无错误时 ErrorStateID = 0 (NoError)
|
枚举定义
OperationalStateEnum —— 运行状态
RVC 的运行状态枚举继承了基础 OperationalState 的 4 个标准值(0~3), 并在 0x40~0x42 范围内扩展了 3 个扫地机器人专属状态。
基础状态(继承自 OperationalState)
RVC 扩展状态
典型的充电流程是:SeekingCharger (0x40) → Charging (0x41)
→ Docked (0x42)。机器人回到充电座后先进入 Charging 状态充电,
电量充满后转为 Docked 待机状态。从 Docked 或 Charging 状态启动清扫,
需要通过 RvcRunMode Cluster 发送 ChangeToMode 命令。
ErrorStateEnum —— 错误类型
RVC 的错误状态枚举继承了基础的 4 个通用错误码(0~3), 并在 0x40~0x47 范围内扩展了 8 个扫地机器人专属错误码,涵盖充电座、机械故障、耗材等常见问题。
基础错误码(继承自 OperationalState)
RVC 扩展错误码
RVC 的 8 个扩展错误码都是用户可自行解决的物理问题。 App 在收到这些错误时,应该给出明确的操作指引(如「请清倒尘盒后重启清扫」), 而不只是显示错误码。用户处理完问题后,通过 RvcRunMode 重新启动清扫即可。
数据结构
ErrorStateStruct —— 错误状态结构
用于描述机器人的错误信息。既用于 OperationalError 属性,也用于命令响应。
结构与基础 OperationalState 完全一致。
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
| ErrorStateID | ErrorStateEnum | 是 | 错误类型编码。0 表示无错误。RVC 扩展错误码范围 0x40~0x47 |
| ErrorStateLabel | string | 否 | 可选的本地化错误标签,供 App 直接展示。对于 RVC 扩展错误码(0x40~0x47),此字段必须提供 |
| ErrorStateDetails | string | 否 | 可选的错误详细描述,提供更多诊断信息(如「左侧轮子被线缆缠绕」) |
OperationalStateStruct —— 操作状态结构
用于 OperationalStateList 属性中,描述机器人支持的每一个运行状态。
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
| OperationalStateID | uint8 | 是 | 状态编码。0~3 为标准状态,0x40~0x42 为 RVC 扩展状态 |
| OperationalStateLabel | string | 否 | 可选的本地化状态标签。对于标准状态(0~3)可省略;对于 RVC 扩展状态(0x40~0x42)必须提供 |
事件(Events)
RvcOperationalState Cluster 继承了基础 OperationalState 的 2 个事件, 用于通知控制端机器人的重要状态变化。
OperationalError 事件
当机器人进入错误状态时触发此事件。事件优先级为 CRITICAL, 确保 App 能及时收到错误通知(如机器人卡住、尘盒已满等)。
| 字段 | 类型 | 说明 |
|---|---|---|
| ErrorState | ErrorStateStruct | 当前的错误信息,ErrorStateID 可能是 RVC 扩展错误码(0x40~0x47) |
OperationCompletion 事件
当机器人完成一个完整清扫周期时触发此事件。事件优先级为 INFO。 该事件携带清扫的时间统计信息,方便 App 展示清扫报告。
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
| CompletionErrorCode | ErrorStateEnum | 是 | 清扫完成时的错误码。0 (NoError) 表示正常完成 |
| TotalOperationalTime | elapsed_s / null | 否 | 清扫总耗时(秒),包含暂停时间。null 表示机器人不支持统计 |
| PausedTime | elapsed_s / null | 否 | 暂停累计时长(秒)。null 表示机器人不支持统计 |
App 可以结合 OperationCompletion 事件的时间统计和清扫面积等信息,
生成清扫报告。例如:「本次清扫耗时 45 分钟,实际清扫 40 分钟,暂停 5 分钟」。
注意 CompletionErrorCode 不一定是 NoError —— 机器人可能因为
电量耗尽或故障而提前结束清扫,此时会携带对应的错误码。
示例数据
一台正在清扫中的扫地机器人的 RvcOperationalState Cluster 读取结果:
{
// --- 阶段信息 ---
"0x0000": ["主刷清扫", "沿边清扫", "回充中"], // PhaseList(操作阶段列表)
"0x0001": 0, // CurrentPhase = 0(当前处于「主刷清扫」阶段)
"0x0002": 2400, // CountdownTime = 2400 秒(剩余约 40 分钟)
// --- 运行状态 ---
"0x0003": [ // OperationalStateList(设备支持的状态列表)
{ "OperationalStateID": 0, "OperationalStateLabel": "已停止" },
{ "OperationalStateID": 1, "OperationalStateLabel": "运行中" },
{ "OperationalStateID": 2, "OperationalStateLabel": "已暂停" },
{ "OperationalStateID": 3, "OperationalStateLabel": "错误" },
{ "OperationalStateID": 64, "OperationalStateLabel": "寻找充电座" },
{ "OperationalStateID": 65, "OperationalStateLabel": "充电中" },
{ "OperationalStateID": 66, "OperationalStateLabel": "已停靠" }
],
"0x0004": 1, // OperationalState = Running(正在清扫)
"0x0005": { // OperationalError(当前无错误)
"ErrorStateID": 0,
"ErrorStateLabel": "",
"ErrorStateDetails": ""
}
}
RVC 设备的 OperationalStateList (0x0003) 会比基础 OperationalState 多出
3 个扩展状态条目(ID 64/65/66 即 0x40/0x41/0x42)。App 在渲染状态选择或状态指示时,
需要处理这些 RVC 专属状态的 UI 展示(如为「寻找充电座」显示导航动画、为「充电中」显示电量进度)。
同样,错误处理逻辑也需要覆盖 0x40~0x47 范围的 RVC 扩展错误码。
常见场景
场景 1:完整清扫生命周期
- 机器人处于
Docked (0x42)状态,停靠在充电座上待机 - 用户通过 RvcRunMode Cluster 发送 ChangeToMode 命令,选择「标准清扫」模式
- 机器人离开充电座,状态变为
Running (1),开始清扫 - App 订阅
OperationalState、CurrentPhase、CountdownTime, 实时更新清扫进度和剩余时间 - 清扫完成后,机器人自动进入
SeekingCharger (0x40)状态回充 - 到达充电座后变为
Charging (0x41),充满电后变为Docked (0x42) - 触发
OperationCompletion事件,App 展示清扫报告:「清扫完成,总耗时 45 分钟」
场景 2:清扫中的错误处理
- 机器人正在清扫(
Running (1)),突然被地毯边缘卡住 - 机器人尝试脱困失败,状态变为
Error (3),OperationalError更新为:ErrorStateID = 0x41 (Stuck)ErrorStateLabel = "机器人卡住"ErrorStateDetails = "左侧轮子无法转动,请检查是否有异物缠绕"
- 设备触发
OperationalError事件(CRITICAL 优先级),App 弹出推送通知 - App 根据错误码 0x41(Stuck)展示对应的操作指引:「请将机器人搬到开阔位置」
- 用户处理完毕后,发送
Stop (0x01)新版已移除 清除错误状态 - 通过 RvcRunMode 重新启动清扫任务
场景 3:手动回充(GoHome)
- 机器人正在清扫(
Running (1)),用户想让它提前回充 - App 发送
GoHome (0x80)命令 - 机器人停止清扫,状态变为
SeekingCharger (0x40),开始自动导航回充电座 - App 可以展示「正在返回充电座...」的状态提示
- 机器人到达充电座后,状态变为
Charging (0x41) - 如果导航过程中找不到充电座,状态变为
Error (3), 错误码为FailedToFindChargingDock (0x40) - App 展示:「找不到充电座,请检查充电座是否通电并且前方无障碍物」