PM2.5 浓度测量 Cluster(Pm25ConcentrationMeasurement)

Cluster ID: 0x042A  |  所在 Endpoint: 通常在 Endpoint 1+(功能端点)

Pm25ConcentrationMeasurement 用于测量空气中 PM2.5(细颗粒物)的浓度。 PM2.5 是直径小于或等于 2.5 微米的颗粒物,能深入肺泡,是衡量空气质量最关键的指标之一。 常见于空气质量传感器、空气净化器、新风系统、智能环境面板等设备。 设备作为 Server 角色被动上报浓度数据,App(Client)读取或订阅即可。

浓度测量 Cluster 家族

Matter 定义了一组结构完全相同的「Concentration Measurement」Cluster, 包括 CO2(0x040D)、PM2.5(0x042A)、PM10(0x042D)、甲醛(0x042B)、TVOC(0x042E)等。 它们共享相同的属性集、Feature Map、枚举定义和行为模型 —— 只是测量的目标物质不同。 掌握一个,就等于掌握了整个家族。本页以 PM2.5 为例讲解这套通用模式。

Feature 位图

Pm25ConcentrationMeasurement 通过 FeatureMap(0xFFFC)声明设备支持哪些能力。 Feature 决定了哪些属性可用 —— 比如没有 PEA Feature 的设备不会上报峰值数据。 所有浓度测量 Cluster 的 Feature 定义完全相同。

Bit 0
MEA(NumericMeasurement) 数值测量 —— 支持 MeasuredValue / MinMeasuredValue / MaxMeasuredValue / Uncertainty 属性
Bit 1
LEV(LevelIndication) 等级指示 —— 支持 LevelValue 属性,将浓度映射为 Low / Medium / High / Critical 等级
Bit 2
MED(MediumLevel) 中等级别 —— LevelValue 可取 Medium(需要 LEV Feature)
Bit 3
CRI(CriticalLevel) 危险级别 —— LevelValue 可取 Critical(需要 LEV Feature)
Bit 4
PEA(PeakMeasurement) 峰值测量 —— 支持 PeakMeasuredValue / PeakMeasuredValueWindow 属性
Bit 5
AVG(AverageMeasurement) 均值测量 —— 支持 AverageMeasuredValue / AverageMeasuredValueWindow 属性
Feature 组合示例

入门级 PM2.5 传感器:FeatureMap = 0x01(仅 MEA),只上报原始浓度数值。
带等级指示的传感器:FeatureMap = 0x0F(MEA + LEV + MED + CRI),除数值外还提供分级评估。
全功能传感器:FeatureMap = 0x3F(全部 6 个 Feature),支持数值、等级、峰值和均值。

MEA 和 LEV 至少要有一个

规范要求设备至少支持 MEA(数值测量)或 LEV(等级指示)其中一个。 如果两者都没有,这个 Cluster 就没有任何可读取的测量数据,不符合规范。 App 端应在读取 FeatureMap 后做好兼容 —— 不要假设设备一定有 MeasuredValue。

属性总览

浓度测量 Cluster 的属性较多,但大部分受 Feature 控制。核心属性是 MeasuredValue(需要 MEA)和 LevelValue(需要 LEV)。 点击属性 ID 可跳转到详细说明。

ID 名称 类型 读写 Feature 说明
0x0000 MeasuredValue float 只读 MEA 当前 PM2.5 浓度,Nullable
0x0001 MinMeasuredValue float 只读 MEA 传感器可测最低浓度,Nullable
0x0002 MaxMeasuredValue float 只读 MEA 传感器可测最高浓度,Nullable
0x0003 PeakMeasuredValue float 只读 PEA 窗口期内的峰值浓度,Nullable
0x0004 PeakMeasuredValueWindow uint32 只读 PEA 峰值统计窗口时长(秒)
0x0005 AverageMeasuredValue float 只读 AVG 窗口期内的平均浓度,Nullable
0x0006 AverageMeasuredValueWindow uint32 只读 AVG 均值统计窗口时长(秒)
0x0007 Uncertainty float 只读 MEA 测量不确定度
0x0008 MeasurementUnit enum8 只读 MEA 测量单位(PM2.5 通常为 UGM3)
0x0009 MeasurementMedium enum8 只读 — 测量介质(PM2.5 固定为 Air)
0x000A LevelValue enum8 只读 LEV 浓度等级(Low / Medium / High / Critical)

属性详解

MeasuredValue(当前 PM2.5 浓度)

