设备能源管理 Cluster(DeviceEnergyManagement)
Cluster ID: 0x0098 |
所在 Endpoint: 具有能源管理能力的设备端点
DeviceEnergyManagement(DEM)是 Matter 1.4 引入的能源管理核心 Cluster, 用于让能源管理系统(EMS)与各种能源消耗或产生设备协商功率调整、预测用电计划和优化能源使用。 它适用于电动车充电桩(EVSE)、热泵、储能电池、太阳能系统、洗碗机、洗衣机等各类 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 枚举值
ESAStateEnum 枚举值
只有 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 |
该属性是一个复合结构,包含 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 包含以下关键字段:
forecastID -- 预测的唯一标识,每次更新递增
activeSlotNumber -- 当前正在执行的 Slot 编号(null 表示尚未开始)
startTime / endTime -- 整个预测的起止时间
slots -- 时间段列表,每个 Slot 包含 minDuration、maxDuration、defaultDuration、
nominalPower(标称功率)、minPower、maxPower 等参数
OptOutStateEnum 枚举值
当用户设置了 OptOutState 退出优化后,EMS 发送的相应类型的命令会被设备拒绝。
EMS 在发送命令前应先检查此属性,避免发送注定会失败的请求。
OptOut (3) 状态下,除了 CancelPowerAdjustRequest 和 CancelRequest 之外的所有命令都会被拒绝。
Feature 位图
DeviceEnergyManagement Cluster 通过 FeatureMap(0xFFFC)声明设备支持的能源管理能力。不同 Feature 组合决定了可用的命令和属性:
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 分时充电 -- 错峰降低电费
- 读取
ESAType (0x0000)确认是 EVSE 设备,读取ESAState (0x0002)确认为Online (1) - 读取
PowerAdjustmentCapability (0x0005)获取可调功率范围(如 1.4 kW ~ 7.2 kW) - 电价高峰时段(18:00-22:00):发送
PowerAdjustRequest(Power=1400000, Duration=14400, Cause=1)降到最低功率 - 订阅
ESAState,确认变为PowerAdjustActive (3) - 高峰结束后:发送
CancelPowerAdjustRequest恢复全速充电,或等待 Duration 到期自动恢复 - 全程订阅
Forecast (0x0006)变化,监控充电进度和预计完成时间
场景 2:洗碗机延迟启动 -- 利用低谷电价
- 用户设置洗碗机准备运行,设备上报
Forecast显示预计立即启动 - EMS 检查电价时间表,发现 23:00 后进入低谷电价
- 发送
StartTimeAdjustRequest(RequestedStartTime=23:00的UTC时间戳, Cause=0)推迟启动 - 洗碗机在 23:00 自动启动洗涤程序,
Forecast中的activeSlotNumber开始更新 - 如果用户需要提前使用洗碗机,检查
OptOutState,用户可以通过设备面板退出优化,或 EMS 发送CancelRequest取消延迟