冰箱模式 Cluster(RefrigeratorAndTemperatureControlledCabinetMode)

Cluster ID: 0x0052  |  所在 Endpoint: 冷藏室 / 冷冻室功能端点(可能有多个)

RefrigeratorAndTemperatureControlledCabinetMode 是 Matter 中用于冰箱模式控制的 Cluster,派生自 ModeBase Cluster。 它允许用户切换冰箱各温区的工作模式,例如启用急速制冷(RapidCool)或急速冷冻(RapidFreeze)。 每种模式通过语义标签(ModeTag)描述其用途,使不同厂商的冰箱能以统一方式被控制。

派生自 ModeBase

RefrigeratorAndTemperatureControlledCabinetMode 继承了 ModeBase Cluster 的全部命令和属性结构, 并定义了冰箱专属的 ModeTag 值(0x4000 ~ 0x4001)。 如果你已经熟悉 ModeBase 的工作方式,这个 Cluster 的使用方式完全一致,只是模式标签不同。

多 Endpoint 架构

一台冰箱设备通常包含多个温控区域(冷藏室、冷冻室),每个区域对应一个独立的 Endpoint。 每个 Endpoint 上都有自己的 RefrigeratorAndTemperatureControlledCabinetMode Cluster 实例, 各自维护独立的 SupportedModes 和 CurrentMode。 例如冷藏室 Endpoint 可能支持 RapidCool,冷冻室 Endpoint 则支持 RapidFreeze。 操作时需先确认目标 Endpoint,避免对错误的温区发送命令。

命令(Commands)

RefrigeratorAndTemperatureControlledCabinetMode Cluster 只有一个命令 ChangeToMode,用于切换冰箱模式。 命令执行后设备返回 ChangeToModeResponse,告知切换是否成功。

ID 名称 方向 说明
0x00 ChangeToMode Client → Server 切换到指定冰箱模式
0x01 ChangeToModeResponse Server → Client 切换结果响应(Status + StatusText)

ChangeToMode -- 切换模式(0x00)

请求设备切换到指定的冰箱模式。NewMode 的值必须是 SupportedModes 列表中某个 ModeOptionStruct 的 Mode 字段。 设备收到后返回 ChangeToModeResponse。注意需要向正确的 Endpoint 发送命令 -- 冷藏室和冷冻室是独立的。

请求参数

参数类型说明
NewMode uint8 目标模式编号,必须存在于该 Endpoint 的 SupportedModes 列表中

响应字段(ChangeToModeResponse)

字段类型说明
Status enum8 操作结果状态码(见状态码)
StatusText string(可选) 人类可读的状态描述,失败时提供原因
使用场景

用户在 App 上对冷冻室启用「急速冷冻」模式,App 向冷冻室 Endpoint 发送 ChangeToMode(NewMode = 1)。 冰箱返回 ChangeToModeResponse(Status = 0x00, Success),该 Endpoint 的 CurrentMode 更新为 1。 如果冰箱当前状态不允许切换(例如正在除霜),会返回 GenericFailure 并在 StatusText 中说明原因。

属性详解

RefrigeratorAndTemperatureControlledCabinetMode Cluster 继承 ModeBase 的 4 个属性。每个 Endpoint 各自维护一份。

ID 名称 类型 说明
0x0000 SupportedModes list<ModeOptionStruct> 该温区支持的所有工作模式
0x0001 CurrentMode uint8 当前选中的模式
0x0002 StartUpMode 新版已移除 uint8 / null 设备启动时的默认模式
0x0003 OnMode 新版已移除 uint8 / null 设备开机时自动切换到的模式

SupportedModes -- 支持的模式列表(0x0000)

该 Endpoint(温区)支持的全部工作模式,每个元素是一个 ModeOptionStruct:

字段类型说明
Label string 模式名称,供人类阅读(如 "Normal"、"Rapid Cool")
Mode uint8 模式编号,在列表中唯一,用于 ChangeToMode 命令
ModeTags list<ModeTagStruct> 语义标签列表,描述模式的用途(见ModeTag 标签)
不同 Endpoint 的 SupportedModes 可能不同

