What
Add a ModeSelectHandler for the Matter Mode Select cluster (0x0050). This is the generic multi-mode cluster used by devices that don't fit a more specific cluster — coffee makers, robot vacuums in simple form, smart appliances, multi-function sensors.
Matter details
- Cluster
0x0050 — Mode Select
- Key attributes:
CurrentMode (0x0003, uint8), SupportedModes (0x0002, list of {label, mode, semanticTags}), StartUpMode (0x0004, optional), OnMode (0x0005, optional)
- Command:
ChangeToMode {newMode: uint8}
semanticTags provide machine-readable intent (e.g. MfgCode=0, Value=0 = "Auto"); without them the modes are device-specific text labels
Proposed Indigo mapping
- Device type:
matterModeSelect — custom device
- State
currentMode (integer) + currentModeLabel (string, derived from SupportedModes)
- Action:
SelectMode with a dynamic list populated from SupportedModes labels
SupportedModes stored as a plugin prop on first commission; refreshed on reconnect
Complexity note
SupportedModes is a variable-length list that must be read once and stored — it can't be statically declared in Devices.xml. The dynamic action list is the same challenge GenericSwitchHandler faces with event numbers. Precedent: thermostat fan-mode mapping already handles a small fixed enum; this is the generalised form.
Scope
Many appliance clusters (Laundry Washer Mode, Dishwasher Mode, Oven Mode, etc.) are thin wrappers around Mode Select semantics. A solid ModeSelectHandler would be the foundation for those if ever needed.
What
Add a
ModeSelectHandlerfor the Matter Mode Select cluster (0x0050). This is the generic multi-mode cluster used by devices that don't fit a more specific cluster — coffee makers, robot vacuums in simple form, smart appliances, multi-function sensors.Matter details
0x0050— Mode SelectCurrentMode(0x0003, uint8),SupportedModes(0x0002, list of{label, mode, semanticTags}),StartUpMode(0x0004, optional),OnMode(0x0005, optional)ChangeToMode {newMode: uint8}semanticTagsprovide machine-readable intent (e.g.MfgCode=0, Value=0= "Auto"); without them the modes are device-specific text labelsProposed Indigo mapping
matterModeSelect— custom devicecurrentMode(integer) +currentModeLabel(string, derived fromSupportedModes)SelectModewith a dynamic list populated fromSupportedModeslabelsSupportedModesstored as a plugin prop on first commission; refreshed on reconnectComplexity note
SupportedModesis a variable-length list that must be read once and stored — it can't be statically declared inDevices.xml. The dynamic action list is the same challengeGenericSwitchHandlerfaces with event numbers. Precedent: thermostat fan-mode mapping already handles a small fixed enum; this is the generalised form.Scope
Many appliance clusters (Laundry Washer Mode, Dishwasher Mode, Oven Mode, etc.) are thin wrappers around Mode Select semantics. A solid
ModeSelectHandlerwould be the foundation for those if ever needed.