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.
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.
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.
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 useUGM3(micrograms per cubic meter, μg/m³) - Nullable:
nullindicates invalid sensor data or that measurement has not yet completed - Feature: Requires MEA
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:
nullindicates 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:
nullindicates 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)
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)
LevelValueEnum (Concentration Level)
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 |
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
}]
}
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.
- Subscribe to
MeasuredValue (0x0000)with a short reporting interval (e.g., 10 ~ 60 seconds) to respond quickly to air quality changes - Automatically adjust purifier fan speed based on concentration ranges:
< 12 μg/m³: Low speed or sleep mode12 ~ 35 μg/m³: Medium speed35 ~ 55 μg/m³: High speed> 55 μg/m³: Maximum power
- Read
Uncertainty (0x0007)and add a hysteresis zone around thresholds to prevent the purifier from frequently switching between two speed levels - 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.
- Subscribe to the outdoor PM2.5 sensor's
MeasuredValue (0x0000) - First check
MeasurementUnit (0x0008)to confirm the unit isUGM3; otherwise, perform unit conversion before AQI mapping - Map the concentration value to an AQI level and display with the corresponding color in the UI (green / yellow / orange / red / purple / maroon)
- If the device supports the LEV Feature, you can also use
LevelValue (0x000A)directly for a rough level display, avoiding manual calculation - If the device supports the PEA Feature, display
PeakMeasuredValue (0x0003)as today's peak to show the user the worst period of the day - 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.
- Subscribe to
MeasuredValue (0x0000)andLevelValue (0x000A)(if LEV Feature is supported) - 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
- 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
- Factor
Uncertainty (0x0007)into threshold calculations: if uncertainty is ±2 μg/m³, the actual trigger point for a threshold of 35 should be 37 - 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