DishwasherMode Cluster
Cluster ID: 0x0059 |
Endpoint: Typically on Endpoint 1 (application endpoint)
DishwasherMode is used to control wash mode selection on a dishwasher. It is derived from the ModeBase Cluster, with a structure identical to LaundryWasherMode, differing only in that ModeTag values are defined for dishwasher scenarios (Normal / Heavy / Light).
DishwasherMode is a derived Cluster of ModeBase (0x0050) and cannot be implemented independently -- it reuses all command and attribute definitions from ModeBase, only extending with its own dedicated ModeTag enum values. Once you understand ModeBase, all Mode-type Clusters (washer, dishwasher, refrigerator, etc.) follow the same usage pattern.
Commands
DishwasherMode inherits from ModeBase with only one command pair: the client sends ChangeToMode, and the device returns ChangeToModeResponse.
| ID | Direction | Name | Description |
|---|---|---|---|
0x00 |
Client → Server | ChangeToMode | Switch to a specified mode |
0x01 |
Server → Client | ChangeToModeResponse | Return switch result |
ChangeToMode (0x00)
Requests the device to switch to a specified wash mode. The target mode must exist in SupportedModes.
| Parameter | Type | Description |
|---|---|---|
| NewMode | uint8 | Target mode number; must exist in the SupportedModes list |
When the dishwasher is running, the device may reject mode switching and return an error status code in ChangeToModeResponse. The specific behavior depends on the manufacturer's implementation.
ChangeToModeResponse (0x01)
Response returned by the device after receiving ChangeToMode, indicating whether the switch succeeded.
| Parameter | Type | Description |
|---|---|---|
| Status | enum8 | 0x00 = success; other values are vendor-defined error codes |
| StatusText | string (optional) | Human-readable error description on failure, up to 64 bytes |
Attributes
DishwasherMode inherits 4 attributes from ModeBase. Click an attribute ID to jump to its description.
| ID | Name | Type | Description |
|---|---|---|---|
0x0000 |
SupportedModes | list<ModeOptionStruct> | List of all modes supported by the device |
0x0001 |
CurrentMode | uint8 | Currently active mode number |
0x0002 |
StartUpMode Removed in newer versions | uint8 / null | Initial mode after power-on |
0x0003 |
OnMode Removed in newer versions | uint8 / null | Mode forced on power-on |
SupportedModes (0x0000)
All wash modes supported by the device. Each element in the list is a ModeOptionStruct:
| Field | Type | Description |
|---|---|---|
| Label | string | Human-readable mode name (e.g., "Normal", "Heavy") |
| Mode | uint8 | Mode number, unique within the list |
| ModeTags | list<ModeTagStruct> | Mode tags identifying the semantic meaning (see ModeTag Enum) |
Mode numbers (0, 1, 2...) are vendor-defined ordinals that may differ between manufacturers. To determine the semantic meaning of a mode, check the ModeTag values in ModeTags rather than the Mode number.
CurrentMode (0x0001)
The device's currently active mode number, which must be the Mode value of an entry in SupportedModes. Subscribe to this attribute to update the app UI when the mode changes.
StartUpMode (0x0002) Removed in newer 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 used after device power-on (or restart). Nullable — null means unspecified;
the device decides on its own (typically restores the mode from before power loss).
OnMode (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. The DEPONOFF (OnOff dependency) feature it relied on was removed as well; controllers switch modes with the ChangeToMode command.
Mode forced when the device switches from Off to On. Nullable —
null means no forced switch on power-on; CurrentMode is preserved.
StartUpMode takes effect when the device powers on (power loss recovery); OnMode takes effect when the device transitions from Off to On (e.g. when the user presses the start button). The two are triggered at different times and can be set to different values.
ModeTag Enum
DishwasherMode defines 3 dedicated ModeTag values for identifying dishwasher wash mode semantics. The app should identify mode meaning through ModeTag rather than relying on Label strings or Mode numbers.
In addition to the above dedicated Tags, devices can also use common Tags defined by ModeBase, such as
0x0000 (Auto), 0x0001 (Quick), 0x0002 (Quiet), etc.
A single mode can carry multiple Tags simultaneously.
Example Data
Read result from a DishwasherMode Cluster on a dishwasher with three wash modes, currently in Normal:
{
// --- Current Mode ---
"0x0000": [ // SupportedModes — supported mode list
{
"Label": "Normal",
"Mode": 0,
"ModeTags": [{ "Value": 16384 }]
},
{
"Label": "Heavy",
"Mode": 1,
"ModeTags": [{ "Value": 16385 }]
},
{
"Label": "Light",
"Mode": 2,
"ModeTags": [{ "Value": 16386 }]
}
],
"0x0001": 0 // CurrentMode = 0 (currently Normal mode)
}
Common Scenarios
Scenario 1: Switch Wash Mode
- Read
SupportedModes (0x0000)to get all modes and their ModeTag values - Display mode options in the app based on ModeTag (e.g., "Normal", "Heavy", "Light")
- After the user's selection, send
ChangeToModewith NewMode set to the target mode number - Check
ChangeToModeResponseStatus — the dishwasher may return an error if currently running - Subscribe to
CurrentMode (0x0001)to confirm the switch succeeded
Scenario 2: Configure Default Mode
- The user selects "Default to Heavy mode on every power-on" in app settings
- Write
OnMode (0x0003)Removed in newer versions to the Heavy mode number (e.g.,1) - From then on, every time the dishwasher powers on, it automatically enters Heavy mode
- To cancel the forced mode, write OnMode back to
null