CO2 浓度测量 Cluster(CarbonDioxideConcentrationMeasurement)

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

CarbonDioxideConcentrationMeasurement 用于报告空气中 CO2(二氧化碳)浓度,是室内空气质量监测的核心 Cluster。 这是一个纯只读的 Server Cluster —— 没有任何命令,设备被动采集数据,App 端读取或订阅即可。

浓度测量 Cluster 家族 —— 通用模板

Matter 中所有浓度测量 Cluster 共享完全相同的属性集和 Feature Map 结构,仅 Cluster ID 不同。 CO2 是其中最常见的一个,本页文档同样适用于以下 Cluster:

  • CarbonMonoxideConcentrationMeasurement(0x040C)—— 一氧化碳
  • NitrogenDioxideConcentrationMeasurement(0x0413)—— 二氧化氮
  • OzoneConcentrationMeasurement(0x0415)—— 臭氧
  • FormaldehydeConcentrationMeasurement(0x042B)—— 甲醛
  • PM1ConcentrationMeasurement(0x042C)—— PM1
  • PM25ConcentrationMeasurement(0x042A)—— PM2.5
  • PM10ConcentrationMeasurement(0x042D)—— PM10
  • RadonConcentrationMeasurement(0x042F)—— 氡
  • TotalVolatileOrganicCompoundsConcentrationMeasurement(0x042E)—— TVOC

区别只在于被测物质和典型数值范围。理解了 CO2 的结构,其他浓度 Cluster 可以直接套用。

Feature 位图

浓度测量 Cluster 通过 FeatureMap(0xFFFC)声明设备支持哪些测量能力。 Feature 直接决定了哪些属性可用 —— 必须先读取 FeatureMap,再决定 UI 展示哪些数据。

Bit 0
MEA(Numeric Measurement) 数值测量 —— 支持 MeasuredValue / Min / Max / Uncertainty / MeasurementUnit / MeasurementMedium
Bit 1
LEV(Level Indication) 等级指示 —— 支持 LevelValue(Low / Medium / High / Critical),不提供精确数值
Bit 2
MED(Medium Level) 中等等级 —— 需要 LEV,LevelValue 可返回 Medium
Bit 3
CRI(Critical Level) 危险等级 —— 需要 LEV,LevelValue 可返回 Critical
Bit 4
PEA(Peak Measurement) 峰值测量 —— 需要 MEA,支持 PeakMeasuredValue / PeakMeasuredValueWindow
Bit 5
AVG(Average Measurement) 均值测量 —— 需要 MEA,支持 AverageMeasuredValue / AverageMeasuredValueWindow
Feature 依赖关系

MED 和 CRI 都依赖 LEV —— 没有 LEV 就不会有 Medium 或 Critical 等级。
PEA 和 AVG 都依赖 MEA —— 峰值和均值的前提是设备能提供精确数值。
MEA 和 LEV 至少要支持一个,否则这个 Cluster 什么数据都报不出来。

Feature 组合示例

低端 CO2 传感器:FeatureMap = 0x01(仅 MEA),只报数值,没有等级判定。
中端空气质量面板:FeatureMap = 0x07(MEA + LEV + MED),有数值也有等级。
高端室内环境监测:FeatureMap = 0x3F(全部 6 个 Feature),数值 + 等级 + 峰值 + 均值。

属性总览

所有属性都是只读的,分为四组。Feature 列标注了该属性需要哪个 Feature 才会存在。 点击属性 ID 可跳转到详细说明。

数值测量(MEA Feature)

ID 名称 类型 Feature 说明
0x00 MeasuredValue float MEA 当前浓度,Nullable
0x01 MinMeasuredValue float MEA 传感器可测最低浓度,Nullable
0x02 MaxMeasuredValue float MEA 传感器可测最高浓度,Nullable
0x07 Uncertainty float MEA 测量不确定度
0x08 MeasurementUnit enum8 MEA 测量单位(PPM / PPB 等)
0x09 MeasurementMedium enum8 MEA 测量介质(空气 / 水 / 土壤)

峰值与均值测量

ID 名称 类型 Feature 说明
0x03 PeakMeasuredValue float PEA 窗口期内的峰值浓度,Nullable
0x04 PeakMeasuredValueWindow uint32 PEA 峰值统计窗口(秒)
0x05 AverageMeasuredValue float AVG 窗口期内的平均浓度,Nullable
0x06 AverageMeasuredValueWindow uint32 AVG 均值统计窗口(秒)

等级指示(LEV Feature)

ID 名称 类型 Feature 说明
0x0A LevelValue enum8 LEV 当前浓度等级(Low / Medium / High / Critical)

属性详解

MeasuredValue(当前浓度)

