微波炉控制 Cluster(MicrowaveOvenControl)

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

MicrowaveOvenControl 是 Matter 厨电设备中微波炉的核心控制 Cluster,负责管理烹饪时间、功率等级和瓦数设定。 它不负责启动/停止烹饪(由 OperationalState Cluster 处理),也不负责模式选择(由 MicrowaveOvenMode Cluster 处理), 专注于「烹饪参数」这一件事。

三个 Cluster 协同工作

微波炉设备通常需要三个 Cluster 配合:
MicrowaveOvenMode(0x005E)—— 选择烹饪模式(如普通加热、解冻、预设菜单等)
MicrowaveOvenControl(0x005F)—— 设置烹饪参数(时间、功率、瓦数)
OperationalState(0x0060)—— 控制烹饪流程(开始、暂停、停止)
典型流程:先选模式 → 再设参数 → 最后启动烹饪。

功率表示方式由 Feature 决定

微波炉的功率有两种表示方式:数值百分比(PWRNUM 特性,如 80%)和瓦数等级(WATTS 特性,如 900W)。 设备至少支持其中一种。读写功率属性前,务必先检查 FeatureMap 确定设备使用哪种方式,否则会读到不支持的属性。

命令(Commands)

MicrowaveOvenControl Cluster 只有一个命令 —— SetCookingParameters。 它是设置烹饪参数的唯一入口,所有参数(时间、功率、瓦数)都通过这一个命令设置。 注意:这个命令只设置参数,不会启动烹饪。启动烹饪需要调用 OperationalState Cluster 的 Start 命令。

ID 名称 说明 所需特性
0x00 SetCookingParameters 设置烹饪参数(时间、功率、瓦数) 无

SetCookingParameters —— 设置烹饪参数(0x00)

设置微波炉的烹饪参数。所有参数都是可选的 —— 只传需要修改的字段即可,未传的参数保持当前值不变。 设备处于非运行状态时可以设置参数;某些设备也允许在运行中修改(取决于具体实现)。

参数类型必填说明
CookMode uint8 否 烹饪模式编号,对应 MicrowaveOvenMode Cluster 中定义的模式值
CookTime uint32 否 烹饪时间,单位秒。范围 1 ~ MaxCookTime
PowerSetting uint8 否 功率等级数值。范围 MinPower ~ MaxPower,步长为 PowerStep。需要 PWRNUM 特性
WattSettingIndex uint8 否 SupportedWatts 列表的索引(从 0 开始)。需要 WATTS 特性
PowerSetting 与 WattSettingIndex 互斥

一次调用中只能传 PowerSetting 或 WattSettingIndex 之一,不能同时传。 传哪个取决于设备支持的 Feature:支持 PWRNUM 用 PowerSetting,支持 WATTS 用 WattSettingIndex。 同时传两个会返回 INVALID_COMMAND。

使用示例:按功率百分比设置(PWRNUM)

{
  "CookTime": 180,          // 烹饪 3 分钟
  "PowerSetting": 70        // 功率 70%
}

使用示例:按瓦数等级设置(WATTS)

{
  "CookTime": 300,          // 烹饪 5 分钟
  "WattSettingIndex": 3     // 选择 SupportedWatts[3] 对应的瓦数
}
使用场景

用户在 App 上选择「加热 3 分钟、中高火」时,App 发送 SetCookingParameters(CookTime=180, PowerSetting=70)。 参数设好后,再调用 OperationalState 的 Start 命令启动烹饪。 如果需要在烹饪中途加时间(如「再加 1 分钟」),可以在运行状态下再次调用此命令更新 CookTime。

属性详解

MicrowaveOvenControl 的属性按功能分为三组:烹饪时间、功率数值、瓦数等级。 后两组分别由 PWRNUM 和 WATTS Feature 门控。 点击下方汇总表中的属性 ID 可跳转到对应的详细说明。

