设备能源管理 Cluster(DeviceEnergyManagement)

Cluster ID: 0x0098  |  所在 Endpoint: 具有能源管理能力的设备端点

DeviceEnergyManagement(DEM)是 Matter 1.4 引入的能源管理核心 Cluster, 用于让能源管理系统(EMS)与各种能源消耗或产生设备协商功率调整、预测用电计划和优化能源使用。 它适用于电动车充电桩(EVSE)、热泵、储能电池、太阳能系统、洗碗机、洗衣机等各类 ESA(Energy Smart Appliance)设备。

ESA(Energy Smart Appliance)

ESA 是 Matter 能源管理体系中的核心概念,指具有能源感知和管理能力的智能设备。 每个 ESA 通过 ESAType 标识自己的设备类别,通过 ESAState 报告当前状态, 并借助 Forecast(预测)向 EMS 声明自己的用电计划。EMS 根据这些信息发出功率调整、时间调整等优化指令。

功率单位

DeviceEnergyManagement Cluster 中所有功率属性的单位都是 毫瓦(mW)。 例如 AbsMaxPower = 7200000 表示最大功率 7.2 kW(7200 W)。 读写功率属性时务必做好单位换算。

命令(Commands)

DeviceEnergyManagement Cluster 共有 8 个命令,分别对应不同的 Feature 能力。 EMS(能源管理系统)通过这些命令调整设备的功率、启动时间、运行状态和用电预测。 点击下方表格中的命令 ID 可跳转到对应的详细说明。

ID 名称 说明 Feature 要求
0x00 PowerAdjustRequest 请求设备调整到指定功率 PA
0x01 CancelPowerAdjustRequest 取消正在进行的功率调整 PA
0x02 StartTimeAdjustRequest 请求调整预测的启动时间 STA
0x03 PauseRequest 请求设备暂停运行 PAU
0x04 ResumeRequest 请求设备恢复运行 PAU
0x05 ModifyForecastRequest 修改设备的用电预测 FA
0x06 RequestConstraintBasedForecast 基于约束条件请求设备重新生成预测 CON
0x07 CancelRequest 取消所有进行中的优化请求 STA | PAU | FA | CON

PowerAdjustRequest -- 功率调整请求(0x00)

请求设备在指定时间段内调整到目标功率。EMS 用这个命令在电价高峰时段降低设备功率、 或在电价低谷时段提高功率来优化用电成本。执行成功后,ESAState 变为 PowerAdjustActive (3)。

参数类型说明
Power int64 目标功率,单位 mW。必须在设备的 PowerAdjustmentCapability 范围内
Duration uint32 调整持续时间,单位秒。必须在设备声明的 minDuration ~ maxDuration 范围内
Cause AdjustmentCauseEnum 调整原因:0 = LocalOptimization,1 = GridOptimization
使用场景

电价高峰期间,EMS 向 EVSE 发送 PowerAdjustRequest(Power=1400000, Duration=7200, Cause=1), 将充电功率从 7.2 kW 降到 1.4 kW 持续 2 小时。设备会在功率调整期间持续以低功率充电, 到期后自动恢复正常功率。

CancelPowerAdjustRequest -- 取消功率调整(0x01)

取消正在进行的功率调整,设备立即恢复到正常运行状态。无参数。 执行成功后,ESAState 从 PowerAdjustActive 恢复为 Online。

使用场景

EMS 之前请求了降功率运行,但电网负荷突然下降,不再需要限制。 发送 CancelPowerAdjustRequest 让设备恢复全速运行。

StartTimeAdjustRequest -- 启动时间调整(0x02)

请求设备将预测(Forecast)中的启动时间调整到指定时刻。 用于在不改变总用电量的前提下,将设备的运行时段从高峰移到低谷。

参数类型说明
RequestedStartTime epoch-s 请求的新启动时间(UTC 时间戳)
Cause AdjustmentCauseEnum 调整原因:0 = LocalOptimization,1 = GridOptimization
使用场景

洗衣机预计 18:00 启动洗涤程序,但 EMS 发现 18:00-20:00 是用电高峰。 发送 StartTimeAdjustRequest(RequestedStartTime=22:00的UTC时间戳, Cause=1), 将洗涤推迟到 22:00 低谷时段启动。设备会在新的时间自动开始运行。

PauseRequest -- 暂停运行(0x03)

请求设备暂停当前运行。仅适用于支持暂停的设备(PAU Feature)。 执行成功后,ESAState 变为 Paused (4)。