传感器最近一次测量到的 CO2 浓度值。这是整个 Cluster 最核心的属性。 与温度 Cluster 不同,浓度 Cluster 使用 float 类型,值就是实际浓度,不需要换算。

  • 类型: float(单精度浮点数)
  • 单位: 由 MeasurementUnit 属性决定(通常是 PPM)
  • Nullable: 为 null 时表示传感器数据无效或尚未完成首次测量
  • Feature: MEA
CO2 浓度参考值

400 ppm = 室外新鲜空气  |  600~800 ppm = 通风良好的室内  |  1000~1500 ppm = 需要开窗通风  |  2000+ ppm = 明显不适,必须换气  |  5000 ppm = 职业安全上限

MinMeasuredValue(可测最低浓度)

传感器能够测量的最低浓度值。App 可以用它来设置显示范围的下限。 对于 CO2 传感器,通常是 400 ppm(大气本底浓度)。

  • 类型: float,Nullable
  • Feature: MEA

MaxMeasuredValue(可测最高浓度)

传感器能够测量的最高浓度值。当 MeasuredValue 接近此上限时, 可能意味着传感器已超出正常工作范围。对于 CO2 传感器,常见上限是 5000 或 10000 ppm。

  • 类型: float,Nullable
  • Feature: MEA

PeakMeasuredValue(峰值浓度)

在 PeakMeasuredValueWindow 指定的时间窗口内,传感器记录到的最高浓度值。 用于追踪「最近 24 小时内最差的空气质量发生在什么浓度」。

  • 类型: float,Nullable
  • Feature: PEA(依赖 MEA)

PeakMeasuredValueWindow(峰值统计窗口)

PeakMeasuredValue 的统计时间窗口,单位秒。例如 86400 表示峰值是过去 24 小时内的最大值。 窗口到期后,PeakMeasuredValue 会重置并重新统计。

  • 类型: elapsed-s(uint32,经过的秒数)
  • Feature: PEA

AverageMeasuredValue(平均浓度)

在 AverageMeasuredValueWindow 指定的时间窗口内,浓度的算术平均值。 均值比实时值更稳定,适合用于趋势分析和空气质量评分。

  • 类型: float,Nullable
  • Feature: AVG(依赖 MEA)

AverageMeasuredValueWindow(均值统计窗口)

AverageMeasuredValue 的统计时间窗口,单位秒。例如 3600 表示平均值是过去 1 小时的均值。

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

Uncertainty(测量不确定度)

传感器的测量精度,单位与 MeasurementUnit 一致。 例如值为 15.0 且单位是 PPM,表示测量精度为 ±15 ppm。 做浓度阈值触发自动化时,应将不确定度纳入考量。

  • 类型: float
  • Feature: MEA

MeasurementUnit(测量单位)

声明 MeasuredValue 等数值属性使用的计量单位。 对于 CO2 传感器,绝大多数使用 PPM(百万分之一)。 详细枚举值见下方 MeasurementUnitEnum。

  • 类型: enum8
  • Feature: MEA

MeasurementMedium(测量介质)

声明传感器测量的是哪种介质中的浓度。CO2 传感器几乎都是 Air(空气), 但浓度测量 Cluster 家族还涵盖水质监测(Water)和土壤监测(Soil)等场景。 详细枚举值见下方 MeasurementMediumEnum。

  • 类型: enum8
  • Feature: MEA

LevelValue(浓度等级)

设备自行判定的当前浓度等级。适用于不需要精确数值的场景 —— 比如简单的红绿灯指示。 注意:如果设备没有 MED Feature,LevelValue 不会返回 Medium; 没有 CRI Feature,不会返回 Critical。 详细枚举值见下方 LevelValueEnum。

  • 类型: enum8
  • Feature: LEV

命令

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

枚举值速查

MeasurementUnitEnum(测量单位)

0
PPM 百万分之一(CO2 传感器最常用)
1
PPB 十亿分之一(超低浓度气体)
2
PPT 万亿分之一(痕量分析)
3
MGM3 毫克/立方米(mg/m³)
4
UGM3 微克/立方米(μg/m³,PM2.5 常用)
5
NGM3 纳克/立方米(ng/m³)
6
PM3 颗粒数/立方米(p/m³,颗粒物计数)
7
BQM3 贝克勒尔/立方米(Bq/m³,放射性氡气)

MeasurementMediumEnum(测量介质)

0
Air 空气(CO2、PM2.5 等气体/颗粒物传感器)
1
Water 水(水质监测、溶解氧等场景)
2
Soil 土壤(农业、环境监测场景)

LevelValueEnum(浓度等级)

0
Unknown 未知(传感器尚未完成判定)
1
Low 低浓度(空气质量良好)
2
Medium 中等浓度(需要 MED Feature)
3
High 高浓度(建议改善通风)
4
Critical 危险浓度(需要 CRI Feature,立即处理)

