RvcOperationalState Cluster
Cluster ID: 0x0061 |
Endpoint: Typically on Endpoint 1 (application endpoint) |
Derived from: OperationalState (0x0060)
RvcOperationalState is a OperationalState (0x0060) robot vacuum-specific derived Cluster. It inherits all attributes and event structures from the base state machine, but with important adjustments based on the actual usage scenarios of robot vacuums:
- Removed Start and Resume commands -- robot vacuums start by selecting a cleaning mode via the RvcRunMode Cluster, not by using Start directly
- Added GoHome command (0x80) -- instructs the robot to return to the charging dock
- Extended with 3 RVC-specific operational states -- SeekingCharger, Charging, and Docked
- Extended with 8 RVC-specific error codes -- covering common faults involving the charging dock, stuck conditions, dust bin, water tank, mop pad, etc.
RvcOperationalState does not replace OperationalState; rather, it customizes robot vacuum behavior on top of it. The base 4 states (Stopped/Running/Paused/Error) are still retained, and the 3 RVC-extended states (0x40~0x42) are added on top. Similarly, the base 4 error codes (NoError/UnableToStartOrResume, etc.) remain valid, and the 8 RVC-extended error codes (0x40~0x47) describe fault scenarios specific to robot vacuums.
Commands
The RvcOperationalState Cluster has 3 commands. Compared to the base OperationalState's 4 commands,
Start (0x02) and Resume (0x03) are removed,
because robot vacuum startup and mode switching are handled by the RvcRunMode Cluster.
A new GoHome (0x80) command is added for instructing the robot to return to the charging dock.
All commands return an OperationalCommandResponse after execution, containing an
ErrorStateStruct indicating whether the operation succeeded.
| ID | Name | Description | Response |
|---|---|---|---|
0x00 |
Pause | Pause current operation | OperationalCommandResponse |
0x01 |
Stop Removed in newer versions | Stop operation | OperationalCommandResponse |
0x80 |
GoHome | Return to charging dock | OperationalCommandResponse |
Robot vacuum startup is not through the OperationalState Start command, but through the
RvcRunMode Cluster's ChangeToMode command.
After selecting a cleaning mode (e.g. standard cleaning, deep cleaning), the robot automatically begins working.
Similarly, resuming after a pause is also controlled through RvcRunMode.
If Start or Resume commands are sent to RvcOperationalState, the response will be
CommandInvalidInState (3) error.
Pause (0x00)
Pauses the robot's current operation (cleaning, returning to dock, etc.). On success, the OperationalState
attribute changes to Paused (2). The robot stops in place and retains its current position and cleaning progress. No parameters required.
Pausing is only possible when the robot is in Running (1) or SeekingCharger (0x40) state.
If called while in Stopped (0), Charging (0x41), Docked (0x42),
or Error (3) state, it returns a CommandInvalidInState (3) error.
Usage Scenarios
The robot is cleaning the living room and the user needs to temporarily move items off the floor. The app sends a Pause command, and the robot stops in place and waits. After tidying up, cleaning resumes via RvcRunMode.
Stop (0x01) Removed in newer versions
Stop is no longer part of newer Matter specifications (it is absent from the connectedhomeip v1.6 definitions this site checks against). Devices built to newer versions will not implement it; this section is kept only as a reference for older devices. In newer versions the RVC Operational State cluster only keeps Pause (0x00), Resume (0x03) and GoHome (0x80). To end a cleaning run, switch RvcRunMode back to an Idle mode.
Completely stops the robot's current operation. On success, the OperationalState attribute changes to
Stopped (0). Unlike Pause, Stop terminates the current cleaning task,
and a new mode must be selected via RvcRunMode to start a new cleaning session. No parameters required.
Usage Scenarios
The user is leaving home and doesn't want the robot to continue cleaning. Send a Stop command to terminate the cleaning task. After returning home, cleaning can be restarted via RvcRunMode.
GoHome -- Return to Charging Dock (0x80)
RVC-specific command. Instructs the robot to stop its current operation and return to the charging dock.
On success, the OperationalState attribute changes to SeekingCharger (0x40),
and the robot begins automatically navigating back to the charging dock. Upon arrival, the state sequentially changes to Charging (0x41)
→ Docked (0x42). No parameters required.
When the robot is already in Charging (0x41) or Docked (0x42) state,
calling GoHome returns a CommandInvalidInState (3) error -- the robot is already on the charging dock.
Usage Scenarios
The robot is halfway through cleaning and the user wants it to return to the charging dock early. The app sends a GoHome command, and the robot abandons the remaining cleaning area and automatically navigates back to the dock to charge. Also commonly used when the robot does not automatically return to dock after finishing cleaning.
OperationalCommandResponse -- Command Response
All three commands (Pause/Stop/GoHome) return this response after execution. It contains an ErrorStateStruct indicating whether the command succeeded.
| Field | Type | Description |
|---|---|---|
| CommandResponseState | ErrorStateStruct | Command execution result. ErrorStateID = 0 (NoError) indicates success |
Attributes
The RvcOperationalState Cluster inherits all 6 attributes from the base OperationalState, with identical definitions. Click an attribute ID in the summary table below to jump to its detailed description.
| ID | Name | Type | Group | Description |
|---|---|---|---|---|
0x0000 |
PhaseList | list<string> / null | Phase Info | Operation phase list |
0x0001 |
CurrentPhase | uint8 / null | Phase Info | Current phase index |
0x0002 |
CountdownTime | elapsed_s / null | Phase Info | Remaining time (seconds) |
0x0003 |
OperationalStateList | list<OperationalStateStruct> | Operational State | All states supported by the device (including RVC extensions) |
0x0004 |
OperationalState | OperationalStateEnum | Operational State | Current operational state |
0x0005 |
OperationalError | ErrorStateStruct | Operational State | Current error information |
Phase Info (0x0000, 0x0001, 0x0002)
Describes the phase progress and remaining time of the robot's current cleaning task. Robot vacuum phases may include: main area sweeping, edge sweeping, mopping, returning to dock, etc.
| ID | Name | Type | Description |
|---|---|---|---|
0x0000 |
PhaseList (Phase List) | list<string> / null |
An ordered list of phase names for the robot's cleaning operation. Example: ["Main Brush Sweep", "Edge Sweep", "Returning to Dock"].
Nullable -- null indicates the robot does not support phase tracking.
Maximum 32 entries in the list
|
0x0001 |
CurrentPhase (Current Phase) | uint8 / null |
The index of the current phase in PhaseList (starting from 0).
Nullable -- when PhaseList is null, this value is also null
|
0x0002 |
CountdownTime (Remaining Time) | elapsed_s / null |
The estimated remaining time for the current cleaning task, in seconds. The robot periodically updates this value based on remaining area and battery level.
Nullable -- null indicates the robot cannot estimate remaining time
|
Unlike appliances such as washing machines, robot vacuum phase tracking is not necessarily a fixed linear process.
Some robots may dynamically adjust phases during cleaning (e.g. inserting a return-to-dock phase when low battery is detected),
so the contents of PhaseList may change as the task progresses.
Apps should periodically re-read PhaseList rather than reading it only once at task start.
Operational State (0x0003, 0x0004, 0x0005)
Describes the robot's operational state and error information. OperationalStateList contains the base 4 states
plus the 3 RVC-extended states (SeekingCharger/Charging/Docked).
| ID | Name | Type | Description |
|---|---|---|---|
0x0003 |
OperationalStateList (State List) | list<OperationalStateStruct> | All operational states supported by the robot. In addition to the base 4 states (0~3), RVC devices also include the three extended states 0x40~0x42 in the list (seeking charger/charging/docked) |
0x0004 |
OperationalState (Operating State) | OperationalStateEnum | The robot's current operating state; see OperationalStateEnum(including RVC-extended values). This is the core attribute for displaying the robot's status in the app |
0x0005 |
OperationalError (Current Error) | ErrorStateStruct |
The robot's current error state. When OperationalState is
Error (3), this attribute contains the specific error information (including RVC-extended error codes).
When there is no error, ErrorStateID = 0 (NoError)
|
Enum Definitions
OperationalStateEnum -- Operational States
The RVC operational state enum inherits the 4 standard values (0~3) from the base OperationalState, and extends with 3 robot vacuum-specific states in the 0x40~0x42 range.
Base States (Inherited from OperationalState)
RVC Extended States
The typical charging flow is: SeekingCharger (0x40) → Charging (0x41)
→ Docked (0x42). After the robot returns to the charging dock, it first enters the Charging state,
and transitions to the Docked standby state once fully charged. To start cleaning from Docked or Charging state,
a ChangeToMode command must be sent via the RvcRunMode Cluster.
ErrorStateEnum -- Error Types
The RVC error state enum inherits the base 4 generic error codes (0~3), and extends with 8 robot vacuum-specific error codes in the 0x40~0x47 range, covering common issues with the charging dock, mechanical faults, consumables, etc.
Base Error Codes (Inherited from OperationalState)
RVC Extended Error Codes
All 8 RVC-extended error codes represent physical issues that users can resolve on their own. When the app receives these errors, it should provide clear action guidance (e.g. "Please empty the dust bin and restart cleaning"), rather than just displaying the error code. After the user resolves the issue, cleaning can be restarted via RvcRunMode.
Data Structures
ErrorStateStruct -- Error State Structure
Used to describe the robot's error information. Used for both the OperationalError attribute and command responses.
The structure is identical to the base OperationalState.
| Field | Type | Required | Description |
|---|---|---|---|
| ErrorStateID | ErrorStateEnum | Yes | Error type code. 0 indicates no error. RVC-extended error code range is 0x40~0x47 |
| ErrorStateLabel | string | No | Optional localized error label for direct display in apps. For RVC-extended error codes (0x40~0x47), this field must be provided |
| ErrorStateDetails | string | No | Optional detailed error description providing more diagnostic information (e.g. "left wheel entangled by cable") |
OperationalStateStruct -- Operational State Structure
Used in the OperationalStateList attribute to describe each operational state supported by the robot.
| Field | Type | Required | Description |
|---|---|---|---|
| OperationalStateID | uint8 | Yes | Status code. 0~3 are standard states; 0x40~0x42 are RVC extended states |
| OperationalStateLabel | string | No | Optional localized state label. Can be omitted for standard states (0~3); must be provided for RVC-extended states (0x40~0x42) |
Events
The RvcOperationalState Cluster inherits 2 events from the base OperationalState, used to notify the controller of important state changes in the robot.
OperationalError Event
This event is triggered when the robot enters an error state. The event priority is CRITICAL, ensuring that apps receive timely error notifications (e.g. robot stuck, dust bin full, etc.).
| Field | Type | Description |
|---|---|---|
| ErrorState | ErrorStateStruct | Current error information; ErrorStateID may be an RVC extended error code (0x40~0x47) |
OperationCompletion Event
This event is triggered when the robot completes a full cleaning cycle. The event priority is INFO. The event carries time statistics for the cleaning session, enabling apps to display cleaning reports.
| Field | Type | Required | Description |
|---|---|---|---|
| CompletionErrorCode | ErrorStateEnum | Yes | Error code at cleaning completion. 0 (NoError) indicates normal completion |
| TotalOperationalTime | elapsed_s / null | No | Total cleaning duration (seconds), including paused time. null indicates the robot does not support statistics |
| PausedTime | elapsed_s / null | No | Cumulative pause duration (seconds). null indicates the robot does not support statistics |
Apps can combine the time statistics from the OperationCompletion event with cleaning area information
to generate a cleaning report. For example: "This session lasted 45 minutes: 40 minutes of cleaning, 5 minutes paused."
Note that CompletionErrorCode may not be NoError -- the robot may have
ended cleaning early due to battery depletion or a fault, in which case the corresponding error code is included.
Example Data
Read result of the RvcOperationalState Cluster from a robot vacuum currently cleaning:
{
// --- Phase info ---
"0x0000": ["Main Brush Sweep", "Edge Sweep", "Returning to Dock"], // PhaseList (operation phase list)
"0x0001": 0, // CurrentPhase = 0 (currently in "Main Brush Sweep" phase)
"0x0002": 2400, // CountdownTime = 2400 seconds (approximately 40 minutes remaining)
// --- Operational state ---
"0x0003": [ // OperationalStateList (device-supported state list)
{ "OperationalStateID": 0, "OperationalStateLabel": "Stopped" },
{ "OperationalStateID": 1, "OperationalStateLabel": "Running" },
{ "OperationalStateID": 2, "OperationalStateLabel": "Paused" },
{ "OperationalStateID": 3, "OperationalStateLabel": "Error" },
{ "OperationalStateID": 64, "OperationalStateLabel": "Seeking Charger" },
{ "OperationalStateID": 65, "OperationalStateLabel": "Charging" },
{ "OperationalStateID": 66, "OperationalStateLabel": "Docked" }
],
"0x0004": 1, // OperationalState = Running (currently cleaning)
"0x0005": { // OperationalError (no current error)
"ErrorStateID": 0,
"ErrorStateLabel": "",
"ErrorStateDetails": ""
}
}
The OperationalStateList (0x0003) of an RVC device will have
3 additional extended state entries (ID 64/65/66, i.e. 0x40/0x41/0x42) compared to the base OperationalState. When rendering state selection or indicators,
the app needs to handle UI display for these RVC-specific states (e.g. showing a navigation animation for "Seeking Charger" or a battery progress indicator for "Charging").
Likewise, error handling logic needs to cover RVC-extended error codes in the 0x40~0x47 range.
Common Scenarios
Scenario 1: Complete Cleaning Lifecycle
- The robot is in
Docked (0x42)state, parked on the charging dock on standby - The user sends a ChangeToMode command via the RvcRunMode Cluster, selecting the "Standard Cleaning" mode
- The robot leaves the dock, its state changes to
Running (1), and cleaning begins - The app subscribes to
OperationalState,CurrentPhase, andCountdownTimeto update cleaning progress and remaining time in real time - After cleaning is complete, the robot automatically enters
SeekingCharger (0x40)state to return to dock - After reaching the dock, it changes to
Charging (0x41), and toDocked (0x42)when fully charged - The
OperationCompletionevent is triggered; the app displays a cleaning report: "Cleaning complete, total duration 45 minutes"
Scenario 2: Error Handling During Cleaning
- The robot is cleaning (
Running (1)) and suddenly gets stuck on a carpet edge - The robot fails to free itself, its state changes to
Error (3), andOperationalErrorupdates to:ErrorStateID = 0x41 (Stuck)ErrorStateLabel = "Robot Stuck"ErrorStateDetails = "Left wheel cannot rotate; please check for foreign objects"
- The device triggers the
OperationalErrorevent (CRITICAL priority); the app shows a push notification - The app displays corresponding action guidance based on error code 0x41 (Stuck): "Please move the robot to an open area"
- After the user resolves the issue, send
Stop (0x01)Removed in newer versions to clear the error state - Restart the cleaning task via RvcRunMode
Scenario 3: Manual Return to Dock (GoHome)
- The robot is cleaning (
Running (1)) and the user wants it to return to dock early - The app sends the
GoHome (0x80)command - The robot stops cleaning, its state changes to
SeekingCharger (0x40), and it begins automatically navigating back to the dock - The app can display a "Returning to charging dock..." status message
- After the robot arrives at the dock, its state changes to
Charging (0x41) - If the dock cannot be found during navigation, the state changes to
Error (3), with error codeFailedToFindChargingDock (0x40) - The app displays: "Cannot find the charging dock. Please check that the dock is powered on and the area in front is clear."