传感器最近一次测量到的 PM2.5 浓度值。这是整个 Cluster 最核心的属性,App 端展示空气质量主要依赖它。

  • 类型: float(单精度浮点数)
  • 单位: 由 MeasurementUnit 决定,PM2.5 传感器通常使用 UGM3(微克每立方米,μg/m³)
  • Nullable: 为 null 时表示传感器数据无效或尚未完成测量
  • Feature: 需要 MEA
常见值速查

5.0 = 优秀  |  12.0 = AQI「优」上限  |  25.0 = 轻度污染  |  55.0 = 中度污染  |  150.0 = 重度污染  |  250.0+ = 严重污染

MinMeasuredValue(可测最低浓度)

传感器能够测量的最低浓度值。大多数 PM2.5 传感器的下限为 0.0。

  • 类型: float,Nullable
  • Feature: 需要 MEA
  • Nullable: 为 null 时表示设备未定义下限

MaxMeasuredValue(可测最高浓度)

传感器能够测量的最高浓度值。常见的消费级 PM2.5 传感器上限通常在 500 ~ 1000 μg/m³ 之间。 当 MeasuredValue 接近此上限时,说明空气质量极差,传感器可能也接近饱和。

  • 类型: float,Nullable
  • Feature: 需要 MEA
  • Nullable: 为 null 时表示设备未定义上限

PeakMeasuredValue(峰值浓度)

在 PeakMeasuredValueWindow 指定的时间窗口内,传感器测量到的最高浓度值。 有助于发现短时间内的空气质量恶化事件(如做饭、吸烟产生的瞬时高浓度)。

  • 类型: float,Nullable
  • Feature: 需要 PEA

PeakMeasuredValueWindow(峰值窗口)

峰值统计的时间窗口,单位为秒。例如值为 3600,表示 PeakMeasuredValue 是最近 1 小时内的最高值。

  • 类型: uint32(elapsed-s,经过秒数)
  • Feature: 需要 PEA
  • 默认: 由设备厂商决定

AverageMeasuredValue(平均浓度)

在 AverageMeasuredValueWindow 指定的时间窗口内的平均浓度值。 适合用于判断长时间的空气质量趋势,比瞬时值更稳定。

  • 类型: float,Nullable
  • Feature: 需要 AVG

AverageMeasuredValueWindow(均值窗口)

均值统计的时间窗口,单位为秒。例如值为 86400,表示 AverageMeasuredValue 是最近 24 小时的平均值。

  • 类型: uint32(elapsed-s,经过秒数)
  • Feature: 需要 AVG

Uncertainty(测量不确定度)

传感器的测量不确定度,与 MeasuredValue 使用相同单位。 例如值为 2.0,表示实际浓度在 MeasuredValue ± 2.0 μg/m³ 范围内。 做阈值判断时应将不确定度纳入考量。

  • 类型: float
  • Feature: 需要 MEA(可选属性)

MeasurementUnit(测量单位)

表示 MeasuredValue 及相关浓度属性使用的单位。PM2.5 传感器几乎都使用 UGM3(μg/m³)。 该属性在设备整个生命周期中固定不变。

  • 类型: MeasurementUnitEnum(见下方枚举)
  • Feature: 需要 MEA

MeasurementMedium(测量介质)

表示传感器测量的目标介质。对于 PM2.5 传感器,该值固定为 Air(空气)。 这个属性在浓度测量家族中是通用的 —— 一些水质传感器会使用 Water。

  • 类型: MeasurementMediumEnum(见下方枚举)
  • Feature: 无要求(所有设备都可有)

LevelValue(浓度等级)

设备对当前浓度的分级评估。不同厂商的分级阈值可能不同,但枚举值是统一的。 支持 LEV Feature 时必须提供此属性。 适合在 UI 上用颜色标签展示空气质量(绿 / 黄 / 橙 / 红)。

  • 类型: LevelValueEnum(见下方枚举)
  • Feature: 需要 LEV

命令

Pm25ConcentrationMeasurement 是一个纯只读的 Server Cluster,没有任何命令。 设备负责采集浓度数据并更新属性,App 端只需读取(Read)或订阅(Subscribe)即可获取数据。

枚举定义

以下三组枚举是所有浓度测量 Cluster 共享的 —— CO2、PM2.5、PM10、甲醛、TVOC 等 Cluster 使用完全相同的枚举定义。

MeasurementUnitEnum(测量单位)