冷藏室 Endpoint 可能支持 RapidCool 模式,而冷冻室 Endpoint 支持 RapidFreeze 模式。 App 应分别读取每个 Endpoint 的 SupportedModes,独立展示各温区的可用模式列表。

CurrentMode -- 当前模式(0x0001)

当前选中的工作模式编号。值必须是 SupportedModes 中某个 ModeOptionStruct 的 Mode 字段。 通过 ChangeToMode 命令修改。可订阅此属性获取模式变更通知。

StartUpMode -- 启动模式(0x0002) 新版已移除

新版 Matter 已移除

StartUpMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。新版本中上电后的模式由设备自行决定,控制端改用 ChangeToMode 命令切换模式。

设备上电或重启后的初始模式。Nullable -- 值为 null 时表示保持上次断电前的模式。 设置具体值时,该值必须存在于 SupportedModes 列表中。

冰箱场景下的建议

冰箱断电恢复后,通常应回到普通模式而非继续急速制冷/冷冻。 建议将 StartUpMode 设为普通模式的编号(如 0),避免断电恢复后压缩机长时间高功率运行。

OnMode -- 开机模式(0x0003) 新版已移除

新版 Matter 已移除

OnMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。它依赖的 DEPONOFF(OnOff 依赖)特性也一并被移除;控制端改用 ChangeToMode 命令切换模式。

当设备从 Off 切换到 On 时自动应用的模式。Nullable -- 值为 null 时不覆盖,保持 CurrentMode 不变。 如果 OnMode 有值,每次开机都会将 CurrentMode 强制设为该值,忽略 StartUpMode 的设置。

OnMode 与 StartUpMode 的优先级

如果 OnMode 不为 null,它的优先级高于 StartUpMode。 设备上电流程:先应用 StartUpMode(如果有),再在 Off → On 时应用 OnMode 覆盖。 实际效果是开机后始终使用 OnMode 指定的模式。

DEPONOFF 特性与 OnMode

OnMode 属性仅在设备支持 DEPONOFF 特性时才存在。 该特性表示此 Cluster 依赖同一 Endpoint 上的 OnOff Cluster, 当 OnOff 状态从 Off 变为 On 时,会自动将 CurrentMode 设为 OnMode 指定的值。

ModeTag 语义标签

RefrigeratorAndTemperatureControlledCabinetMode 定义了 2 个专属 ModeTag 值,用于标准化描述冰箱工作模式。 App 应根据这些标签识别模式用途,而不是依赖厂商自定义的 Label 文字。

0x4000
RapidCool 急速制冷 -- 快速降低冷藏室温度,适合大量食材刚放入时使用
0x4001
RapidFreeze 急速冷冻 -- 快速将冷冻室降至极低温度,适合快速冻结新鲜食材
ModeTag 与 Endpoint 的对应关系

通常 RapidCool 出现在冷藏室 Endpoint 的 SupportedModes 中, RapidFreeze 出现在冷冻室 Endpoint 的 SupportedModes 中。 但规范并不强制这种对应关系 -- 某些高端冰箱可能在同一温区同时支持两种标签。 App 应始终以实际读取到的 SupportedModes 为准。

状态码(StatusCode)

ChangeToModeResponse 中 Status 字段的可能取值:

0x00
Success 模式切换成功
0x01
UnsupportedMode 请求的模式编号不存在于 SupportedModes 中
0x02
GenericFailure 通用失败 -- 设备当前状态不允许切换(如正在除霜)

Feature 位图

RefrigeratorAndTemperatureControlledCabinetMode Cluster 通过 FeatureMap(0xFFFC)声明设备支持的特性:

Bit 0
DEPONOFF(OnOff 依赖) 新版已移除 Cluster 依赖同一 Endpoint 上的 OnOff Cluster,支持通过 OnMode 属性在开机时自动切换模式
DEPONOFF 的实际意义

