Pm25ConcentrationMeasurement Cluster

Cluster ID: 0x042A  |  Endpoint: Typically on Endpoint 1+ (application endpoint)

Pm25ConcentrationMeasurement measures PM2.5 (fine particulate matter) concentration in the air. PM2.5 refers to particles with a diameter of 2.5 micrometers or less that can penetrate deep into the lungs, making it one of the most critical indicators of air quality. Commonly found in air quality sensors, air purifiers, fresh air systems, and smart environment panels. The device acts as a Server and passively reports concentration data; the App (Client) simply reads or subscribes.

Concentration Measurement Cluster Family

Matter defines a group of structurally identical "Concentration Measurement" Clusters, including CO2 (0x040D), PM2.5 (0x042A), PM10 (0x042D), Formaldehyde (0x042B), TVOC (0x042E), etc. They share the same attribute set, Feature Map, enum definitions, and behavioral model — only the target substance differs. Master one, and you've mastered the entire family. This page uses PM2.5 as an example to explain this shared pattern.

Feature Bitmap

Pm25ConcentrationMeasurement declares its supported capabilities via FeatureMap (0xFFFC). Features determine which attributes are available — for example, a device without the PEA Feature will not report peak data. All Concentration Measurement Clusters share identical Feature definitions.

Bit 0
MEA (NumericMeasurement) Numeric Measurement — enables MeasuredValue / MinMeasuredValue / MaxMeasuredValue / Uncertainty attributes
Bit 1
LEV (LevelIndication) Level Indication — enables the LevelValue attribute, mapping concentration to Low / Medium / High / Critical levels
Bit 2
MED (MediumLevel) Medium Level — LevelValue may return Medium (requires LEV Feature)
Bit 3
CRI (CriticalLevel) Critical Level — LevelValue may return Critical (requires LEV Feature)
Bit 4
PEA (PeakMeasurement) Peak Measurement — enables PeakMeasuredValue / PeakMeasuredValueWindow attributes
Bit 5
AVG (AverageMeasurement) Average Measurement — enables AverageMeasuredValue / AverageMeasuredValueWindow attributes
Feature Combination Examples

Entry-level PM2.5 sensor: FeatureMap = 0x01 (MEA only) — reports raw concentration values only.
Sensor with level indication: FeatureMap = 0x0F (MEA + LEV + MED + CRI) — provides graded assessment in addition to numeric values.
Full-featured sensor: FeatureMap = 0x3F (all 6 Features) — supports numeric values, levels, peak, and average.

At Least One of MEA or LEV Is Required

The specification requires devices to support at least one of MEA (Numeric Measurement) or LEV (Level Indication). Without either, the Cluster has no readable measurement data and is non-compliant. The App should ensure compatibility after reading the FeatureMap — do not assume the device always has MeasuredValue.

Attribute Overview

The Concentration Measurement Cluster has many attributes, but most are controlled by Features. The core attributes are MeasuredValue (requires MEA) and LevelValue (requires LEV). Click an attribute ID to jump to its detailed description.

ID Name Type Access Feature Description
0x0000 MeasuredValue float Read-only MEA Current PM2.5 concentration, Nullable
0x0001 MinMeasuredValue float Read-only MEA Minimum measurable concentration, Nullable
0x0002 MaxMeasuredValue float Read-only MEA Maximum measurable concentration, Nullable
0x0003 PeakMeasuredValue float Read-only PEA Peak concentration within the window, Nullable
0x0004 PeakMeasuredValueWindow uint32 Read-only PEA Peak measurement window duration (seconds)
0x0005 AverageMeasuredValue float Read-only AVG Average concentration within the window, Nullable
0x0006 AverageMeasuredValueWindow uint32 Read-only AVG Average measurement window duration (seconds)
0x0007 Uncertainty float Read-only MEA Measurement uncertainty
0x0008 MeasurementUnit enum8 Read-only MEA Measurement unit (typically UGM3 for PM2.5)
0x0009 MeasurementMedium enum8 Read-only — Measurement medium (fixed to Air for PM2.5)
0x000A LevelValue enum8 Read-only LEV Concentration level (Low / Medium / High / Critical)

Attributes

MeasuredValue (Current PM2.5 Concentration)