0
PPM 百万分之一(parts per million)
1
PPB 十亿分之一(parts per billion)
2
PPT 万亿分之一(parts per trillion)
3
MGM3 毫克每立方米(mg/m³)
4
UGM3 微克每立方米(μg/m³)—— PM2.5 最常用单位
5
NGM3 纳克每立方米(ng/m³)
6
PM3 每立方米颗粒数(particles/m³)
7
BQM3 贝克勒尔每立方米(Bq/m³,用于放射性气体如氡)
PM2.5 的标准单位

全球各国的 PM2.5 标准(AQI、WHO 指南)都以 μg/m³ 为单位。 读取 PM2.5 传感器时,MeasurementUnit 应为 4 (UGM3)。 如果遇到其他单位,需要先做单位换算再进行 AQI 判定。

MeasurementMediumEnum(测量介质)

0
Air 空气 —— PM2.5 传感器固定使用此值
1
Water 水(用于水质传感器)
2
Soil 土壤(用于土壤传感器)

LevelValueEnum(浓度等级)

0
Unknown 未知 —— 传感器尚未完成评估或数据无效
1
Low 低 —— 空气质量良好,PM2.5 浓度处于安全范围
2
Medium 中等 —— 空气质量一般(需要 MED Feature)
3
High 高 —— 空气质量差,敏感人群应减少户外活动
4
Critical 危险 —— 空气严重污染,所有人应避免户外活动(需要 CRI Feature)

PM2.5 与 AQI 对照表

PM2.5 浓度是计算 AQI(空气质量指数) 的核心指标之一。 以下是美国 EPA 标准(24 小时平均)的 PM2.5 浓度与 AQI 等级对照,也是全球最常用的参考标准:

PM2.5(μg/m³) AQI 范围 等级 健康影响 建议颜色
0 ~ 12.0 0 ~ 50 优(Good) 空气质量令人满意,基本无健康风险 ■ 绿色
12.1 ~ 35.4 51 ~ 100 良(Moderate) 可以接受,极少数敏感人群可能受影响 ■ 黄色
35.5 ~ 55.4 101 ~ 150 敏感人群不健康 老人、儿童、呼吸系统疾病患者应减少户外活动 ■ 橙色
55.5 ~ 150.4 151 ~ 200 不健康(Unhealthy) 所有人开始受影响,敏感人群应避免户外 ■ 红色
150.5 ~ 250.4 201 ~ 300 非常不健康 健康警报,所有人应减少户外活动 ■ 紫色
250.5+ 301+ 危险(Hazardous) 紧急状况,所有人应避免任何户外活动 ■ 褐红色
WHO 2021 新标准更严格

世界卫生组织 2021 年修订的空气质量指南将 PM2.5 年均限值从 10 μg/m³ 降至 5 μg/m³, 24 小时均值限值从 25 μg/m³ 降至 15 μg/m³。 中国国标(GB 3095-2012)的 24 小时均值二级标准为 75 μg/m³,年均为 35 μg/m³。 App 在展示空气质量等级时,建议标注所参照的标准体系。

示例数据

读取一个室内空气质量传感器的 Pm25ConcentrationMeasurement Cluster 属性(PM2.5 约 25 μg/m³):

{
  // --- Pm25ConcentrationMeasurement Cluster(Endpoint 1)---
  // 场景:室内空气质量传感器,当前 PM2.5 约 25 μg/m³

  "0x0000": 25.0,         // MeasuredValue = 25.0 μg/m³(当前浓度)
  "0x0001": 0.0,          // MinMeasuredValue = 0.0 μg/m³
  "0x0002": 500.0,        // MaxMeasuredValue = 500.0 μg/m³
  "0x0003": 28.0,         // PeakMeasuredValue = 28.0 μg/m³(峰值)
  "0x0005": 22.5,         // AverageMeasuredValue = 22.5 μg/m³(均值)
  "0x0007": 2.0,          // Uncertainty = 2.0(测量不确定度 ±2 μg/m³)
  "0x0008": 4,            // MeasurementUnit = UGM3(微克每立方米)
  "0x0009": 0,            // MeasurementMedium = Air(空气)
  "0x000A": 1             // LevelValue = Low(浓度等级:低)
}

读取请求示例 —— 一次性获取 Cluster 全部属性:

{
  // 读取 PM2.5 传感器的所有属性
  "readRequests": [{
    "attributePath": {
      "endpointId": 1,
      "clusterId": "0x042A"
      // 不指定 attributeId → 读取该 Cluster 全部属性
    }
  }]
}

