电功率测量 Cluster(ElectricalPowerMeasurement)

Cluster ID: 0x0090  |  所在 Endpoint: 电气设备功能端点

ElectricalPowerMeasurement 用于实时测量电气设备的电功率参数 —— 电压、电流、有功功率、无功功率、视在功率、频率、功率因数等。 它是 Matter 能源管理体系中的核心测量 Cluster,适用于智能插座、电表、充电桩、电力监控面板等需要精确电力数据的设备。

单位陷阱:毫伏 / 毫安 / 毫瓦

所有电压值以 mV(毫伏)为单位,电流以 mA(毫安),功率以 mW(毫瓦),频率以 mHz(毫赫兹)。 设备返回 220300 的电压,实际是 220.3 V;返回 334856 的功率,实际是 334.856 W。 展示时必须除以 1000,否则用户会看到天文数字。

DC vs AC:Feature 决定可用属性

这个 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 的实际用途

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
PowerFactor 实际含义

功率因数 = 有功功率 / 视在功率。值越接近 100%(即 10000),说明电能利用效率越高。 纯电阻负载(电热水壶)接近 100%,带电机的设备(空调、冰箱)通常 80%~95%。 负值表示设备在向电网回馈电能(如光伏逆变器)。

枚举定义

PowerModeEnum(供电模式)

0
Unknown 未知供电模式
1
DC 直流电(太阳能面板、电池系统、USB 供电设备)
2
AC 交流电(家用电器、工业设备、电网供电)

MeasurementTypeEnum(测量类型)

用于 Accuracy 和 Ranges 中标识具体的测量种类:

0
Unspecified 未指定
1
Voltage 电压(mV)
2
ActiveCurrent 有功电流(mA)
3
ReactiveCurrent 无功电流(mA)
4
ApparentCurrent 视在电流(mA)
5
ActivePower 有功功率(mW)
6
ReactivePower 无功功率(mVAR)
7
ApparentPower 视在功率(mVA)
8
RMSVoltage RMS 电压(mV)
9
RMSCurrent RMS 电流(mA)
10
RMSPower RMS 功率(mW)
11
Frequency 频率(mHz)
12
PowerFactor 功率因数(1/100)
13
NeutralCurrent 中性线电流(mA)

事件(Events)

ElectricalPowerMeasurement 定义了一个事件,用于周期性上报各测量类型在一段时间内的统计范围。 这是获取历史峰值、谷值数据的主要方式。

MeasurementPeriodRanges

优先级: INFO  |  触发时机: 设备完成一个测量周期后自动上报

事件包含一个 Ranges 字段,类型为 list<MeasurementRangeStruct>, 每个元素记录了某种测量类型在该周期内的最小值、最大值、起止时间戳等统计信息。

事件 vs 属性中的 Ranges

属性 Ranges (0x0003) 和事件 MeasurementPeriodRanges 都包含 MeasurementRangeStruct 列表, 但用途不同:属性记录的是累积范围(设备运行以来的总极值), 事件上报的是单个周期的范围(最近一段时间内的极值)。App 端应订阅事件来构建历史趋势图。

Feature 位图

ElectricalPowerMeasurement 通过 FeatureMap(0xFFFC)声明设备支持的电气测量能力。 不同 Feature 组合决定了哪些属性可用:

Bit 0
DIRC(DirectCurrent) 直流测量 —— 支持 DC 电压、电流、功率测量
Bit 1
ALTC(AlternatingCurrent) 交流测量 —— 解锁无功/视在功率、RMS 系列、频率、功率因数
Bit 2
POLY(PolyphasePower) 多相电力 —— 支持三相电系统,解锁 NeutralCurrent 属性
Bit 3
HARM(Harmonics) 谐波分析 —— 解锁 HarmonicCurrents 和 HarmonicPhases 属性
DIRC 和 ALTC 互斥

一个设备要么是直流(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:智能插座实时功率监控面板
  1. 读取 FeatureMap (0xFFFC),确认设备支持 ALTC(交流电)
  2. 读取 Accuracy (0x0002),确认设备能测量哪些类型及其精度
  3. 订阅核心属性:ActivePower (0x0008)、RMSVoltage (0x000B)、RMSCurrent (0x000C), 设置合理的上报间隔(如 5 秒 ~ 30 秒)
  4. 界面展示:电压 220.3 V、电流 1.52 A、功率 334.9 W、功率因数 99.6%
  5. 可选:订阅 MeasurementPeriodRanges 事件,记录历史峰值用于绘制趋势图
  6. 处理 null 值 —— 展示「--」,不要显示 0,因为 0 和「无数据」含义不同
场景 2:家庭用电异常告警
  1. 订阅 ActivePower (0x0008) 和 RMSCurrent (0x000C),持续监听
  2. 设定告警阈值:功率超过 2200 W(10A × 220V)或电流超过 10000 mA 时触发
  3. 参考 Accuracy 中的精度值设置防抖 —— 如果精度为 ±5%,阈值附近应留出余量
  4. 触发告警时推送通知,严重时可联动 OnOff Cluster 自动断电保护
  5. 可选:监听 PowerFactor (0x0011),功率因数持续低于 70% 可能意味着设备异常