LaundryWasherMode Cluster

Cluster ID: 0x0051  |  Endpoint: Typically on Endpoint 1 (application endpoint)

LaundryWasherMode is a Cluster in Matter for washing machine mode selection, derived from ModeBase Cluster. It allows users to switch between multiple wash modes supported by the machine, such as Normal, Delicate, Heavy, and Whites. Each mode uses semantic tags (ModeTag) to describe its purpose, enabling standardized control across different manufacturers' washing machines.

Derived from ModeBase

LaundryWasherMode inherits all commands and attribute structures from the ModeBase Cluster, and defines washing machine-specific ModeTag values (0x4000 ~ 0x4003). If you are already familiar with how ModeBase works, this Cluster operates exactly the same way -- only the mode tags differ.

Commands

LaundryWasherMode Cluster has only one command, ChangeToMode, for switching wash modes. The device returns ChangeToModeResponse to indicate whether the switch succeeded.

ID Name Direction Description
0x00 ChangeToMode Client → Server Switch to a specified wash mode
0x01 ChangeToModeResponse Server → Client Mode switch response (Status + StatusText)

ChangeToMode (0x00)

Requests the device to switch to a specified wash mode. The NewMode value must match the Mode field of a ModeOptionStruct in the SupportedModes list. The device returns ChangeToModeResponse upon receipt.

Request Parameters

ParameterTypeDescription
NewMode uint8 Target mode number; must exist in the SupportedModes list

Response Fields (ChangeToModeResponse)

FieldTypeDescription
Status enum8 Operation result status code (see Status Codes)
StatusText string (optional) Human-readable status description; provides the reason on failure
Usage Scenarios

The user selects "Delicate" mode in the app. The app sends ChangeToMode (NewMode = 1). The washer returns ChangeToModeResponse (Status = 0x00, Success) and CurrentMode updates to 1. If the washer is running and does not allow switching, it returns GenericFailure with the reason in StatusText.

Attributes

LaundryWasherMode Cluster inherits 4 attributes from ModeBase.

ID Name Type Description
0x0000 SupportedModes list<ModeOptionStruct> All wash modes supported by the device
0x0001 CurrentMode uint8 Currently selected mode
0x0002 StartUpMode Removed in newer versions uint8 / null Default mode on device startup
0x0003 OnMode Removed in newer versions uint8 / null Mode automatically applied when device turns on

SupportedModes (0x0000)

All wash modes supported by the device. Each element is a ModeOptionStruct:

FieldTypeDescription
Label string Mode name for human display (e.g., "Normal", "Delicate")
Mode uint8 Mode number, unique in the list, used for the ChangeToMode command
ModeTags list<ModeTagStruct> List of semantic tags describing the mode's purpose (see ModeTag Tags)
Difference Between Label and ModeTag

Label is vendor-defined display text; different manufacturers may use different wording ("Normal", "Standard", "Regular"). ModeTag is a standardized semantic tag. Apps should prioritize ModeTag values for determining mode type; Label is only for UI display.

CurrentMode (0x0001)

The currently selected wash mode number. Must be the Mode field of a ModeOptionStruct in SupportedModes. Modified via the ChangeToMode command. Subscribe to this attribute for mode change notifications.

StartUpMode (0x0002) Removed in newer versions

Removed in newer Matter versions

StartUpMode 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 device decides its power-up mode itself; controllers switch modes with the ChangeToMode command.

Initial mode after device power-on or restart. Nullable — null means retain the mode from before power loss. When set to a specific value, it must exist in the SupportedModes list.

OnMode (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. The DEPONOFF (OnOff dependency) feature it relied on was removed as well; controllers switch modes with the ChangeToMode command.

Mode automatically applied when the device switches from Off to On. Nullable — null means no override; CurrentMode is preserved. If OnMode has a value, CurrentMode is forced to that value on every power-on, overriding StartUpMode.

Priority of OnMode vs StartUpMode

If OnMode is not null, it takes priority over StartUpMode. Device power-on sequence: StartUpMode is applied first (if set), then OnMode overrides when transitioning from Off → On. The practical effect is that the device always uses the mode specified by OnMode after powering on.

ModeTag Semantic Labels

LaundryWasherMode defines 4 dedicated ModeTag values for standardized wash mode identification. The app should use these tags to identify mode purposes rather than relying on vendor-defined Label text.

0x4000
Normal Normal wash — default mode for everyday laundry
0x4001
Delicate Delicate wash — for silk, lingerie, and other fine fabrics
0x4002
Heavy Heavy wash — for heavily soiled work clothes, sportswear, etc.
0x4003
Whites Whites wash — designed for white garments, typically at higher water temperature

Status Codes

Possible values for the Status field in ChangeToModeResponse:

0x00
Success Mode switch succeeded
0x01
UnsupportedMode Requested mode number does not exist in SupportedModes
0x02
GenericFailure Generic failure — the device's current state does not allow switching (e.g., while running)

Example Data

Read result from a LaundryWasherMode Cluster on a washer with 4 modes, currently in Normal:

{
  // --- Supported Modes ---
  "0x0000": [                    // SupportedModes
    {
      "Label": "Normal",
      "Mode": 0,
      "ModeTags": [{ "Value": 16384 }]   // 0x4000 = Normal
    },
    {
      "Label": "Delicate",
      "Mode": 1,
      "ModeTags": [{ "Value": 16385 }]   // 0x4001 = Delicate
    },
    {
      "Label": "Heavy",
      "Mode": 2,
      "ModeTags": [{ "Value": 16386 }]   // 0x4002 = Heavy
    },
    {
      "Label": "Whites",
      "Mode": 3,
      "ModeTags": [{ "Value": 16387 }]   // 0x4003 = Whites
    }
  ],

  // --- Current Mode ---
  "0x0001": 0                    // CurrentMode = 0 (Normal)

  // --- Startup and On Modes ---
}
Developer Tip

SupportedModes content is defined by the device manufacturer; different washers may support different numbers and numbering of modes. The app should dynamically read SupportedModes to display the mode list — do not hard-code mode options. Use ModeTag values to determine mode types rather than comparing Label strings.

Common Scenarios

Scenario 1: Select Wash Mode

  1. Read SupportedModes (0x0000) to get all wash modes supported by the device
  2. Display the mode list in the app, showing appropriate icons and descriptions based on ModeTag values
  3. The user selects "Delicate"; send ChangeToMode (0x00) with NewMode set to the corresponding Mode number
  4. Check ChangeToModeResponse Status:
    • 0x00 (Success) — switch succeeded; subscribe to CurrentMode to confirm the update
    • 0x01 (UnsupportedMode) — invalid mode number; check synchronization with SupportedModes
    • 0x02 (GenericFailure) — device refused the switch; read StatusText for the reason (e.g., "Cannot switch mode while washing")

Scenario 2: Configure Startup Mode

  1. Read SupportedModes (0x0000) to get the available modes
  2. Write StartUpMode (0x0002) Removed in newer versions to set the power-on default mode:
    • Write a specific Mode number — automatically use that mode on every power-on (e.g., always default to Normal)
    • Write null — retain the mode from before power loss (recommended)
  3. To force a specific mode on every power-on, set OnMode (0x0003) Removed in newer versions, which takes priority over StartUpMode
  4. For most household use cases, it is recommended to set both to null, letting the user manually select a mode each time