订阅 PM2.5 浓度变化 —— 实时跟踪空气质量:

{
  // 订阅 PM2.5 浓度变化(每 30 秒~5 分钟上报一次)
  "subscribeRequests": [{
    "attributePath": {
      "endpointId": 1,
      "clusterId": "0x042A",
      "attributeId": "0x0000"      // MeasuredValue
    },
    "minIntervalFloor": 30,        // 最少 30 秒上报一次
    "maxIntervalCeiling": 300      // 最多 5 分钟上报一次
  }]
}
数据处理代码参考

读取 PM2.5 浓度并映射到 AQI 等级的关键逻辑:

{`// 设备返回 MeasuredValue = 25.0 (μg/m³)
val rawValue: Float? = 25.0f    // Nullable,可能为 null
val pm25 = rawValue ?: run {
    // null → 传感器数据无效,展示「--」
    showPlaceholder(); return
}

// 映射到 AQI 等级
val aqiLevel = when {
    pm25 <= 12.0f  -> "优"      // 绿色
    pm25 <= 35.4f  -> "良"      // 黄色
    pm25 <= 55.4f  -> "敏感"    // 橙色
    pm25 <= 150.4f -> "不健康"  // 红色
    pm25 <= 250.4f -> "很差"    // 紫色
    else           -> "危险"    // 褐红色
}

// 也可以直接使用设备的 LevelValue(如果支持 LEV Feature)
val level: Int? = readAttribute(0x000A)  // LevelValueEnum`}

常见场景

场景 1:空气净化器自动模式

空气净化器内置 PM2.5 传感器,根据浓度自动调节风速和工作模式。

  1. 订阅 MeasuredValue (0x0000),设置较短的上报间隔(如 10 ~ 60 秒),以便快速响应空气质量变化
  2. 根据浓度区间自动调节净化器风速:
    • < 12 μg/m³:低速或睡眠模式
    • 12 ~ 35 μg/m³:中速
    • 35 ~ 55 μg/m³:高速
    • > 55 μg/m³:最大风力
  3. 读取 Uncertainty (0x0007),在阈值附近增加迟滞区间,避免净化器在两个档位之间频繁切换
  4. 如果设备支持 AVG Feature,可以结合 AverageMeasuredValue (0x0005) 进行趋势判断 —— 均值持续下降时提前降速,节省能耗
场景 2:户外空气质量面板

智能家居面板或 App 展示室外空气质量,帮助用户决定是否开窗通风。

  1. 订阅室外 PM2.5 传感器的 MeasuredValue (0x0000)
  2. 先检查 MeasurementUnit (0x0008),确认单位为 UGM3,否则需要做单位换算后再进行 AQI 映射
  3. 将浓度值映射到 AQI 等级,在 UI 上用对应颜色(绿 / 黄 / 橙 / 红 / 紫 / 褐红)展示
  4. 如果设备支持 LEV Feature,也可以直接使用 LevelValue (0x000A) 做粗略分级展示,省去自行计算
  5. 如果设备支持 PEA Feature,展示 PeakMeasuredValue (0x0003) 作为今日峰值,让用户了解一天中最差的时段
  6. 联动建议:PM2.5 < 35 μg/m³ 时提示「适合开窗」,> 75 μg/m³ 时提示「建议关窗并开启净化器」
场景 3:健康预警与自动化联动

为敏感人群(老人、儿童、呼吸系统疾病患者)设置 PM2.5 健康预警,自动触发保护措施。

  1. 订阅 MeasuredValue (0x0000) 和 LevelValue (0x000A)(如果支持 LEV Feature)
  2. 设定多级预警阈值:
    • 提醒:PM2.5 > 35 μg/m³ → 推送通知「空气质量转差,敏感人群注意」
    • 警告:PM2.5 > 55 μg/m³ → 自动关闭新风系统外循环、关闭窗户
    • 紧急:PM2.5 > 150 μg/m³ → 自动开启全部净化器至最大风力,推送紧急通知
  3. 加入防抖逻辑 —— 要求连续 3 次采样(如每 30 秒一次,即至少 1.5 分钟)都超过阈值才触发,避免瞬间波动产生误报
  4. 将 Uncertainty (0x0007) 纳入阈值计算:如果不确定度为 ±2 μg/m³,阈值 35 的实际触发点应为 37
  5. 预警消除也需要迟滞 —— 例如触发阈值 55,消除阈值设为 45,避免在分界线反复告警