微波炉模式 Cluster(MicrowaveOvenMode)

Cluster ID: 0x005E  |  所在 Endpoint: 微波炉功能端点(Microwave Oven Endpoint)

MicrowaveOvenMode 是 Matter 中用于微波炉模式选择的 Cluster,派生自 ModeBase Cluster。 它允许用户在微波炉支持的多种加热模式之间切换,例如常规加热和解冻。 每种模式通过语义标签(ModeTag)描述其用途,使不同厂商的微波炉能以统一方式被控制。

派生自 ModeBase

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

与 MicrowaveOvenControl 协作

MicrowaveOvenMode 只负责「选择加热模式」,不控制具体的烹饪参数。 微波炉的完整操作需要配合 MicrowaveOvenControl(0x005F) Cluster, 后者负责设置烹饪时间、功率等级、启动/停止加热等。 典型流程是:先用 MicrowaveOvenMode 选择模式,再用 MicrowaveOvenControl 设置参数并启动。

命令(Commands)

旧版本的 MicrowaveOvenMode Cluster 有一个命令 ChangeToMode,用于切换加热模式, 命令执行后设备返回 ChangeToModeResponse,告知切换是否成功。新版本已移除这两个命令,模式只能在微波炉本机上切换。

ID 名称 方向 说明
0x00 ChangeToMode 新版已移除 Client → Server 切换到指定加热模式
0x01 ChangeToModeResponse 新版已移除 Server → Client 切换结果响应(Status + StatusText)

ChangeToMode -- 切换模式(0x00) 新版已移除

新版 Matter 已移除

ChangeToMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。新版本的微波炉模式 Cluster 不接受任何命令:模式只能在微波炉本机上切换,控制端只能读取或订阅 CurrentMode。

请求微波炉切换到指定的加热模式。NewMode 的值必须是 SupportedModes 列表中某个 ModeOptionStruct 的 Mode 字段。 设备收到后返回 ChangeToModeResponse。

请求参数

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

响应字段(ChangeToModeResponse)

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

用户在 App 上选择「解冻」模式,App 发送 ChangeToMode(NewMode = 1)。 微波炉返回 ChangeToModeResponse(Status = 0x00, Success),CurrentMode 更新为 1。 如果微波炉正在加热中不允许切换,会返回 GenericFailure 并在 StatusText 中说明原因。

属性详解

MicrowaveOvenMode Cluster 继承 ModeBase 的 4 个属性。

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

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

设备支持的全部加热模式,每个元素是一个 ModeOptionStruct:

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

Label 是厂商自定义的显示文字,不同厂商可能用不同措辞("Normal"、"Standard"、"Regular")。 ModeTag 是标准化的语义标签,App 应优先根据 ModeTag 值判断模式类型,Label 仅用于界面展示。

CurrentMode -- 当前模式(0x0001)

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

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

新版 Matter 已移除

StartUpMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。新版本中微波炉模式只能在设备本机上切换,控制端只能读取或订阅 CurrentMode。

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

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

新版 Matter 已移除

OnMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。新版本中微波炉模式只能在设备本机上切换,控制端只能读取或订阅 CurrentMode。

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

OnMode 与 StartUpMode 的优先级

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

ModeTag 语义标签

MicrowaveOvenMode 定义了 2 个专属 ModeTag 值,用于标准化描述微波炉加热模式的类型。 App 应根据这些标签识别模式用途,而不是依赖厂商自定义的 Label 文字。

0x4000
Normal 常规加热 -- 日常食物加热的默认模式,按设定功率持续加热
0x4001
Defrost 解冻 -- 以较低功率间歇加热,用于解冻冷冻食品而不过度烹饪
厂商可扩展自定义模式

除了规范定义的 Normal 和 Defrost,厂商可以在 SupportedModes 中添加额外的自定义模式 (如 "Popcorn"、"Beverage"、"Reheat" 等),使用厂商自定义的 ModeTag 值(0x8000 ~ 0xBFFF 范围)。 App 遇到不认识的 ModeTag 时,应回退到显示 Label 文字。

状态码(StatusCode)

ChangeToModeResponse 中 Status 字段的可能取值:

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

示例数据

一台支持常规加热和解冻两种模式、当前处于常规加热的微波炉的 MicrowaveOvenMode Cluster 读取结果:

{
  // --- 支持的模式列表 ---
  "0x0000": [                    // SupportedModes
    {
      "Label": "Normal",
      "Mode": 0,
      "ModeTags": [{ "Value": 16384 }]   // 0x4000 = Normal
    },
    {
      "Label": "Defrost",
      "Mode": 1,
      "ModeTags": [{ "Value": 16385 }]   // 0x4001 = Defrost
    }
  ],

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

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

SupportedModes 的内容由设备厂商定义,不同微波炉支持的模式数量和编号可能不同。 App 展示模式列表时应动态读取 SupportedModes,不要硬编码模式选项。 使用 ModeTag 值判断模式类型,而不是比较 Label 字符串。 完整的微波炉控制还需要读取 MicrowaveOvenControl Cluster(0x005F)的烹饪时间和功率属性。

常见场景

场景 1:选择加热模式并启动微波炉
  1. 读取 SupportedModes (0x0000) 获取微波炉支持的所有加热模式
  2. 在 App 界面展示模式列表,根据 ModeTag 值显示对应图标和说明(如 0x4000 显示「常规加热」图标,0x4001 显示「解冻」图标)
  3. 用户选择「解冻」,发送 ChangeToMode (0x00) 新版已移除,NewMode 填入对应的 Mode 编号
  4. 检查 ChangeToModeResponse 的 Status:
    • 0x00(Success)-- 切换成功,订阅 CurrentMode 确认更新
    • 0x02(GenericFailure)-- 微波炉正在加热中,读取 StatusText 展示原因
  5. 模式选定后,通过 MicrowaveOvenControl Cluster(0x005F)设置烹饪时间和功率,然后启动加热
场景 2:解冻冷冻食品的完整流程
  1. 读取 SupportedModes (0x0000),找到带有 ModeTag 0x4001(Defrost)的模式项
  2. 发送 ChangeToMode,将 NewMode 设为该模式项的 Mode 编号
  3. 确认 ChangeToModeResponse 返回 Success
  4. 通过 MicrowaveOvenControl 设置解冻时间(解冻模式通常使用较低功率,设备可能自动调整功率等级)
  5. 启动加热,订阅 MicrowaveOvenControl 的 OperationalState 跟踪加热进度
  6. 加热完成后,微波炉自动停止并发出通知,App 提示用户取出食物

注意:解冻模式下微波炉通常以间歇方式工作(加热一段时间、暂停一段时间), 避免外层过度加热而内层仍是冰冻状态。具体的功率和间歇策略由设备固件控制,App 无需干预。