大多数冰箱不会频繁开关机,因此 DEPONOFF 特性在冰箱场景下使用较少。 但如果冰箱的温区可以独立开关(例如变温室可在冷藏/冷冻/关闭之间切换), 启用 DEPONOFF 后可通过 OnMode 属性在温区重新开启时自动恢复到指定模式。

示例数据

一台双温区冰箱的两个 Endpoint 分别读取到的 Cluster 数据:

冷藏室 Endpoint

{
  // --- 冷藏室 Endpoint 的模式列表 ---
  "0x0000": [                    // SupportedModes
    {
      "Label": "Normal",
      "Mode": 0,
      "ModeTags": []              // 普通模式,无特殊标签
    },
    {
      "Label": "Rapid Cool",
      "Mode": 1,
      "ModeTags": [{ "Value": 16384 }]   // 0x4000 = RapidCool
    }
  ],

  // --- 当前模式 ---
  "0x0001": 0                    // CurrentMode = 0(Normal)

  // --- 启动与开机模式 ---
}

冷冻室 Endpoint

{
  // --- 冷冻室 Endpoint 的模式列表 ---
  "0x0000": [                    // SupportedModes
    {
      "Label": "Normal",
      "Mode": 0,
      "ModeTags": []
    },
    {
      "Label": "Rapid Freeze",
      "Mode": 1,
      "ModeTags": [{ "Value": 16385 }]   // 0x4001 = RapidFreeze
    }
  ],

  // --- 当前模式 ---
  "0x0001": 1                    // CurrentMode = 1(Rapid Freeze 急冻中)

  // --- 启动与开机模式 ---
}
开发提示

同一台冰箱的不同 Endpoint 上,SupportedModes 的内容和编号可以完全不同。 App 展示模式列表时应针对每个 Endpoint 独立读取 SupportedModes,不要假设各温区的模式列表相同。 使用 ModeTag 值判断模式类型,而不是比较 Label 字符串或 Mode 编号。

常见场景

场景 1:大量食材入库后启用急速制冷

操作步骤与说明

场景:用户采购大量食材回家,需要快速降低冷藏室温度以保持食材新鲜。

  1. 通过 Descriptor Cluster 确认冰箱的 Endpoint 结构,找到冷藏室对应的 Endpoint
  2. 读取冷藏室 Endpoint 的 SupportedModes (0x0000),找到带有 RapidCool(0x4000)ModeTag 的模式条目
  3. 发送 ChangeToMode (0x00),NewMode 填入 RapidCool 模式的 Mode 编号
  4. 检查 ChangeToModeResponse 的 Status 是否为 Success
  5. 订阅 CurrentMode (0x0001),在用户界面显示当前处于急速制冷状态
  6. 急速制冷结束后(设备自动或用户手动),再次发送 ChangeToMode 切回普通模式

注意:部分冰箱会在急速制冷达到目标温度后自动回退到普通模式, App 应通过订阅 CurrentMode 感知这种自动切换,及时更新界面状态。

场景 2:多温区独立控制

操作步骤与说明

场景:用户想对冷冻室启用急速冷冻,同时保持冷藏室的普通模式不变。

  1. 读取设备的 Descriptor Cluster(Endpoint 0),获取所有 Endpoint 及其 Device Type
  2. 识别冷藏室 Endpoint(Device Type: Refrigerator,0x0070)和冷冻室 Endpoint(Device Type: Temperature Controlled Cabinet,0x0071)
  3. 分别读取两个 Endpoint 的 SupportedModes (0x0000):
    • 冷藏室:可能包含 Normal 和 RapidCool
    • 冷冻室:可能包含 Normal 和 RapidFreeze
  4. 向冷冻室 Endpoint 发送 ChangeToMode,切换到 RapidFreeze 模式
  5. 冷藏室不做操作,保持当前模式
  6. App 界面上分区展示两个温区的当前模式,各自独立控制

关键点:冷藏室和冷冻室的 Cluster 实例是完全独立的, 对一个 Endpoint 的操作不会影响另一个。App 设计时应体现这种分区控制的概念。