RefrigeratorAndTemperatureControlledCabinetMode Cluster
Cluster ID: 0x0052 |
Endpoint: Refrigerator/freezer compartment endpoints (may have multiple)
RefrigeratorAndTemperatureControlledCabinetMode is a Cluster in Matter for refrigerator mode control, derived from ModeBase Cluster. It allows users to switch the operating mode of each temperature zone in the refrigerator, such as enabling RapidCool or RapidFreeze. Each mode uses semantic tags (ModeTag) to describe its purpose, enabling standardized control across different manufacturers' refrigerators.
RefrigeratorAndTemperatureControlledCabinetMode inherits all commands and attribute structures from the ModeBase Cluster, and defines refrigerator-specific ModeTag values (0x4000 ~ 0x4001). If you are already familiar with how ModeBase works, this Cluster operates exactly the same way -- only the mode tags differ.
A refrigerator device typically contains multiple temperature-controlled zones (refrigerator compartment, freezer compartment), each corresponding to an independent Endpoint. Each Endpoint has its own instance of the RefrigeratorAndTemperatureControlledCabinetMode Cluster, each maintaining independent SupportedModes and CurrentMode. For example, the refrigerator compartment Endpoint may support RapidCool, while the freezer compartment Endpoint supports RapidFreeze. When operating, first confirm the target Endpoint to avoid sending commands to the wrong temperature zone.
Commands
The RefrigeratorAndTemperatureControlledCabinetMode Cluster has only one command, ChangeToMode, for switching refrigerator modes. After execution, the device returns a ChangeToModeResponse indicating whether the switch was successful.
| ID | Name | Direction | Description |
|---|---|---|---|
0x00 |
ChangeToMode | Client → Server | Switch to a specified refrigerator mode |
0x01 |
ChangeToModeResponse | Server → Client | Mode switch response (Status + StatusText) |
ChangeToMode -- Switch Mode (0x00)
Request the device to switch to a specified refrigerator mode. The NewMode value must be the Mode field of a ModeOptionStruct in the SupportedModes list. The device returns a ChangeToModeResponse upon receipt. Note that commands must be sent to the correct Endpoint -- the refrigerator and freezer compartments are independent.
Request Parameters
| Parameter | Type | Description |
|---|---|---|
| NewMode | uint8 | Target mode number; must exist in the SupportedModes list of that Endpoint |
Response Fields (ChangeToModeResponse)
| Field | Type | Description |
|---|---|---|
| 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 enables "RapidFreeze" mode for the freezer in the app. The app sends ChangeToMode (NewMode = 1) to the freezer Endpoint. The refrigerator returns ChangeToModeResponse (Status = 0x00, Success), and that Endpoint's CurrentMode updates to 1. If the refrigerator's current state does not allow switching (e.g. currently defrosting), it returns GenericFailure with the reason in StatusText.
Attributes
The RefrigeratorAndTemperatureControlledCabinetMode Cluster inherits 4 attributes from ModeBase. Each Endpoint maintains its own copy.
| ID | Name | Type | Description |
|---|---|---|---|
0x0000 |
SupportedModes | list<ModeOptionStruct> | All operating modes supported by this temperature zone |
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 -- Supported Mode List (0x0000)
All operating modes supported by this Endpoint (temperature zone). Each element is a ModeOptionStruct:
| Field | Type | Description |
|---|---|---|
| Label | string | Mode name for human reading (e.g. "Normal", "Rapid Cool") |
| 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) |
The refrigerator compartment Endpoint may support the RapidCool mode, while the freezer compartment Endpoint supports the RapidFreeze mode. Apps should read each Endpoint's SupportedModes separately and display available mode lists for each temperature zone independently.
CurrentMode -- Current Mode (0x0001)
The currently selected operating mode number. The value must be the Mode field of a ModeOptionStruct in SupportedModes. Modified via the ChangeToMode command. Subscribe to this attribute to receive mode change notifications.
StartUpMode -- Startup Mode (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.
The initial mode after the device powers on or restarts. Nullable -- when null, the device retains the mode from before power loss.
When setting a specific value, it must exist in the SupportedModes list.
After power loss recovery, a refrigerator should typically return to normal mode rather than continuing RapidCool/RapidFreeze. It is recommended to set StartUpMode to the normal mode number (e.g. 0) to avoid the compressor running at high power for extended periods after power recovery.
OnMode -- Power-On Mode (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.
The mode automatically applied when the device switches from Off to On. Nullable -- when null, no override occurs and CurrentMode remains unchanged.
If OnMode has a value, every power-on will force CurrentMode to that value, ignoring the StartUpMode setting.
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.
The OnMode attribute is only present when the device supports the DEPONOFF feature. This feature indicates that this Cluster depends on the OnOff Cluster on the same Endpoint, and when the OnOff state transitions from Off to On, CurrentMode is automatically set to the value specified by OnMode.
ModeTag Semantic Tags
RefrigeratorAndTemperatureControlledCabinetMode defines 2 dedicated ModeTag values for standardized description of refrigerator operating modes. Apps should identify mode purposes based on these tags rather than relying on vendor-defined Label text.
Typically RapidCool appears in the SupportedModes of the refrigerator compartment Endpoint, and RapidFreeze appears in the SupportedModes of the freezer compartment Endpoint. However, the specification does not enforce this mapping -- some high-end refrigerators may support both tags in the same temperature zone. Apps should always rely on the actual SupportedModes read from the device.
Status Codes
Possible values of the Status field in ChangeToModeResponse:
Feature Bitmap
The RefrigeratorAndTemperatureControlledCabinetMode Cluster declares supported features via FeatureMap (0xFFFC):
Most refrigerators are not frequently powered on and off, so the DEPONOFF feature is rarely used in refrigerator scenarios. However, if the refrigerator's temperature zones can be independently toggled (e.g. a convertible compartment can switch between refrigeration/freezing/off), enabling DEPONOFF allows using the OnMode attribute to automatically restore the specified mode when the zone is turned back on.
Example Data
Cluster data read from two Endpoints of a dual-zone refrigerator:
Refrigerator Compartment Endpoint
{
// --- Refrigerator Compartment Endpoint Modes ---
"0x0000": [ // SupportedModes
{
"Label": "Normal",
"Mode": 0,
"ModeTags": [] // Normal mode, no special tags
},
{
"Label": "Rapid Cool",
"Mode": 1,
"ModeTags": [{ "Value": 16384 }] // 0x4000 = RapidCool
}
],
// --- Current mode ---
"0x0001": 0 // CurrentMode = 0(Normal)
// --- Startup and power-on modes ---
}
Freezer Compartment Endpoint
{
// --- Freezer Compartment Endpoint Modes ---
"0x0000": [ // SupportedModes
{
"Label": "Normal",
"Mode": 0,
"ModeTags": []
},
{
"Label": "Rapid Freeze",
"Mode": 1,
"ModeTags": [{ "Value": 16385 }] // 0x4001 = RapidFreeze
}
],
// --- Current mode ---
"0x0001": 1 // CurrentMode = 1 (Rapid Freeze active)
// --- Startup and power-on modes ---
}
SupportedModes content and numbering can be completely different across Endpoints on the same refrigerator. The app should read SupportedModes independently for each Endpoint; do not assume zone mode lists are identical. Use ModeTag values to determine mode types rather than comparing Label strings or Mode numbers.
Common Scenarios
Scenario 1: Enable Rapid Cool After Loading Groceries
Steps and Details
Scenario: The user has just loaded a large amount of groceries and needs to quickly lower the refrigerator temperature to keep food fresh.
- Use the Descriptor Cluster to confirm the refrigerator's Endpoint structure and find the refrigerator compartment Endpoint
- Read the refrigerator Endpoint's
SupportedModes (0x0000)and find the mode entry with the RapidCool (0x4000) ModeTag - Send
ChangeToMode (0x00)with NewMode set to the RapidCool Mode number - Check whether the ChangeToModeResponse Status is Success
- Subscribe to
CurrentMode (0x0001)and show Rapid Cool status in the UI - After Rapid Cool finishes (automatically or manually), send ChangeToMode again to return to Normal mode
Note: Some refrigerators automatically revert to Normal mode once the target temperature is reached. The app should detect this by subscribing to CurrentMode and updating the UI accordingly.
Scenario 2: Independent Multi-Zone Control
Steps and Details
Scenario: The user wants to enable Rapid Freeze in the freezer while keeping the refrigerator compartment in Normal mode.
- Read the Descriptor Cluster (Endpoint 0) to get all Endpoints and their Device Types
- Identify the refrigerator Endpoint (Device Type: Refrigerator, 0x0070) and freezer Endpoint (Device Type: Temperature Controlled Cabinet, 0x0071)
- Read
SupportedModes (0x0000)from both Endpoints:- Refrigerator: may contain Normal and RapidCool
- Freezer: may contain Normal and RapidFreeze
- Send
ChangeToModeto the freezer Endpoint to switch to RapidFreeze mode - Do not change the refrigerator compartment; keep its current mode
- Display both zones' current modes separately in the app, with independent controls for each
Key point: The refrigerator and freezer Cluster instances are completely independent; operating on one Endpoint does not affect the other. The app design should reflect this zoned control concept.