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

ModeBase Derived Cluster

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.

ParameterTypeDescription
NewMode uint8 Target mode number, taken from the Mode field in SupportedModes
Switching Timing Constraints

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.

FieldTypeDescription
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)TypeDescription
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

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

OnMode vs StartUpMode

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.

0x4000
DeepClean Deep Clean -- maximum suction + multiple passes, suitable for heavily soiled areas
0x4001
VacuumOnly Vacuum Only -- activates only the vacuum function, mopping module disabled
0x4002
MopOnly Mop Only -- activates only the mopping module, vacuum disabled
0x4003
VacuumAndMop Vacuum and Mop -- simultaneous vacuuming and mopping (the most common everyday mode)
ModeTag and ModeBase Common Tags

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.

0x00
Success Success -- mode has been switched
0x01
UnsupportedMode Unsupported mode -- NewMode is not in SupportedModes
0x02
GenericFailure Generic failure -- unable to switch due to an unknown reason
0x03
InvalidInMode Not allowed in current state -- e.g. switching cleaning modes while the vacuum is running
RVC-Specific Constraints

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)
}
Developer Tip

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

  1. The app reads SupportedModes (0x0000) to get all cleaning modes supported by the device
  2. Display corresponding icons based on each mode's ModeTag -- e.g. VacuumOnly shows a vacuum icon, MopOnly shows a mop icon
  3. The user selects "Mop Only" (Mode = 2); the app sends ChangeToMode with NewMode = 2
  4. The device returns ChangeToModeResponse with Status = 0x00 (Success)
  5. The app subscribes to CurrentMode (0x0001) changes to confirm the switch and update the highlight

Scenario 2: Set Default Power-On Cleaning Mode

  1. The user selects "Default to Deep Clean on power-on" in the settings page
  2. The app writes OnMode (0x0003) Removed in newer versions = 0 (the Mode value for Deep Clean)
  3. Next time the vacuum powers on or activates from the charging dock, it automatically switches to Deep Clean mode
  4. If the user selects "Keep previous mode", the app writes OnMode = null