参数类型说明
Duration uint32 暂停持续时间,单位秒。到期后设备自动恢复运行
Cause AdjustmentCauseEnum 暂停原因:0 = LocalOptimization,1 = GridOptimization
使用场景

洗碗机正在运行,EMS 检测到电网负荷即将达到峰值。 发送 PauseRequest(Duration=1800, Cause=1) 暂停洗碗机 30 分钟。 设备在暂停期间保持当前状态,30 分钟后自动恢复洗涤程序。

ResumeRequest -- 恢复运行(0x04)

请求设备恢复已暂停的运行。无参数。 执行成功后,ESAState 从 Paused 恢复为 Online。

ModifyForecastRequest -- 修改预测(0x05)

修改设备当前 Forecast 中一个或多个 Slot 的功率和时间参数。 EMS 通过此命令直接调整设备的用电计划,比如降低某个时段的预期功率。

参数类型说明
ForecastID uint32 要修改的 Forecast ID,必须与当前 Forecast 属性中的 forecastID 匹配
SlotAdjustments list Slot 调整列表,每项包含 SlotIndex、NominalPower、Duration 等字段
Cause AdjustmentCauseEnum 调整原因:0 = LocalOptimization,1 = GridOptimization
使用场景

EVSE 的 Forecast 显示将在 Slot 0 以 7.2 kW 充电 2 小时。EMS 希望将其分成两段: 先以 3.6 kW 充 1 小时(避开高峰),再以 7.2 kW 充 1 小时。 通过 ModifyForecastRequest 修改 Slot 参数实现这种分段充电策略。

RequestConstraintBasedForecast -- 基于约束请求预测(0x06)

向设备提供一组功率/能量约束条件,请求设备据此重新生成 Forecast。 与 ModifyForecastRequest 直接修改参数不同,这个命令告诉设备"你自己想办法满足这些约束"。

参数类型说明
Constraints list 约束条件列表。每项包含 StartTime、Duration、NominalPower / MaximumEnergy 等限制
Cause AdjustmentCauseEnum 约束原因:0 = LocalOptimization,1 = GridOptimization
使用场景

EMS 知道明天 14:00-16:00 电网可能过载,向热泵发送约束: "14:00-16:00 最大功率不超过 2 kW"。热泵根据约束自行调整内部运行计划, 可能选择提前预冷或推迟启动,以确保在约束时段内不超过 2 kW。

CancelRequest -- 取消请求(0x07)

取消所有当前进行中的优化请求(StartTimeAdjust、Pause、ModifyForecast、ConstraintBasedForecast), 设备恢复到原始的自主运行计划。无参数。 需要设备支持 STA、PAU、FA 或 CON 中的至少一个 Feature。

使用场景

EMS 此前发出了多项优化请求,现在需要释放所有限制让设备恢复自主运行。 发送 CancelRequest 一次性清除所有进行中的时间调整、暂停和预测修改。

属性详解

DeviceEnergyManagement Cluster 的属性按功能分为三组。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。

ID 名称 类型 分组 说明
0x0000 ESAType ESATypeEnum ESA 基本信息 设备类型标识
0x0001 ESACanGenerate bool ESA 基本信息 设备是否能产生能源
0x0002 ESAState ESAStateEnum ESA 基本信息 设备当前能源管理状态
0x0003 AbsMinPower int64 功率与调整 设备绝对最小功率 (mW)
0x0004 AbsMaxPower int64 功率与调整 设备绝对最大功率 (mW)
0x0005 PowerAdjustmentCapability struct / null 功率与调整 功率可调范围和时间限制
0x0006 Forecast struct / null 预测与优化 设备的用电/产电预测计划
0x0007 OptOutState OptOutStateEnum 预测与优化 用户退出优化的状态

ESA 基本信息(0x0000-0x0002)

描述设备的类型、能源产生能力和当前状态。这三个属性是所有 DEM 设备的基础属性。

ID名称类型说明
0x0000 ESAType
设备类型
ESATypeEnum 标识 ESA 设备的类型。EMS 根据此值了解设备的能源特性和调度策略。见下方枚举
0x0001 ESACanGenerate
可产生能源
bool true 表示设备可以向电网输出能源(如太阳能逆变器、储能电池放电)。false 表示设备只消耗能源
0x0002 ESAState
设备状态
ESAStateEnum 设备当前的能源管理状态。见下方枚举

ESATypeEnum 枚举值