示例数据

读取一个室内 CO2 传感器的全部属性(典型室内环境,约 800 ppm):

{
  // --- CarbonDioxideConcentrationMeasurement Cluster(Endpoint 1)---

  // 数值测量(MEA Feature)
  "0x00": 823.5,          // MeasuredValue = 823.5 ppm(当前 CO2 浓度)
  "0x01": 400.0,          // MinMeasuredValue = 400 ppm(传感器下限)
  "0x02": 5000.0,         // MaxMeasuredValue = 5000 ppm(传感器上限)
  "0x07": 15.0,           // Uncertainty = ±15 ppm

  // 测量单位与介质(MEA Feature)
  "0x08": 0,              // MeasurementUnit = PPM
  "0x09": 0,              // MeasurementMedium = Air(空气)

  // 峰值测量(PEA Feature)
  "0x03": 1250.0,         // PeakMeasuredValue = 1250 ppm(历史峰值)
  "0x04": 86400,          // PeakMeasuredValueWindow = 86400 秒(24 小时窗口)

  // 均值测量(AVG Feature)
  "0x05": 680.5,          // AverageMeasuredValue = 680.5 ppm(平均值)
  "0x06": 3600,           // AverageMeasuredValueWindow = 3600 秒(1 小时窗口)

  // 等级指示(LEV Feature)
  "0x0A": 2               // LevelValue = Medium(中等)
}

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

{
  // 一次性读取 CO2 Cluster 全部属性
  "readRequests": [{
    "attributePath": {
      "endpointId": 1,
      "clusterId": "0x040D"
      // 不指定 attributeId → 读取全部属性
    }
  }]
}

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

{
  // 订阅 CO2 浓度变化(每 30 秒~5 分钟上报一次)
  "subscribeRequests": [{
    "attributePath": {
      "endpointId": 1,
      "clusterId": "0x040D",
      "attributeId": "0x00"        // MeasuredValue
    },
    "minIntervalFloor": 30,
    "maxIntervalCeiling": 300
  }]
}
与温度测量 Cluster 的差异

温度 Cluster(0x0402)使用 int16 类型,值以 0.01°C 为单位,需要除以 100 转换。 浓度 Cluster 使用 float 类型,值直接就是实际浓度,不需要任何换算。 但必须读取 MeasurementUnit 确认单位是 PPM 还是其他。

常见场景

场景 1:新风系统自动通风控制

根据 CO2 浓度自动调节新风系统的风量,维持室内空气质量。

  1. 订阅 MeasuredValue (0x00),设置 30 秒 ~ 2 分钟的上报间隔
  2. 确认 MeasurementUnit (0x08) 为 PPM(不同单位需要不同的阈值)
  3. 设定多级阈值触发通风策略:
    • < 600 ppm:低速或关闭新风
    • 600 ~ 1000 ppm:中速运行
    • > 1000 ppm:全速运行
  4. 考虑 Uncertainty (0x07) 做防抖 —— 如果不确定度是 ±15 ppm,阈值附近加 15 ppm 的滞回区,避免频繁切换
  5. 配合 FanControl Cluster(0x0202)控制新风系统风速
场景 2:空气质量仪表盘

在 App 首页展示室内空气质量综合面板。

  1. 读取 FeatureMap (0xFFFC) 确认设备能力,决定 UI 展示内容
  2. 有 MEA:显示精确数值和量程范围(Min/Max),用渐变色条表示当前位置
  3. 有 LEV:显示等级徽章(Low/Medium/High/Critical),颜色编码直观提示
  4. 有 PEA:显示「今日峰值」卡片,读取 PeakMeasuredValue (0x03) 和窗口时长
  5. 有 AVG:显示「平均值」趋势线,AverageMeasuredValue (0x05) 比实时值更适合做趋势展示
  6. 处理 null 值 —— 展示「--」或「传感器离线」,不要显示 0
场景 3:教室 CO2 监测与告警

学校教室部署 CO2 传感器,浓度过高时通知教师开窗或启动排风。

  1. 订阅 MeasuredValue (0x00) 和 LevelValue (0x0A)(如果设备支持 LEV)
  2. LevelValue 变为 High (3) 或 Critical (4) 时推送告警通知
  3. 如果设备只有 MEA 没有 LEV,App 自行判定:
    • > 1500 ppm:推送「建议开窗通风」
    • > 2500 ppm:推送「CO2 浓度过高,请立即通风」
  4. 利用 AverageMeasuredValue (0x05) 分析每日 CO2 规律 —— 例如下午 2 点课后浓度最高,提前安排通风
  5. 连续多天峰值超标(PeakMeasuredValue > 2000)时,建议检查教室通风系统