LaundryWasherControls Cluster

Cluster ID: 0x0053  |  Endpoint: Typically on Endpoint 1+ (appliance application endpoint)

LaundryWasherControls manages the operational parameters of a washing machine -- spin speed and rinse count. It is a purely attribute-driven Cluster (no commands); all operations are performed by directly writing attributes. It works in conjunction with LaundryWasherMode (0x0051): Mode handles wash mode selection (Normal, Delicate, Heavy, etc.), while Controls handles fine-tuning of operational parameters.

Division of Responsibilities with LaundryWasherMode

A washing machine typically implements two Clusters simultaneously:

  • LaundryWasherMode (0x0051) -- selects the wash program (Normal, Delicate, Heavy, Whites, etc.), determining the overall wash strategy
  • LaundryWasherControls (0x0053) -- fine-tunes parameters within the selected mode (spin speed, rinse count)

By analogy: Mode is "which recipe to use", Controls is "a little more or less salt". Both typically reside on the same Endpoint, and the app UI can be designed as a combined panel for mode selection and parameter adjustment.

Feature Bitmap

LaundryWasherControls declares supported control capabilities through FeatureMap (0xFFFC). Features determine which attributes are available:

Bit 0
SPIN(SpinSpeedControl) Spin speed control — enables SpinSpeeds and SpinSpeedCurrent attributes, allowing the user to select spin speed
Bit 1
RINSE(RinseControl) Rinse count control — enables NumberOfRinses and SupportedRinses attributes, allowing the user to select rinse count
Feature Combination Examples

FeatureMap = 0x01 (SPIN only) -- only spin speed can be adjusted; rinse count is fixed by the wash mode.
FeatureMap = 0x02 (RINSE only) -- only rinse count can be adjusted; spin speed is fixed by the wash mode.
FeatureMap = 0x03 (SPIN + RINSE) -- both spin speed and rinse count can be adjusted independently; this is the most fully-featured configuration.

Attributes

LaundryWasherControls has no commands; all operations are performed by reading and writing attributes. There are 4 attributes in two groups, corresponding to the SPIN and RINSE Features. Click an attribute ID below to jump to its detailed description.

ID Name Type Group Description
0x0000 SpinSpeeds list<string> Spin Speed Supported speed list
0x0001 SpinSpeedCurrent uint8 / null Spin Speed Currently selected speed index
0x0002 NumberOfRinses enum8 Rinse Count Current rinse count setting
0x0003 SupportedRinses list<enum8> Rinse Count Supported rinse options list

Spin Speed (0x0000, 0x0001)

Requires the SPIN (SpinSpeedControl) Feature. Controls the spin speed during the spin-dry phase — higher speeds extract more water but increase fabric wear.

ID Name Type Description
0x0000 SpinSpeeds
Speed List
list<string> All spin speeds supported by the device, represented as a string list. Read-only. Each element is a vendor-defined speed name (e.g. "400", "800", "1200", or "Low", "Medium", "High"). The list index is used with SpinSpeedCurrent
0x0001 SpinSpeedCurrent
Current Speed
uint8 / null The currently selected spin speed, as an index into the SpinSpeeds list (starting from 0). Read-write. Nullable -- null means the speed is automatically determined by the device based on the wash mode. The written value must be in the range 0 ~ SpinSpeeds.length - 1
SpinSpeedCurrent Is an Index, Not a Speed Value

SpinSpeedCurrent stores the index into the SpinSpeeds list, not the actual speed value. For example, when SpinSpeeds = ["400", "800", "1200"], writing SpinSpeedCurrent = 1 selects "800" RPM. When displaying, the app should first read SpinSpeeds, then use SpinSpeedCurrent as an index to get the corresponding string.

Speed Names Are Not Necessarily Numbers

The strings in SpinSpeeds are defined by the manufacturer and are not necessarily pure numbers. Some washing machines may use descriptive text like "Low", "Medium", "High", while others may use labels with units like "400 RPM", "No Spin". The app should display these strings directly rather than attempting to parse them as numbers.

