微波炉模式 Cluster(MicrowaveOvenMode)
Cluster ID: 0x005E |
所在 Endpoint: 微波炉功能端点(Microwave Oven Endpoint)
MicrowaveOvenMode 是 Matter 中用于微波炉模式选择的 Cluster,派生自 ModeBase Cluster。 它允许用户在微波炉支持的多种加热模式之间切换,例如常规加热和解冻。 每种模式通过语义标签(ModeTag)描述其用途,使不同厂商的微波炉能以统一方式被控制。
MicrowaveOvenMode 继承了 ModeBase Cluster 的全部命令和属性结构, 并定义了微波炉专属的 ModeTag 值(0x4000 ~ 0x4001)。 如果你已经熟悉 ModeBase 的工作方式,这个 Cluster 的使用方式完全一致,只是模式标签不同。
MicrowaveOvenMode 只负责「选择加热模式」,不控制具体的烹饪参数。 微波炉的完整操作需要配合 MicrowaveOvenControl(0x005F) Cluster, 后者负责设置烹饪时间、功率等级、启动/停止加热等。 典型流程是:先用 MicrowaveOvenMode 选择模式,再用 MicrowaveOvenControl 设置参数并启动。
命令(Commands)
旧版本的 MicrowaveOvenMode Cluster 有一个命令 ChangeToMode,用于切换加热模式, 命令执行后设备返回 ChangeToModeResponse,告知切换是否成功。新版本已移除这两个命令,模式只能在微波炉本机上切换。
| ID | 名称 | 方向 | 说明 |
|---|---|---|---|
0x00 |
ChangeToMode 新版已移除 | Client → Server | 切换到指定加热模式 |
0x01 |
ChangeToModeResponse 新版已移除 | Server → Client | 切换结果响应(Status + StatusText) |
ChangeToMode -- 切换模式(0x00) 新版已移除
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 是厂商自定义的显示文字,不同厂商可能用不同措辞("Normal"、"Standard"、"Regular")。 ModeTag 是标准化的语义标签,App 应优先根据 ModeTag 值判断模式类型,Label 仅用于界面展示。
CurrentMode -- 当前模式(0x0001)
当前选中的加热模式编号。值必须是 SupportedModes 中某个 ModeOptionStruct 的 Mode 字段。 通过 ChangeToMode 命令修改。可订阅此属性获取模式变更通知。
StartUpMode -- 启动模式(0x0002) 新版已移除
StartUpMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。新版本中微波炉模式只能在设备本机上切换,控制端只能读取或订阅 CurrentMode。
设备上电或重启后的初始模式。Nullable -- 值为 null 时表示保持上次断电前的模式。
设置具体值时,该值必须存在于 SupportedModes 列表中。
OnMode -- 开机模式(0x0003) 新版已移除
OnMode 已不在较新版本的 Matter 规范中(本站对照的 connectedhomeip v1.6 官方定义里已没有它)。按新版本开发的设备不会实现它,这里保留说明仅供对接旧设备时参考。新版本中微波炉模式只能在设备本机上切换,控制端只能读取或订阅 CurrentMode。
当设备从 Off 切换到 On 时自动应用的模式。Nullable -- 值为 null 时不覆盖,保持 CurrentMode 不变。
如果 OnMode 有值,每次开机都会将 CurrentMode 强制设为该值,忽略 StartUpMode 的设置。
如果 OnMode 不为 null,它的优先级高于 StartUpMode。 设备上电流程:先应用 StartUpMode(如果有),再在 Off → On 时应用 OnMode 覆盖。 实际效果是开机后始终使用 OnMode 指定的模式。
ModeTag 语义标签
MicrowaveOvenMode 定义了 2 个专属 ModeTag 值,用于标准化描述微波炉加热模式的类型。 App 应根据这些标签识别模式用途,而不是依赖厂商自定义的 Label 文字。
除了规范定义的 Normal 和 Defrost,厂商可以在 SupportedModes 中添加额外的自定义模式 (如 "Popcorn"、"Beverage"、"Reheat" 等),使用厂商自定义的 ModeTag 值(0x8000 ~ 0xBFFF 范围)。 App 遇到不认识的 ModeTag 时,应回退到显示 Label 文字。
状态码(StatusCode)
ChangeToModeResponse 中 Status 字段的可能取值:
示例数据
一台支持常规加热和解冻两种模式、当前处于常规加热的微波炉的 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:选择加热模式并启动微波炉
- 读取
SupportedModes (0x0000)获取微波炉支持的所有加热模式 - 在 App 界面展示模式列表,根据 ModeTag 值显示对应图标和说明(如 0x4000 显示「常规加热」图标,0x4001 显示「解冻」图标)
- 用户选择「解冻」,发送
ChangeToMode (0x00)新版已移除,NewMode 填入对应的 Mode 编号 - 检查 ChangeToModeResponse 的 Status:
0x00(Success)-- 切换成功,订阅 CurrentMode 确认更新0x02(GenericFailure)-- 微波炉正在加热中,读取 StatusText 展示原因
- 模式选定后,通过 MicrowaveOvenControl Cluster(0x005F)设置烹饪时间和功率,然后启动加热
场景 2:解冻冷冻食品的完整流程
- 读取
SupportedModes (0x0000),找到带有 ModeTag 0x4001(Defrost)的模式项 - 发送
ChangeToMode,将 NewMode 设为该模式项的 Mode 编号 - 确认 ChangeToModeResponse 返回 Success
- 通过 MicrowaveOvenControl 设置解冻时间(解冻模式通常使用较低功率,设备可能自动调整功率等级)
- 启动加热,订阅 MicrowaveOvenControl 的 OperationalState 跟踪加热进度
- 加热完成后,微波炉自动停止并发出通知,App 提示用户取出食物
注意:解冻模式下微波炉通常以间歇方式工作(加热一段时间、暂停一段时间), 避免外层过度加热而内层仍是冰冻状态。具体的功率和间歇策略由设备固件控制,App 无需干预。