The most recent PM2.5 concentration reading from the sensor. This is the most important attribute of the entire Cluster, and the App relies on it primarily for displaying air quality.

  • Type: float (single-precision floating point)
  • Unit: Determined by MeasurementUnit; PM2.5 sensors typically use UGM3 (micrograms per cubic meter, μg/m³)
  • Nullable: null indicates invalid sensor data or that measurement has not yet completed
  • Feature: Requires MEA
Common Values Quick Reference

5.0 = Excellent  |  12.0 = AQI "Good" upper limit  |  25.0 = Light pollution  |  55.0 = Moderate pollution  |  150.0 = Heavy pollution  |  250.0+ = Severe pollution

MinMeasuredValue (Minimum Measurable Concentration)

The lowest concentration the sensor can measure. Most PM2.5 sensors have a lower limit of 0.0.

  • Type: float, Nullable
  • Feature: Requires MEA
  • Nullable: null indicates the device has not defined a lower limit

MaxMeasuredValue (Maximum Measurable Concentration)

The highest concentration the sensor can measure. Consumer-grade PM2.5 sensors typically have an upper limit between 500 ~ 1000 μg/m³. When MeasuredValue approaches this upper limit, it indicates extremely poor air quality and the sensor may also be near saturation.

  • Type: float, Nullable
  • Feature: Requires MEA
  • Nullable: null indicates the device has not defined an upper limit

PeakMeasuredValue (Peak Concentration)

The highest concentration measured by the sensor within the time window specified by PeakMeasuredValueWindow. Useful for detecting short-term air quality deterioration events (such as momentary high concentrations from cooking or smoking).

  • Type: float, Nullable
  • Feature: Requires PEA

PeakMeasuredValueWindow (Peak Measurement Window)

The time window for peak measurement, in seconds. For example, a value of 3600 means PeakMeasuredValue is the maximum over the past 1 hour.

  • Type: uint32 (elapsed-s, elapsed seconds)
  • Feature: Requires PEA
  • Default: Determined by the device manufacturer

AverageMeasuredValue (Average Concentration)

The average concentration value within the time window specified by AverageMeasuredValueWindow. Suitable for assessing long-term air quality trends, more stable than instantaneous values.

  • Type: float, Nullable
  • Feature: Requires AVG

AverageMeasuredValueWindow (Average Measurement Window)

The time window for average measurement, in seconds. For example, a value of 86400 means AverageMeasuredValue is the average over the past 24 hours.

  • Type: uint32 (elapsed-s, elapsed seconds)
  • Feature: Requires AVG

Uncertainty (Measurement Uncertainty)

The sensor's measurement uncertainty, using the same unit as MeasuredValue. For example, a value of 2.0 means the actual concentration is within the range of MeasuredValue ± 2.0 μg/m³. Uncertainty should be taken into account when making threshold-based decisions.

  • Type: float
  • Feature: Requires MEA (optional attribute)

MeasurementUnit (Measurement Unit)

Indicates the unit used by MeasuredValue and related concentration attributes. PM2.5 sensors almost always use UGM3 (μg/m³). This attribute remains fixed throughout the device's lifetime.

  • Type: MeasurementUnitEnum (see enum below)
  • Feature: Requires MEA

MeasurementMedium (Measurement Medium)

Indicates the target medium the sensor measures. For PM2.5 sensors, this value is fixed at Air. This attribute is common across the Concentration Measurement family — some water quality sensors use Water.

  • Type: MeasurementMediumEnum (see enum below)
  • Feature: No requirement (available on all devices)

LevelValue (Concentration Level)

The device's graded assessment of the current concentration. Different manufacturers may use different grading thresholds, but the enum values are standardized. This attribute is mandatory when the LEV Feature is supported. Suitable for displaying air quality with color labels in the UI (green / yellow / orange / red).

  • Type: LevelValueEnum (see enum below)
  • Feature: Requires LEV

Commands

Pm25ConcentrationMeasurement is a read-only Server Cluster with no commands. The device is responsible for collecting concentration data and updating attributes; the App only needs to Read or Subscribe to obtain data.

Enum Definitions

The following three enum groups are shared by all Concentration Measurement Clusters — CO2, PM2.5, PM10, Formaldehyde, TVOC, and other Clusters all use identical enum definitions.

MeasurementUnitEnum (Measurement Unit)