Rinse Count (0x0002, 0x0003)

Requires the RINSE (RinseControl) Feature. Controls the number of rinse cycles — more rinses reduce detergent residue in garments but increase water and time consumption.

ID Name Type Description
0x0002 NumberOfRinses
Rinse Count
enum8 The currently set rinse count level. Read-write. The written value must be in the SupportedRinses list (see enum below)
0x0003 SupportedRinses
Supported Rinse Options
list<enum8> The list of supported rinse count options. Read-only. Each element is a NumberOfRinsesEnum value. Apps should only display options included in this list

NumberOfRinsesEnum Enum Values

0
None No rinse — skip the rinse phase; suitable for pre-wash or quick-wash scenarios
1
Normal Standard rinse — default rinse count for everyday laundry
2
Extra Extra rinse — one additional rinse cycle; suitable for baby clothes or sensitive skin
3
Max Maximum rinse — as many rinses as possible to minimize detergent residue
SupportedRinses Determines Available Options

Not all washing machines support all 4 rinse levels. Before displaying rinse options, the app must first read SupportedRinses and only show the values it contains. For example, SupportedRinses = [1, 2] means only Normal and Extra are supported; writing NumberOfRinses = 0 (None) or 3 (Max) will be rejected by the device.

Example Data

Read result from a LaundryWasherControls Cluster on a running washer with both SPIN and RINSE Features:

{
  // --- Spin Speed (SPIN Feature) ---
  "0x0000": [                   // SpinSpeeds — supported speed list
    "400",
    "600",
    "800",
    "1000",
    "1200"
  ],
  "0x0001": 2,                  // SpinSpeedCurrent = 2 (currently "800" RPM)

  // --- Rinse Count (RINSE Feature) ---
  "0x0002": 1,                  // NumberOfRinses = Normal (standard rinse)
  "0x0003": [0, 1, 2, 3]       // SupportedRinses = [None, Normal, Extra, Max]
}
Developer Tip

If the device only supports the SPIN Feature (FeatureMap = 0x01), only SpinSpeeds and SpinSpeedCurrent are available; if only the RINSE Feature (FeatureMap = 0x02), only NumberOfRinses and SupportedRinses. Check FeatureMap (0xFFFC) first; reading an unsupported attribute returns UNSUPPORTED_ATTRIBUTE.

Common Scenarios

Scenario 1: Washing Machine Control Panel — Mode + Parameter Coordination

When operating the washer from the app, users typically select a wash mode first, then adjust spin speed and rinse count. The app needs to read data from both the LaundryWasherMode and LaundryWasherControls Clusters to build a complete control interface.

  1. Read LaundryWasherMode's SupportedModes (0x0000) and CurrentMode (0x0001); display mode selection buttons
  2. Read LaundryWasherControls's FeatureMap (0xFFFC) to confirm which parameters are adjustable
  3. If SPIN is supported: read SpinSpeeds (0x0000) to generate a speed picker; mark the current selection with SpinSpeedCurrent (0x0001)
  4. If RINSE is supported: read SupportedRinses (0x0003) to generate rinse options; mark the current value with NumberOfRinses (0x0002)
  5. After the user switches wash mode, the device may automatically adjust SpinSpeedCurrent and NumberOfRinses — subscribe to changes on both attributes for timely UI updates
Scenario 2: Sensitive Fabric Washing — Low Speed + Extra Rinse

When washing baby clothes or delicate fabrics like silk, the user needs to lower the spin speed to reduce wear and increase rinse count to remove detergent residue.

  1. First switch to "Delicate" mode via LaundryWasherMode
  2. Read SpinSpeeds (0x0000) and find the lowest speed index (typically 0)
  3. Write SpinSpeedCurrent (0x0001) = 0 to select the lowest speed
  4. Check if SupportedRinses (0x0003) contains 2 (Extra) or 3 (Max)
  5. Write NumberOfRinses (0x0002) = 2 (Extra) to increase the rinse count
  6. The app can preset this parameter combination for common scenarios (baby clothes, allergy-prone users, etc.) for one-tap application