RvcCleanMode Cluster
Cluster ID: 0x0055 |
Endpoint: Typically on Endpoint 1 (application endpoint)
RvcCleanMode is the cleaning intensity mode Cluster for Robot Vacuum Cleaners (RVC), derived from ModeBase (0x0049). It defines different cleaning methods for the vacuum -- Deep Clean, Vacuum Only, Mop Only, Vacuum and Mop, etc. Used in conjunction with RvcRunMode (0x0054, run modes: Cleaning/Mapping/Return to Dock): RvcRunMode determines "what task to do", while RvcCleanMode determines "at what intensity".
RvcCleanMode inherits all commands and attribute structures from ModeBase, but does not support the StartUpMode attribute
(explicitly prohibited by the specification). The default cleaning mode after power-on is controlled by OnMode.
Mode tags (ModeTag) define RVC-specific cleaning types in the 0x4000~0x4003 range.
Commands
RvcCleanMode has only one command, ChangeToMode, inherited from ModeBase.
The device switches the cleaning mode upon receipt and returns the execution result via ChangeToModeResponse.
| ID | Name | Direction | Description |
|---|---|---|---|
0x00 |
ChangeToMode | Client → Server | Switch cleaning mode |
0x01 |
ChangeToModeResponse | Server → Client | Mode switch result |
ChangeToMode -- Switch Mode (0x00)
Request the device to switch to the specified cleaning mode. NewMode must be
a Mode value that exists in the SupportedModes list; otherwise the device will refuse.
| Parameter | Type | Description |
|---|---|---|
| NewMode | uint8 | Target mode number, taken from the Mode field in SupportedModes |
Switching cleaning modes while the vacuum is running may be refused by the device with
InvalidInMode (0x03). Some devices only allow switching in Idle or Docked state.
It is recommended to first check RvcRunMode's CurrentMode to confirm the device is in an inactive state before switching.
ChangeToModeResponse -- Response (0x01)
The device returns this response after receiving ChangeToMode, indicating whether the switch was successful.
| Field | Type | Description |
|---|---|---|
| Status | uint8 | Status code. 0x00 (Success) indicates a successful switch; see Status Codes for others |
| StatusText | string | Optional description text; provides more information on failure |
Attributes
RvcCleanMode inherits three attributes from ModeBase. Note: ModeBase's StartUpMode (0x0002)
is prohibited in RvcCleanMode and will not appear.
| ID | Name | Type | Description |
|---|---|---|---|
0x0000 |
SupportedModes | list<ModeOptionStruct> | All cleaning modes supported by the device |
0x0001 |
CurrentMode | uint8 | Current cleaning mode |
0x0003 |
OnMode Removed in newer versions | uint8 / null | Mode automatically applied after power-on |
SupportedModes -- Mode List (0x0000)
All cleaning modes supported by the device. Each mode contains a number, label, and mode tags (ModeTag); ModeTag identifies the cleaning type of that mode (e.g. Deep Clean, Vacuum Only).
| Field (ModeOptionStruct) | Type | Description |
|---|---|---|
| Label | string | Human-readable mode name, up to 64 characters, e.g. "Deep Clean", "Vacuum Only" |
| Mode | uint8 | Mode number, unique within the list. This is the value used as the ChangeToMode command parameter |
| ModeTags | list<ModeTagStruct> | List of mode tags, at least one. See Mode Tags for details |
CurrentMode -- Current Mode (0x0001)
The device's current cleaning mode number; always the Mode value of an entry in SupportedModes. Subscribing to this attribute keeps the app UI synchronized when the mode switches.
OnMode -- Power-On Mode (0x0003) Removed in newer versions
OnMode 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 controllers switch modes with the ChangeToMode command.
The cleaning mode the device automatically switches to after power-on. Nullable -- null
indicates retaining the previously used mode after power-on. Writing requires operational privilege.
The ModeBase specification defines StartUpMode (0x0002), but RvcCleanMode
explicitly prohibits the use of StartUpMode. Power-on mode control is handled exclusively through OnMode.
If OnMode is null, the device retains the cleaning mode from before power loss.
Mode Tags (ModeTag)
RvcCleanMode defines 4 dedicated tags in the 0x4000~0x4003 range to identify cleaning method semantics. Apps can display corresponding icons or categories based on ModeTag rather than relying on Label string matching.
In addition to the RVC-specific tags above, each mode can also carry ModeBase-defined common tags,
such as Auto (0x0000), Quick (0x0001), Quiet (0x0002), etc.
A mode can have multiple tags simultaneously -- for example, "Quiet Vacuum" can be tagged as
VacuumOnly (0x4001) + Quiet (0x0002).
Status Codes
The Status field in ChangeToModeResponse uses the following status codes, sharing the same extended definitions as RvcRunMode.
Switching cleaning modes while the vacuum is in states such as "Cleaning" or "Returning to Dock" is typically refused
(returns InvalidInMode). Before sending ChangeToMode,
it is recommended to first read RvcRunMode's CurrentMode to confirm the device is in Idle or standby state.
Example Data
A robot vacuum supporting four cleaning modes, currently in "Vacuum and Mop" mode:
{
// --- Mode list ---
"0x0000": [ // SupportedModes
{
"Label": "Deep Clean",
"Mode": 0,
"ModeTags": [{ "Value": 16384 }] // DeepClean (0x4000)
},
{
"Label": "Vacuum Only",
"Mode": 1,
"ModeTags": [{ "Value": 16385 }] // VacuumOnly (0x4001)
},
{
"Label": "Mop Only",
"Mode": 2,
"ModeTags": [{ "Value": 16386 }] // MopOnly (0x4002)
},
{
"Label": "Vacuum and Mop",
"Mode": 3,
"ModeTags": [{ "Value": 16387 }] // VacuumAndMop (0x4003)
}
],
// --- Current mode ---
"0x0001": 3 // CurrentMode = 3 (Vacuum and Mop)
}
Different manufacturers' vacuums may support different numbers of modes and tags. Some models lack a mopping module
and will not have MopOnly or VacuumAndMop tags.
Apps should always rely on the actual list returned by SupportedModes,
identifying cleaning types through ModeTag and using Label as display text.
Common Scenarios
Scenario 1: User Switches Cleaning Mode
- The app reads
SupportedModes (0x0000)to get all cleaning modes supported by the device - Display corresponding icons based on each mode's ModeTag -- e.g. VacuumOnly shows a vacuum icon, MopOnly shows a mop icon
- The user selects "Mop Only" (Mode = 2); the app sends
ChangeToModewith NewMode = 2 - The device returns
ChangeToModeResponsewith Status =0x00 (Success) - The app subscribes to
CurrentMode (0x0001)changes to confirm the switch and update the highlight
Scenario 2: Set Default Power-On Cleaning Mode
- The user selects "Default to Deep Clean on power-on" in the settings page
- The app writes
OnMode (0x0003)Removed in newer versions = 0 (the Mode value for Deep Clean) - Next time the vacuum powers on or activates from the charging dock, it automatically switches to Deep Clean mode
- If the user selects "Keep previous mode", the app writes
OnMode = null