0
EVSE 电动车充电桩
1
SpaceHeating 空间加热(暖气)
2
WaterHeating 热水器
3
SpaceCooling 空间制冷(空调)
4
SpaceHeatingCooling 冷暖两用(热泵)
5
BatteryStorage 储能电池
6
SolarPV 太阳能光伏
7
FridgeFreezer 冰箱/冷柜
8
WashingMachine 洗衣机
9
Dishwasher 洗碗机
10
Cooking 烹饪设备
11
HomeWaterPump 家用水泵
12
IrrigationWaterPump 灌溉水泵
13
PoolPump 泳池水泵
255
Other 其他类型

ESAStateEnum 枚举值

0
Offline 离线 -- 设备不参与能源管理
1
Online 在线 -- 正常运行,可接受优化指令
2
Fault 故障 -- 设备发生错误,暂停能源管理
3
PowerAdjustActive 功率调整中 -- 正在执行 PowerAdjustRequest
4
Paused 已暂停 -- 因 PauseRequest 暂停运行
ESAState 与命令的关系

只有 ESAState = Online (1) 时,设备才接受新的优化命令。 处于 Offline 或 Fault 状态时,所有命令都会被拒绝。 PowerAdjustActive 状态下只能发送 CancelPowerAdjustRequest, Paused 状态下只能发送 ResumeRequest。

功率与调整(0x0003-0x0005)

定义设备的功率范围和可调整能力。EMS 在发送 PowerAdjustRequest 之前需要先读取这些属性确认调整范围。

ID名称类型说明
0x0003 AbsMinPower
绝对最小功率
int64 设备可运行的绝对最小功率,单位 mW。可为负值(表示向电网输出)。0 表示设备可完全停止消耗
0x0004 AbsMaxPower
绝对最大功率
int64 设备可运行的绝对最大功率,单位 mW。例如 7200000 表示 7.2 kW
0x0005 PowerAdjustmentCapability
功率调整能力
struct / null 描述设备当前可接受的功率调整范围和时间限制。null 表示设备当前不接受功率调整。需要 PA Feature
PowerAdjustmentCapability 结构

该属性是一个复合结构,包含 powerAdjustCapability(功率调整能力列表)和 cause(原因)。 列表中每个条目定义了一组可调范围:minPower / maxPower(功率范围)和 minDuration / maxDuration(时间范围)。 设备可以提供多个不连续的功率调整区间。EMS 在发送 PowerAdjustRequest 时,参数必须落在其中一个区间内。

预测与优化(0x0006-0x0007)

设备的用电预测计划和用户退出优化的状态。Forecast 是 DEM 最核心的数据结构。

ID名称类型说明
0x0006 Forecast
用电预测
struct / null 设备对未来用电或产电的预测计划。包含多个时间 Slot,每个 Slot 定义了时间段和功率参数。null 表示设备没有可用的预测。需要 PFR 或 SFR Feature
0x0007 OptOutState
退出优化状态
OptOutStateEnum 用户是否选择退出能源优化。见下方枚举
Forecast 结构详解

Forecast 包含以下关键字段:
forecastID -- 预测的唯一标识,每次更新递增
activeSlotNumber -- 当前正在执行的 Slot 编号(null 表示尚未开始)
startTime / endTime -- 整个预测的起止时间
slots -- 时间段列表,每个 Slot 包含 minDuration、maxDuration、defaultDuration、 nominalPower(标称功率)、minPower、maxPower 等参数

OptOutStateEnum 枚举值

0
NoOptOut 未退出 -- 接受所有优化请求
1
LocalOptOut 退出本地优化 -- 拒绝 LocalOptimization 类型的请求
2
GridOptOut 退出电网优化 -- 拒绝 GridOptimization 类型的请求
3
OptOut 全部退出 -- 拒绝所有优化请求
OptOutState 的影响

当用户设置了 OptOutState 退出优化后,EMS 发送的相应类型的命令会被设备拒绝。 EMS 在发送命令前应先检查此属性,避免发送注定会失败的请求。 OptOut (3) 状态下,除了 CancelPowerAdjustRequest 和 CancelRequest 之外的所有命令都会被拒绝。

Feature 位图

DeviceEnergyManagement Cluster 通过 FeatureMap(0xFFFC)声明设备支持的能源管理能力。不同 Feature 组合决定了可用的命令和属性:

