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.
Relationship with Base OperationalState

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
No Start or Resume Commands

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.

State Constraints

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

Removed in newer Matter 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.

State Constraints

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.

FieldTypeDescription
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
Phase Tracking Specifics for Robot Vacuums

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)

0
Stopped Stopped -- the robot is idle and can be started for cleaning via RvcRunMode
1
Running Running -- performing a cleaning task; can be Paused, Stopped, or sent GoHome
2
Paused Paused -- cleaning is paused; can be resumed via RvcRunMode or Stopped
3
Error Error -- a fault has occurred; check OperationalError for details

RVC Extended States

0x40
SeekingCharger Seeking Charger -- the robot is automatically navigating back to the charging dock
0x41
Charging Charging -- docked at the charging station and currently charging
0x42
Docked Docked -- parked at the charging station, fully charged or on standby
Charging State Transitions

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)

0
NoError No Error -- everything is normal
1
UnableToStartOrResume Unable to Start or Resume -- the robot cannot begin cleaning for some reason
2
UnableToCompleteOperation Unable to Complete Operation -- an unrecoverable issue was encountered during cleaning
3
CommandInvalidInState Command invalid in current state -- e.g. calling GoHome while in Docked state

RVC Extended Error Codes

0x40
FailedToFindChargingDock Failed to find charging dock -- the robot cannot locate or navigate to the dock
0x41
Stuck Stuck -- the robot is trapped by an obstacle or terrain and cannot move
0x42
DustBinMissing Dust bin not installed -- the dust bin was removed and not replaced
0x43
DustBinFull Dust bin full -- the dust bin must be emptied before cleaning can continue
0x44
WaterTankEmpty Water tank empty -- the water tank is empty in mopping mode; water needs to be added
0x45
WaterTankMissing Water tank not installed -- the water tank was removed and not replaced
0x46
WaterTankLidOpen Water tank lid open -- the tank lid is not properly closed, risking water leakage
0x47
MopCleaningPadMissing Mop cleaning pad not installed -- mopping mode requires a mop pad to operate
Error Handling Recommendations

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.

FieldTypeRequiredDescription
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.

FieldTypeRequiredDescription
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.).

FieldTypeDescription
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.

FieldTypeRequiredDescription
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
Cleaning Report

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": ""
  }
}
Developer Tip

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

  1. The robot is in Docked (0x42) state, parked on the charging dock on standby
  2. The user sends a ChangeToMode command via the RvcRunMode Cluster, selecting the "Standard Cleaning" mode
  3. The robot leaves the dock, its state changes to Running (1), and cleaning begins
  4. The app subscribes to OperationalState, CurrentPhase, and CountdownTime to update cleaning progress and remaining time in real time
  5. After cleaning is complete, the robot automatically enters SeekingCharger (0x40) state to return to dock
  6. After reaching the dock, it changes to Charging (0x41), and to Docked (0x42) when fully charged
  7. The OperationCompletion event is triggered; the app displays a cleaning report: "Cleaning complete, total duration 45 minutes"

Scenario 2: Error Handling During Cleaning

  1. The robot is cleaning (Running (1)) and suddenly gets stuck on a carpet edge
  2. The robot fails to free itself, its state changes to Error (3), and OperationalError updates to:
    • ErrorStateID = 0x41 (Stuck)
    • ErrorStateLabel = "Robot Stuck"
    • ErrorStateDetails = "Left wheel cannot rotate; please check for foreign objects"
  3. The device triggers the OperationalError event (CRITICAL priority); the app shows a push notification
  4. The app displays corresponding action guidance based on error code 0x41 (Stuck): "Please move the robot to an open area"
  5. After the user resolves the issue, send Stop (0x01) Removed in newer versions to clear the error state
  6. Restart the cleaning task via RvcRunMode

Scenario 3: Manual Return to Dock (GoHome)

  1. The robot is cleaning (Running (1)) and the user wants it to return to dock early
  2. The app sends the GoHome (0x80) command
  3. The robot stops cleaning, its state changes to SeekingCharger (0x40), and it begins automatically navigating back to the dock
  4. The app can display a "Returning to charging dock..." status message
  5. After the robot arrives at the dock, its state changes to Charging (0x41)
  6. If the dock cannot be found during navigation, the state changes to Error (3), with error code FailedToFindChargingDock (0x40)
  7. The app displays: "Cannot find the charging dock. Please check that the dock is powered on and the area in front is clear."