0
PPM Parts per million
1
PPB Parts per billion
2
PPT Parts per trillion
3
MGM3 Milligrams per cubic meter (mg/m³)
4
UGM3 Micrograms per cubic meter (μg/m³) — most common unit for PM2.5
5
NGM3 Nanograms per cubic meter (ng/m³)
6
PM3 Particles per cubic meter (particles/m³)
7
BQM3 Becquerels per cubic meter (Bq/m³, for radioactive gases such as radon)
Standard Unit for PM2.5

PM2.5 standards worldwide (AQI, WHO guidelines) all use μg/m³ as the unit. When reading a PM2.5 sensor, MeasurementUnit should be 4 (UGM3). If a different unit is encountered, unit conversion must be performed before AQI assessment.

MeasurementMediumEnum (Measurement Medium)

0
Air Air — fixed value for PM2.5 sensors
1
Water Water (for water quality sensors)
2
Soil Soil (for soil sensors)

LevelValueEnum (Concentration Level)

0
Unknown Unknown — sensor has not yet completed assessment or data is invalid
1
Low Low — good air quality, PM2.5 concentration within safe range
2
Medium Medium — moderate air quality (requires MED Feature)
3
High High — poor air quality, sensitive groups should reduce outdoor activities
4
Critical Critical — severely polluted air, everyone should avoid outdoor activities (requires CRI Feature)

PM2.5 and AQI Reference Table

PM2.5 concentration is one of the core indicators for calculating the AQI (Air Quality Index). The following is the US EPA standard (24-hour average) PM2.5 concentration to AQI level mapping, which is the most commonly used reference worldwide:

PM2.5 (μg/m³) AQI Range Level Health Impact Suggested Color
0 ~ 12.0 0 ~ 50 Good Air quality is satisfactory, essentially no health risk ■ Green
12.1 ~ 35.4 51 ~ 100 Moderate Acceptable; very few sensitive individuals may be affected ■ Yellow
35.5 ~ 55.4 101 ~ 150 Unhealthy for Sensitive Groups The elderly, children, and people with respiratory conditions should reduce outdoor activities ■ Orange
55.5 ~ 150.4 151 ~ 200 Unhealthy Everyone begins to be affected; sensitive groups should avoid outdoor activities ■ Red
150.5 ~ 250.4 201 ~ 300 Very Unhealthy Health alert; everyone should reduce outdoor activities ■ Purple
250.5+ 301+ Hazardous Emergency conditions; everyone should avoid all outdoor activities ■ Maroon
WHO 2021 Guidelines Are Stricter

The World Health Organization's 2021 revised Air Quality Guidelines lowered the PM2.5 annual average limit from 10 μg/m³ to 5 μg/m³, and the 24-hour average limit from 25 μg/m³ to 15 μg/m³. China's national standard (GB 3095-2012) sets the 24-hour average Grade II limit at 75 μg/m³ and the annual average at 35 μg/m³. When displaying air quality levels, the App should indicate which standard system is being referenced.

Example Data

Reading Pm25ConcentrationMeasurement Cluster attributes from an indoor air quality sensor (PM2.5 approximately 25 μg/m³):

{
  // --- Pm25ConcentrationMeasurement Cluster (Endpoint 1) ---
  // Scenario: Indoor air quality sensor, current PM2.5 approximately 25 μg/m³

  "0x0000": 25.0,         // MeasuredValue = 25.0 μg/m³ (current concentration)
  "0x0001": 0.0,          // MinMeasuredValue = 0.0 μg/m³
  "0x0002": 500.0,        // MaxMeasuredValue = 500.0 μg/m³
  "0x0003": 28.0,         // PeakMeasuredValue = 28.0 μg/m³ (peak)
  "0x0005": 22.5,         // AverageMeasuredValue = 22.5 μg/m³ (average)
  "0x0007": 2.0,          // Uncertainty = 2.0 (measurement uncertainty ±2 μg/m³)
  "0x0008": 4,            // MeasurementUnit = UGM3 (micrograms per cubic meter)
  "0x0009": 0,            // MeasurementMedium = Air
  "0x000A": 1             // LevelValue = Low (concentration level: low)
}

Read request example — read all Cluster attributes at once:

{
  // Read all attributes from the PM2.5 sensor
  "readRequests": [{
    "attributePath": {
      "endpointId": 1,
      "clusterId": "0x042A"
      // No attributeId specified → reads all Cluster attributes
    }
  }]
}

Subscribe to PM2.5 concentration changes — track air quality in real time:

