电功率测量 Cluster(ElectricalPowerMeasurement)
Cluster ID: 0x0090 |
所在 Endpoint: 电气设备功能端点
ElectricalPowerMeasurement 用于实时测量电气设备的电功率参数 —— 电压、电流、有功功率、无功功率、视在功率、频率、功率因数等。 它是 Matter 能源管理体系中的核心测量 Cluster,适用于智能插座、电表、充电桩、电力监控面板等需要精确电力数据的设备。
所有电压值以 mV(毫伏)为单位,电流以 mA(毫安),功率以 mW(毫瓦),频率以 mHz(毫赫兹)。
设备返回 220300 的电压,实际是 220.3 V;返回 334856 的功率,实际是 334.856 W。
展示时必须除以 1000,否则用户会看到天文数字。
这个 Cluster 通过 Feature 位图区分直流(DIRC)和交流(ALTC)场景。 ReactiveCurrent、ApparentCurrent、ReactivePower、ApparentPower、RMS 系列、Frequency、PowerFactor 等属性 仅在启用 ALTC(交流电)特性时才可用。 直流设备(如太阳能面板、电池)只上报 Voltage、ActiveCurrent、ActivePower 等基础属性。
属性详解
ElectricalPowerMeasurement 共有 19 个应用属性,分为基本信息、实时测量值、RMS 测量值、谐波数据四组。 点击属性 ID 可跳转到对应分组的详细说明。
| ID | 名称 | 类型 | 分组 | 所需特性 |
|---|---|---|---|---|
0x0000 |
PowerMode | PowerModeEnum | 基本信息 | 无 |
0x0001 |
NumberOfMeasurementTypes | uint8 | 基本信息 | 无 |
0x0002 |
Accuracy | list<MeasurementAccuracyStruct> | 基本信息 | 无 |
0x0003 |
Ranges | list<MeasurementRangeStruct> | 基本信息 | 无 |
0x0004 |
Voltage | int64 (mV) | 实时测量 | 无 |
0x0005 |
ActiveCurrent | int64 (mA) | 实时测量 | 无 |
0x0006 |
ReactiveCurrent | int64 (mA) | 实时测量 | ALTC |
0x0007 |
ApparentCurrent | int64 (mA) | 实时测量 | ALTC |
0x0008 |
ActivePower | int64 (mW) | 实时测量 | 无 |
0x0009 |
ReactivePower | int64 (mW) | 实时测量 | ALTC |
0x000A |
ApparentPower | int64 (mW) | 实时测量 | ALTC |
0x000B |
RMSVoltage | int64 (mV) | RMS 测量 | ALTC |
0x000C |
RMSCurrent | int64 (mA) | RMS 测量 | ALTC |
0x000D |
RMSPower | int64 (mW) | RMS 测量 | ALTC |
0x000E |
Frequency | int64 (mHz) | RMS 测量 | ALTC |
0x000F |
HarmonicCurrents | list<HarmonicMeasurementStruct> | 谐波与补充 | HARM |
0x0010 |
HarmonicPhases | list<HarmonicMeasurementStruct> | 谐波与补充 | HARM |
0x0011 |
PowerFactor | int64 | 谐波与补充 | ALTC |
0x0012 |
NeutralCurrent | int64 (mA) | 谐波与补充 | POLY |
基本信息(0x0000 ~ 0x0003)
描述设备的供电模式、支持的测量类型数量、精度声明和历史测量范围。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
PowerMode(供电模式) | PowerModeEnum | 设备的供电类型:Unknown / DC / AC(见下方枚举)。必选属性 |
0x0001 |
NumberOfMeasurementTypes(测量类型数量) | uint8 | 设备支持的测量类型总数,对应 Accuracy 列表的长度。必选属性 |
0x0002 |
Accuracy(精度声明) | list<MeasurementAccuracyStruct> | 列出设备支持的每种测量类型及其精度范围。每个元素包含 MeasurementType、是否被测量、精度区间等。必选属性 |
0x0003 |
Ranges(测量范围统计) | list<MeasurementRangeStruct> | 设备在一段时间内记录的各测量类型的最小/最大/起止时间等统计信息。可选属性 |
Accuracy 属性告诉你设备能测什么、测得多准。App 端应先读取这个属性,
再决定展示哪些测量值。如果某个测量类型不在 Accuracy 列表中,即使属性存在也不应使用。
实时测量值(0x0004 ~ 0x000A)
设备当前的电压、电流和功率瞬时值。所有值均为 Nullable —— 返回 null 表示当前数据无效。
| ID | 名称 | 单位 | 说明 |
|---|---|---|---|
0x0004 |
Voltage(电压) | mV | 瞬时电压。220300 = 220.3 V。可选,Nullable |
0x0005 |
ActiveCurrent(有功电流) | mA | 瞬时有功电流。1520 = 1.52 A。可选,Nullable |
0x0006 |
ReactiveCurrent(无功电流) | mA | 瞬时无功电流。仅交流电设备。需要 ALTC,Nullable |
0x0007 |
ApparentCurrent(视在电流) | mA | 瞬时视在电流(有功 + 无功的矢量和)。需要 ALTC,Nullable |
0x0008 |
ActivePower(有功功率) | mW | 瞬时有功功率(实际做功的部分)。334856 = 334.856 W。必选属性,Nullable |
0x0009 |
ReactivePower(无功功率) | mW | 瞬时无功功率(不做有效功的部分)。单位实际为 mVAR。需要 ALTC,Nullable |
0x000A |
ApparentPower(视在功率) | mW | 瞬时视在功率(有功 + 无功的总量)。单位实际为 mVA。需要 ALTC,Nullable |
有功功率(Active Power)= 实际消耗的电能,电费按这个算。
无功功率(Reactive Power)= 电感/电容导致的「来回搬运」,不做有效功但占用线路容量。
视在功率(Apparent Power)= 两者的矢量和,代表线路的总负载能力。
关系:ApparentPower² = ActivePower² + ReactivePower²
RMS 测量值(0x000B ~ 0x000E)
交流电的 RMS(均方根)测量值 —— 交流电的有效值。对于纯正弦波,RMS 值 = 峰值 / √2。 这组属性全部需要 ALTC 特性。
| ID | 名称 | 单位 | 说明 |
|---|---|---|---|
0x000B |
RMSVoltage(RMS 电压) | mV | 交流电压有效值。家用电 220V 对应约 220000。Nullable |
0x000C |
RMSCurrent(RMS 电流) | mA | 交流电流有效值。Nullable |
0x000D |
RMSPower(RMS 功率) | mW | 交流功率有效值。Nullable |
0x000E |
Frequency(频率) | mHz | 交流电频率。50000 = 50.0 Hz(中国标准),60000 = 60.0 Hz(美国标准)。Nullable |
谐波与补充属性(0x000F ~ 0x0012)
谐波分析数据和功率因数、中性线电流。谐波属性需要 HARM 特性,功率因数需要 ALTC,中性线电流需要 POLY。
| ID | 名称 | 所需特性 | 说明 |
|---|---|---|---|
0x000F |
HarmonicCurrents(谐波电流) | HARM | 各次谐波的电流幅值列表(HarmonicMeasurementStruct),用于电能质量分析。Nullable |
0x0010 |
HarmonicPhases(谐波相位) | HARM | 各次谐波的相位角列表(HarmonicMeasurementStruct)。Nullable |
0x0011 |
PowerFactor(功率因数) | ALTC | 有功功率与视在功率的比值,以百分比的 100 倍表示。9960 = 99.60%。范围 -10000 ~ 10000。Nullable |
0x0012 |
NeutralCurrent(中性线电流) | POLY | 多相系统中中性线(零线)的电流。三相不平衡时此值较大。Nullable |
功率因数 = 有功功率 / 视在功率。值越接近 100%(即 10000),说明电能利用效率越高。 纯电阻负载(电热水壶)接近 100%,带电机的设备(空调、冰箱)通常 80%~95%。 负值表示设备在向电网回馈电能(如光伏逆变器)。
枚举定义
PowerModeEnum(供电模式)
MeasurementTypeEnum(测量类型)
用于 Accuracy 和 Ranges 中标识具体的测量种类:
事件(Events)
ElectricalPowerMeasurement 定义了一个事件,用于周期性上报各测量类型在一段时间内的统计范围。 这是获取历史峰值、谷值数据的主要方式。
MeasurementPeriodRanges
优先级: INFO | 触发时机: 设备完成一个测量周期后自动上报
事件包含一个 Ranges 字段,类型为 list<MeasurementRangeStruct>,
每个元素记录了某种测量类型在该周期内的最小值、最大值、起止时间戳等统计信息。
属性 Ranges (0x0003) 和事件 MeasurementPeriodRanges 都包含 MeasurementRangeStruct 列表,
但用途不同:属性记录的是累积范围(设备运行以来的总极值),
事件上报的是单个周期的范围(最近一段时间内的极值)。App 端应订阅事件来构建历史趋势图。
Feature 位图
ElectricalPowerMeasurement 通过 FeatureMap(0xFFFC)声明设备支持的电气测量能力。
不同 Feature 组合决定了哪些属性可用:
一个设备要么是直流(DIRC),要么是交流(ALTC),不能同时声明两者。 POLY 和 HARM 只在 ALTC 基础上生效。 App 端读取 FeatureMap 后,应据此决定展示哪些属性 —— 不要向 DC 设备请求 RMS 数据。
命令
ElectricalPowerMeasurement 是一个纯只读的 Server Cluster,没有任何命令。 设备负责采集电力数据并更新属性,App 端只需读取(Read)或订阅(Subscribe)即可获取数据。
示例数据
一个启用了 ALTC(交流电)特性的智能插座上报的电力数据:
{
// --- ElectricalPowerMeasurement Cluster(Endpoint 1)---
// --- 基本信息 ---
"0x0000": 2, // PowerMode = AC(交流电)
"0x0001": 5, // NumberOfMeasurementTypes = 5
// --- 实时测量值 ---
"0x0004": 220300, // Voltage = 220300 mV → 220.3 V
"0x0005": 1520, // ActiveCurrent = 1520 mA → 1.52 A
"0x0008": 334856, // ActivePower = 334856 mW → 334.856 W
"0x0009": 28700, // ReactivePower = 28700 mW → 28.7 VAR
"0x000A": 336100, // ApparentPower = 336100 mW → 336.1 VA
// --- RMS 测量值(交流电专用)---
"0x000B": 219800, // RMSVoltage = 219800 mV → 219.8 V
"0x000C": 1530, // RMSCurrent = 1530 mA → 1.53 A
"0x000D": 335200, // RMSPower = 335200 mW → 335.2 W
"0x000E": 50000, // Frequency = 50000 mHz → 50.0 Hz
// --- 功率因数 ---
"0x0011": 9960 // PowerFactor = 9960 → 99.60%
}
MeasurementPeriodRanges 事件示例 —— 设备在 1 小时周期内的电压和功率范围统计:
{
// MeasurementPeriodRanges 事件
// 设备在一个测量周期结束时上报,包含各测量类型的统计范围
"MeasurementPeriodRanges": {
"Ranges": [
{
"MeasurementType": 1, // Voltage
"Min": 218500, // 最低 218.5 V
"Max": 222100, // 最高 222.1 V
"StartTimestamp": 1695600000,
"EndTimestamp": 1695603600
},
{
"MeasurementType": 5, // ActivePower
"Min": 280000, // 最低 280.0 W
"Max": 350000, // 最高 350.0 W
"StartTimestamp": 1695600000,
"EndTimestamp": 1695603600
}
]
}
}
处理设备返回值时的关键逻辑:
{`// 设备返回值(int64, Nullable)
val voltageRaw: Long? = 220300 // mV
val powerRaw: Long? = 334856 // mW
val freqRaw: Long? = 50000 // mHz
val pfRaw: Long? = 9960 // 百分比 × 100
// 转换为可读值
val voltageV = voltageRaw?.let { it / 1000.0 } // → 220.3 V
val powerW = powerRaw?.let { it / 1000.0 } // → 334.856 W
val freqHz = freqRaw?.let { it / 1000.0 } // → 50.0 Hz
val powerFactor = pfRaw?.let { it / 100.0 } // → 99.60%
// 显示时处理 null
val display = voltageV?.let { String.format("%.1f V", it) } ?: "--"`}
常见场景
场景 1:智能插座实时功率监控面板
- 读取
FeatureMap (0xFFFC),确认设备支持 ALTC(交流电) - 读取
Accuracy (0x0002),确认设备能测量哪些类型及其精度 - 订阅核心属性:
ActivePower (0x0008)、RMSVoltage (0x000B)、RMSCurrent (0x000C), 设置合理的上报间隔(如 5 秒 ~ 30 秒) - 界面展示:电压 220.3 V、电流 1.52 A、功率 334.9 W、功率因数 99.6%
- 可选:订阅
MeasurementPeriodRanges事件,记录历史峰值用于绘制趋势图 - 处理
null值 —— 展示「--」,不要显示 0,因为 0 和「无数据」含义不同
场景 2:家庭用电异常告警
- 订阅
ActivePower (0x0008)和RMSCurrent (0x000C),持续监听 - 设定告警阈值:功率超过 2200 W(10A × 220V)或电流超过 10000 mA 时触发
- 参考
Accuracy中的精度值设置防抖 —— 如果精度为 ±5%,阈值附近应留出余量 - 触发告警时推送通知,严重时可联动 OnOff Cluster 自动断电保护
- 可选:监听
PowerFactor (0x0011),功率因数持续低于 70% 可能意味着设备异常