Bit 0
PA(PowerAdjustment) 功率调整 -- 支持 PowerAdjustRequest / CancelPowerAdjustRequest 命令,提供 PowerAdjustmentCapability 属性
Bit 1
PFR(PowerForecastReporting) 功率预测上报 -- 设备以功率为单位上报 Forecast(每个 Slot 包含功率参数)
Bit 2
SFR(StateForecastReporting) 状态预测上报 -- 设备以运行状态为单位上报 Forecast(每个 Slot 描述运行阶段)
Bit 3
STA(StartTimeAdjustment) 启动时间调整 -- 支持 StartTimeAdjustRequest 命令,允许 EMS 推迟或提前设备启动
Bit 4
PAU(Pausable) 可暂停 -- 支持 PauseRequest / ResumeRequest 命令,设备可在运行中暂停
Bit 5
FA(ForecastAdjustment) 预测调整 -- 支持 ModifyForecastRequest 命令,允许 EMS 直接修改预测参数
Bit 6
CON(ConstraintBasedAdjustment) 基于约束调整 -- 支持 RequestConstraintBasedForecast 命令,允许 EMS 提供约束让设备自行优化
PFR 与 SFR 互斥

PFR(PowerForecastReporting)和 SFR(StateForecastReporting)是互斥的 -- 设备只能选择其中一种预测上报方式。 PFR 适用于功率可连续调节的设备(如 EVSE),SFR 适用于按固定程序运行的设备(如洗衣机、洗碗机)。 FA 和 CON Feature 需要 PFR 或 SFR 中的至少一个作为前提。

示例数据

一个 EVSE(电动车充电桩)在线运行时的 DeviceEnergyManagement Cluster 读取结果:

{
  // --- ESA 基本信息 ---
  "0x0000": 0,              // ESAType = EVSE(电动车充电桩)
  "0x0001": false,          // ESACanGenerate = false(只消耗不产生能源)
  "0x0002": 1,              // ESAState = Online(在线运行中)

  // --- 功率范围 ---
  "0x0003": 0,              // AbsMinPower = 0 mW(可完全停止消耗)
  "0x0004": 7200000,        // AbsMaxPower = 7200000 mW(最大 7.2 kW)

  // --- 功率调整能力 ---
  "0x0005": {               // PowerAdjustmentCapability
    "powerAdjustCapability": [
      {
        "minPower": 1400000,       // 最低可调功率 1.4 kW
        "maxPower": 7200000,       // 最高可调功率 7.2 kW
        "minDuration": 60,         // 最短调整持续 60 秒
        "maxDuration": 28800       // 最长调整持续 8 小时
      }
    ],
    "cause": 0                     // NoRateChange(无费率变化触发)
  },

  // --- 预测 ---
  "0x0006": {               // Forecast
    "forecastID": 1,
    "activeSlotNumber": 0,
    "startTime": 1700000000,
    "endTime": 1700028800,
    "slots": [
      {
        "minDuration": 3600,
        "maxDuration": 7200,
        "defaultDuration": 5400,
        "nominalPower": 7200000,
        "minPower": 1400000,
        "maxPower": 7200000
      }
    ]
  },

  // --- 退出状态 ---
  "0x0007": 0               // OptOutState = NoOptOut(未退出任何优化)
}
开发提示

所有功率值的单位是毫瓦(mW),需除以 1000 得到瓦(W),再除以 1000 得到千瓦(kW)。 Forecast 和 PowerAdjustmentCapability 是复合结构体,解析时需要递归处理嵌套字段。 null 值表示该能力当前不可用 -- 例如设备处于 Offline 状态时 PowerAdjustmentCapability 可能为 null。

常见场景

场景 1:EVSE 分时充电 -- 错峰降低电费
  1. 读取 ESAType (0x0000) 确认是 EVSE 设备,读取 ESAState (0x0002) 确认为 Online (1)
  2. 读取 PowerAdjustmentCapability (0x0005) 获取可调功率范围(如 1.4 kW ~ 7.2 kW)
  3. 电价高峰时段(18:00-22:00):发送 PowerAdjustRequest(Power=1400000, Duration=14400, Cause=1) 降到最低功率
  4. 订阅 ESAState,确认变为 PowerAdjustActive (3)
  5. 高峰结束后:发送 CancelPowerAdjustRequest 恢复全速充电,或等待 Duration 到期自动恢复
  6. 全程订阅 Forecast (0x0006) 变化,监控充电进度和预计完成时间
场景 2:洗碗机延迟启动 -- 利用低谷电价
  1. 用户设置洗碗机准备运行,设备上报 Forecast 显示预计立即启动
  2. EMS 检查电价时间表,发现 23:00 后进入低谷电价
  3. 发送 StartTimeAdjustRequest(RequestedStartTime=23:00的UTC时间戳, Cause=0) 推迟启动
  4. 洗碗机在 23:00 自动启动洗涤程序,Forecast 中的 activeSlotNumber 开始更新
  5. 如果用户需要提前使用洗碗机,检查 OptOutState,用户可以通过设备面板退出优化,或 EMS 发送 CancelRequest 取消延迟