ID 名称 类型 分组 说明
0x0000 CookTime uint32 烹饪时间 当前设定的烹饪时间(秒)
0x0001 MaxCookTime uint32 烹饪时间 允许的最大烹饪时间(秒)
0x0002 PowerSetting uint8 功率数值 当前功率等级
0x0003 MinPower uint8 功率数值 最低可设功率
0x0004 MaxPower uint8 功率数值 最高可设功率
0x0005 PowerStep uint8 功率数值 功率调节步长
0x0006 SupportedWatts list[uint16] 瓦数等级 设备支持的瓦数列表
0x0007 SelectedWattIndex uint8 瓦数等级 当前选中的瓦数索引
0x0008 WattRating uint16 瓦数等级 当前瓦数额定值

烹饪时间(0x0000, 0x0001)

烹饪时间是所有微波炉都支持的基础属性,不需要特殊 Feature 门控。

ID 名称 类型 说明
0x0000 CookTime
烹饪时间
uint32 当前设定的烹饪时间,单位秒。默认值 30(30 秒)。烹饪过程中此值会倒计时递减,实时反映剩余时间。范围 1 ~ MaxCookTime
0x0001 MaxCookTime
最大烹饪时间
uint32 设备允许的最大烹饪时间,单位秒,只读。用于 App 端校验用户输入和限制时间选择器的上限。典型值如 5400(90 分钟)
时间单位是秒,不是分钟

与日常使用习惯不同,CookTime 的单位是秒。 App 展示时需要转换为分:秒格式(如 120 秒 → 2:00)。 用户输入「3 分钟」时需要转换为 180 再写入。

功率数值(0x0002 ~ 0x0005)

用数值表示功率等级的一组属性。这组属性需要 PWRNUM 特性支持。 无 PWRNUM 特性时,PowerSetting 仍然存在但默认值固定为 100(满功率),不可修改。

ID 名称 类型 说明
0x0002 PowerSetting
功率设置
uint8 当前功率等级。无 PWRNUM 时固定为 100;有 PWRNUM 时范围为 MinPower ~ MaxPower,步长 PowerStep。默认值 100(满功率)
0x0003 MinPower
最低功率
uint8 设备支持的最低功率值。默认 10。需要 PWRLMTS 特性(无 PWRLMTS 时固定为 10)
0x0004 MaxPower
最高功率
uint8 设备支持的最高功率值。默认 100。需要 PWRLMTS 特性(无 PWRLMTS 时固定为 100)
0x0005 PowerStep
功率步长
uint8 功率调节的步进值。默认 10。例如步长为 10 时,功率只能是 10、20、30...100。需要 PWRLMTS 特性(无 PWRLMTS 时固定为 10)
PWRNUM 与 PWRLMTS 的关系

PWRNUM 启用功率数值调节能力 —— 没有它,功率只能是满功率 100。
PWRLMTS 是 PWRNUM 的扩展,允许自定义 Min/Max/Step 三个限制参数。 PWRLMTS 必须和 PWRNUM 一起启用(不能单独启用 PWRLMTS)。 如果只有 PWRNUM 没有 PWRLMTS,则使用默认限制:Min=10, Max=100, Step=10。

瓦数等级(0x0006 ~ 0x0008)

用实际瓦数表示功率的一组属性。这组属性需要 WATTS 特性支持。 与 PWRNUM 的百分比方式不同,WATTS 用离散的瓦数列表让用户选择。

ID 名称 类型 说明
0x0006 SupportedWatts
支持的瓦数列表
list[uint16] 设备支持的所有瓦数等级列表,升序排列。例如 [100, 300, 500, 700, 900, 1100]。只读
0x0007 SelectedWattIndex
选中的瓦数索引
uint8 当前选中的瓦数在 SupportedWatts 列表中的索引(从 0 开始)。通过 SetCookingParameters 的 WattSettingIndex 参数修改
0x0008 WattRating
瓦数额定值
uint16 微波炉的额定功率(瓦),只读。这是设备的标称最大瓦数,通常等于 SupportedWatts 列表中的最大值
用索引而非瓦数值设置功率

