PM2.5 浓度测量 Cluster(Pm25ConcentrationMeasurement)
Cluster ID: 0x042A |
所在 Endpoint: 通常在 Endpoint 1+(功能端点)
Pm25ConcentrationMeasurement 用于测量空气中 PM2.5(细颗粒物)的浓度。 PM2.5 是直径小于或等于 2.5 微米的颗粒物,能深入肺泡,是衡量空气质量最关键的指标之一。 常见于空气质量传感器、空气净化器、新风系统、智能环境面板等设备。 设备作为 Server 角色被动上报浓度数据,App(Client)读取或订阅即可。
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 定义完全相同。
入门级 PM2.5 传感器:FeatureMap = 0x01(仅 MEA),只上报原始浓度数值。
带等级指示的传感器:FeatureMap = 0x0F(MEA + LEV + MED + CRI),除数值外还提供分级评估。
全功能传感器:FeatureMap = 0x3F(全部 6 个 Feature),支持数值、等级、峰值和均值。
规范要求设备至少支持 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(测量单位)
全球各国的 PM2.5 标准(AQI、WHO 指南)都以 μg/m³ 为单位。
读取 PM2.5 传感器时,MeasurementUnit 应为 4 (UGM3)。
如果遇到其他单位,需要先做单位换算再进行 AQI 判定。
MeasurementMediumEnum(测量介质)
LevelValueEnum(浓度等级)
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) | 紧急状况,所有人应避免任何户外活动 | ■ 褐红色 |
世界卫生组织 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 传感器,根据浓度自动调节风速和工作模式。
- 订阅
MeasuredValue (0x0000),设置较短的上报间隔(如 10 ~ 60 秒),以便快速响应空气质量变化 - 根据浓度区间自动调节净化器风速:
< 12 μg/m³:低速或睡眠模式12 ~ 35 μg/m³:中速35 ~ 55 μg/m³:高速> 55 μg/m³:最大风力
- 读取
Uncertainty (0x0007),在阈值附近增加迟滞区间,避免净化器在两个档位之间频繁切换 - 如果设备支持 AVG Feature,可以结合
AverageMeasuredValue (0x0005)进行趋势判断 —— 均值持续下降时提前降速,节省能耗
场景 2:户外空气质量面板
智能家居面板或 App 展示室外空气质量,帮助用户决定是否开窗通风。
- 订阅室外 PM2.5 传感器的
MeasuredValue (0x0000) - 先检查
MeasurementUnit (0x0008),确认单位为UGM3,否则需要做单位换算后再进行 AQI 映射 - 将浓度值映射到 AQI 等级,在 UI 上用对应颜色(绿 / 黄 / 橙 / 红 / 紫 / 褐红)展示
- 如果设备支持 LEV Feature,也可以直接使用
LevelValue (0x000A)做粗略分级展示,省去自行计算 - 如果设备支持 PEA Feature,展示
PeakMeasuredValue (0x0003)作为今日峰值,让用户了解一天中最差的时段 - 联动建议:PM2.5 < 35 μg/m³ 时提示「适合开窗」,> 75 μg/m³ 时提示「建议关窗并开启净化器」
场景 3:健康预警与自动化联动
为敏感人群(老人、儿童、呼吸系统疾病患者)设置 PM2.5 健康预警,自动触发保护措施。
- 订阅
MeasuredValue (0x0000)和LevelValue (0x000A)(如果支持 LEV Feature) - 设定多级预警阈值:
- 提醒:PM2.5 > 35 μg/m³ → 推送通知「空气质量转差,敏感人群注意」
- 警告:PM2.5 > 55 μg/m³ → 自动关闭新风系统外循环、关闭窗户
- 紧急:PM2.5 > 150 μg/m³ → 自动开启全部净化器至最大风力,推送紧急通知
- 加入防抖逻辑 —— 要求连续 3 次采样(如每 30 秒一次,即至少 1.5 分钟)都超过阈值才触发,避免瞬间波动产生误报
- 将
Uncertainty (0x0007)纳入阈值计算:如果不确定度为 ±2 μg/m³,阈值 35 的实际触发点应为 37 - 预警消除也需要迟滞 —— 例如触发阈值 55,消除阈值设为 45,避免在分界线反复告警