{
  // Subscribe to PM2.5 concentration changes (reports every 30 seconds to 5 minutes)
  "subscribeRequests": [{
    "attributePath": {
      "endpointId": 1,
      "clusterId": "0x042A",
      "attributeId": "0x0000"      // MeasuredValue
    },
    "minIntervalFloor": 30,        // Report at least every 30 seconds
    "maxIntervalCeiling": 300      // Report at most every 5 minutes
  }]
}
Data Processing Code Reference

Key logic for reading PM2.5 concentration and mapping it to an AQI level:

{`// Device returns MeasuredValue = 25.0 (μg/m³)
val rawValue: Float? = 25.0f    // Nullable, may be null
val pm25 = rawValue ?: run {
    // null → sensor data invalid, show "--"
    showPlaceholder(); return
}

// Map to AQI level
val aqiLevel = when {
    pm25 <= 12.0f  -> "Good"                        // Green
    pm25 <= 35.4f  -> "Moderate"                     // Yellow
    pm25 <= 55.4f  -> "Unhealthy for Sensitive"      // Orange
    pm25 <= 150.4f -> "Unhealthy"                    // Red
    pm25 <= 250.4f -> "Very Unhealthy"               // Purple
    else           -> "Hazardous"                    // Maroon
}

// Can also use the device's LevelValue directly (if LEV Feature is supported)
val level: Int? = readAttribute(0x000A)  // LevelValueEnum`}

Common Scenarios

Scenario 1: Air Purifier Auto Mode

An air purifier with a built-in PM2.5 sensor automatically adjusts fan speed and operating mode based on concentration.

  1. Subscribe to MeasuredValue (0x0000) with a short reporting interval (e.g., 10 ~ 60 seconds) to respond quickly to air quality changes
  2. Automatically adjust purifier fan speed based on concentration ranges:
    • < 12 μg/m³: Low speed or sleep mode
    • 12 ~ 35 μg/m³: Medium speed
    • 35 ~ 55 μg/m³: High speed
    • > 55 μg/m³: Maximum power
  3. Read Uncertainty (0x0007) and add a hysteresis zone around thresholds to prevent the purifier from frequently switching between two speed levels
  4. If the device supports the AVG Feature, combine with AverageMeasuredValue (0x0005) for trend analysis — reduce speed proactively when the average is continuously declining to save energy
Scenario 2: Outdoor Air Quality Panel

A smart home panel or App displays outdoor air quality to help users decide whether to open windows for ventilation.

  1. Subscribe to the outdoor PM2.5 sensor's MeasuredValue (0x0000)
  2. First check MeasurementUnit (0x0008) to confirm the unit is UGM3; otherwise, perform unit conversion before AQI mapping
  3. Map the concentration value to an AQI level and display with the corresponding color in the UI (green / yellow / orange / red / purple / maroon)
  4. If the device supports the LEV Feature, you can also use LevelValue (0x000A) directly for a rough level display, avoiding manual calculation
  5. If the device supports the PEA Feature, display PeakMeasuredValue (0x0003) as today's peak to show the user the worst period of the day
  6. Linked suggestions: When PM2.5 < 35 μg/m³, suggest "Good time to open windows"; when > 75 μg/m³, suggest "Close windows and turn on the purifier"
Scenario 3: Health Alerts and Automation Linkage

Set up PM2.5 health alerts for sensitive groups (elderly, children, people with respiratory conditions) and automatically trigger protective measures.

  1. Subscribe to MeasuredValue (0x0000) and LevelValue (0x000A) (if LEV Feature is supported)
  2. Set multi-level alert thresholds:
    • Notice: PM2.5 > 35 μg/m³ → Push notification "Air quality deteriorating, sensitive groups take note"
    • Warning: PM2.5 > 55 μg/m³ → Automatically close the fresh air system's outside air intake and close windows
    • Emergency: PM2.5 > 150 μg/m³ → Automatically turn all purifiers to maximum power and push an emergency notification
  3. Add debounce logic — require 3 consecutive samples (e.g., every 30 seconds, meaning at least 1.5 minutes) to exceed the threshold before triggering, to avoid false alarms from momentary fluctuations
  4. Factor Uncertainty (0x0007) into threshold calculations: if uncertainty is ±2 μg/m³, the actual trigger point for a threshold of 35 should be 37
  5. Alert clearance also needs hysteresis — e.g., if the trigger threshold is 55, set the clearance threshold at 45 to avoid repeated alerts near the boundary