设置瓦数时使用的是 SupportedWatts 的索引(WattSettingIndex),不是瓦数值本身。 例如 SupportedWatts = [100, 300, 500, 700, 900, 1100],要设置 700W 需要传 WattSettingIndex = 3。 App 端应先读取 SupportedWatts 列表,展示为可选项(如「低火 100W」「中火 500W」「高火 1100W」),用户选择后传对应索引。

Feature 位图

MicrowaveOvenControl Cluster 通过 FeatureMap(0xFFFC)声明设备支持哪些功率控制方式:

Bit 0
PWRNUM(PowerAsNumber) 功率以数值表示 —— 启用 PowerSetting 的读写(10~100 范围)
Bit 1
WATTS(WattRating) 功率以瓦数表示 —— 启用 SupportedWatts 列表和 WattSettingIndex 选择
Bit 2
PWRLMTS(PowerNumberLimits) 自定义功率限制 —— 启用 MinPower、MaxPower、PowerStep 属性(需同时启用 PWRNUM)
Feature 组合约束

PWRNUM 和 WATTS 互斥 —— 设备只能选择一种功率表示方式,不能同时支持两种。
PWRLMTS 依赖 PWRNUM —— 启用 PWRLMTS 时必须同时启用 PWRNUM。
常见组合:无 Feature(仅时间控制)、PWRNUM(百分比功率)、PWRNUM + PWRLMTS(自定义范围的百分比功率)、WATTS(瓦数等级选择)。

示例数据

一个同时支持 PWRNUM 和 WATTS 特性的微波炉设备的属性读取结果(实际设备只会支持其中一种功率方式,此处为展示完整属性):

{
  // --- 烹饪时间 ---
  "0x0000": 120,            // CookTime = 120 秒(当前设定烹饪 2 分钟)
  "0x0001": 5400,           // MaxCookTime = 5400 秒(最大可设 90 分钟)

  // --- 功率设置(PWRNUM 特性)---
  "0x0002": 80,             // PowerSetting = 80(当前功率 80%)
  "0x0003": 10,             // MinPower = 10(最低功率 10%)
  "0x0004": 100,            // MaxPower = 100(最高功率 100%)
  "0x0005": 10,             // PowerStep = 10(功率调节步长 10%)

  // --- 瓦数设置(WATTS 特性)---
  "0x0006": [100, 300, 500, 700, 900, 1100],  // SupportedWatts(支持的瓦数列表)
  "0x0007": 4,              // SelectedWattIndex = 4 → 对应 900W
  "0x0008": 900             // WattRating = 900(当前瓦数额定值)
}
开发提示

App 展示功率时,先检查 FeatureMap:
• 有 PWRNUM → 展示为百分比滑块或档位选择器(10% / 20% / ... / 100%)
• 有 WATTS → 读取 SupportedWatts 列表,展示为瓦数选项(100W / 300W / 500W ...)
• 两者都没有 → 设备只支持满功率,不需要展示功率控制 UI

常见场景

场景 1:App 设置烹饪参数并启动加热
  1. 读取 MaxCookTime (0x0001) 确定时间上限,用于限制时间选择器范围
  2. 读取 FeatureMap (0xFFFC) 判断功率控制方式:
    • PWRNUM → 读取 MinPower (0x0003)、MaxPower (0x0004)、PowerStep (0x0005) 构建功率选择器
    • WATTS → 读取 SupportedWatts (0x0006) 列表,展示可选瓦数
  3. 用户选好时间和功率后,发送 SetCookingParameters (0x00) 写入参数
  4. 调用 OperationalState Cluster 的 Start 命令启动烹饪
  5. 订阅 CookTime (0x0000) 属性变化,实时更新倒计时显示
场景 2:烹饪中途调整时间或功率
  1. 通过 OperationalState Cluster 读取当前状态,确认设备正在运行
  2. 读取 CookTime (0x0000) 获取当前剩余时间
  3. 用户点击「加 30 秒」→ 发送 SetCookingParameters(CookTime=当前值+30)
  4. 用户调低功率 → 发送 SetCookingParameters(PowerSetting=50) 或 SetCookingParameters(WattSettingIndex=2)
  5. 注意:能否在运行中修改参数取决于设备实现,部分设备可能要求先暂停再修改