Aqara Air Monitoring Panel S1 (KQJCMB11LM) in Home Assistant via Zigbee2MQTT
There’s a gap in the Aqara air-quality content space: the KQJCMB11LM has been available for a while, it pairs directly with Zigbee2MQTT without any hub, and it exposes CO2, PM2.5, temperature, and humidity as proper entities in Home Assistant. Yet the only setup content out there is a single hardware review and a GitHub issue thread from its early support days.
This guide fills that gap. If you’ve bought the S1 panel and want it working locally in HA, here’s exactly what you need and what to watch out for.
What the Aqara Air Monitoring Panel S1 actually measures
The KQJCMB11LM measures four things: CO2 concentration (via a Sensirion SCD40 photoacoustic-NDIR sensor, 400-5000 ppm range), particulate matter PM2.5 (via a laser-scattering particle sensor, 0-1000 µg/m³ range), temperature, and relative humidity. The temperature and humidity readings come from the SCD40’s integrated T&H element rather than a separate sensor — worth knowing when you calibrate.
One clarification up front: this device measures carbon dioxide (CO2), not carbon monoxide (CO). CO2 is the gas you exhale, and rising indoor levels indicate poor ventilation, not danger. The S1 is an air-quality and comfort monitor — it is not a CO alarm, smoke alarm, or any kind of life-safety device, and it should not be relied on as one.
That makes it a different device from the Aqara TVOC Air Quality Monitor, which measures volatile organic compounds (TVOCs) and has no display. The S1 measures CO2 and particles instead, and it has a built-in screen that wakes when your hand gets close. They’re different instruments serving different use cases — see our Aqara TVOC Air Quality Monitor setup guide if the TVOC unit is what you actually have.
The S1 is mains-powered (220V AC). You’re wiring it into a wall, not running it off a CR2032. That means it also acts as a Zigbee router, which is a bonus for anyone running a larger mesh. The downside is the installation format: the S1 uses an 86mm square wall-box, the standard in mainland China and parts of Asia. In Europe or the US that junction box size is non-standard, and you’ll likely need a surface-mount adapter.
What you need before pairing
- A Zigbee coordinator running Zigbee2MQTT v1.29.0 or later. The S1 wasn’t supported before that version. If you’re not sure what version you’re running, check the Z2M frontend under Settings > About.
- Neutral wire at the installation location. The S1 needs both line and neutral to function. If your wall box only has line (common in some older European wiring), the S1 won’t work there.
- For non-Asian installs: an 86mm-to-local surface-mount adapter, or a willingness to do a bit of junction-box work.
You do not need an Aqara hub, the Aqara Home app, or any cloud account. The S1 pairs directly to your Zigbee coordinator as a router device.
If you’re not yet set up with a Zigbee coordinator and Z2M, our guide to running Aqara Zigbee devices in Home Assistant without the hub covers that setup from scratch.
Pairing the S1 with Zigbee2MQTT
Once the panel is powered up and installed:
- Open the Z2M frontend and enable permit join (either globally or on a specific coordinator).
- Hold the button on the S1 (check the device’s short manual for button location; it’s typically a small recessed button on the side) until the panel display indicates pairing mode.
- The device should appear in Z2M within about 60 seconds under the model ID
lumi.airm.fhac01.
After it pairs, check the Z2M OTA menu before doing anything else. A firmware update (v0.0.0_0026, dated 2022-09-19) was available during early community testing, and staying current reduces the chance of hitting older sensor-reporting bugs. Trigger an OTA check in the Z2M frontend and let it complete.
Confirm the pair by looking for the device in Z2M’s device list. The join type should read “Router,” which confirms it’s contributing to your mesh.
Entities exposed in Home Assistant
With a clean pair on Z2M v1.29.0+, the S1 exposes all four sensor entities plus link quality:
| Entity | Unit | Notes |
|---|---|---|
sensor.co2 |
ppm | SCD40 photoacoustic-NDIR sensor, 400-5000 ppm range |
sensor.pm25 |
µg/m³ | Laser-scattering particle sensor; see known bug below |
sensor.temperature |
°C | Calibration offset available |
sensor.humidity |
% | Calibration offset available; reads ~4% low vs. reference |
sensor.linkquality |
lqi | Standard Z2M link quality |
Sensors report on change, not on a fixed interval. During stable indoor conditions, the CO2 and PM2.5 entities may not update for extended periods. That’s expected, not a bug. To confirm the sensor is alive during stable conditions, check the last_updated attribute in HA’s developer tools.
Calibration — what you can adjust
Z2M exposes calibration offsets for all four measured values via the device settings panel in the Z2M frontend (or via MQTT set commands). All four take an absolute offset that applies on the device’s next report.
A few notes on applying these:
Humidity: Third-party testing found the S1’s humidity readings run about 4% below reference sensors. Before applying an offset, let the sensor run for at least 24 hours beside a known-good reference (even a cheap DHT22 module gives you a rough baseline). Then apply the offset in Z2M settings. A starting value of +4% is reasonable; adjust from there.
Temperature: The panel is wall-mounted and mains-powered, so waste heat from the circuitry can pull the temperature reading up over time. Let it settle for 24-48 hours after installation before calibrating, and compare against a reference sensor placed nearby at the same height.
CO2: The SCD40 is a proper NDIR (non-dispersive infrared) sensor. NDIR sensors hold calibration better than MOX sensors over time, but they do drift. Periodic verification against outdoor air (around 420 ppm in recent years) is a good habit. The Z2M offset is a fixed number, not automatic baseline correction, so you’re applying it manually.
PM2.5: A calibration offset is available in Z2M settings; there’s no factory recalibration path. If you’re in a clean-air environment and the sensor reads consistently above zero, a negative offset can bring it in line — but to do that meaningfully you need an independent reference, ideally a consumer PM2.5 meter.
Known issues and caveats
PM2.5 reporting as zero (Z2M bug #21475)
In certain Z2M versions, PM2.5 exposed as 0 in the entity even when the underlying measurement was being received correctly. The sensor itself was capturing the right value (visible in the dev console under endpoint 1, cluster pm25Measurement); the problem was in Z2M’s exposure layer.
If you’re seeing PM2.5 stuck at 0 and the device otherwise looks healthy (CO2, temp, and humidity are updating), check your Z2M version and update if needed. This was documented in GitHub issue #21475. A current Z2M install should not exhibit it.
ZHA support is partial
If you’re running ZHA instead of Z2M, the S1 currently has problems. The CO2 entity reads values in the millions rather than the correct thousands-of-ppm range, which points to a unit-multiplier error in the ZHA quirk. The humidity entity is missing entirely. Both issues were expected to resolve via a custom quirk but were unfixed as of the SmartHomeScene review period.
If you want full entity coverage from the KQJCMB11LM, use Z2M. The ZHA path gives you partial, unreliable data.
Humidity accuracy
Expect humidity to read around 4% below reference. This is consistent across third-party testing. Apply the calibration offset after a comparison period, as described above.
Installation outside Asia
The 86mm square format is the standard for Chinese electrical boxes, not EU- or US-standard. If you’re installing this outside Asia, budget time for a suitable surface-mount adapter or junction-box modifications.
Privacy and local control
This is a clean local setup. With Z2M, the sensor pairs directly to your coordinator. No Aqara app, no Aqara cloud, no account. Sensor data does not leave your LAN.
Unlike hub-dependent Aqara devices (the Hub M2/M3/E1 family), the KQJCMB11LM needs no cloud step at any point. Pairing, entity configuration, firmware updates, and all subsequent operation go through Z2M and Home Assistant only.
If you want to put the sensor on an IoT VLAN — good practice for any device that could phone home — the Z2M coordinator handles all communication, so you need VLAN access on the coordinator host, not on each Zigbee device. Our guide to putting Aqara and Xiaomi on an IoT VLAN covers this setup.
Using the sensor data in automations
A few practical automation patterns once the entities are in HA.
CO2 ventilation alert
A common threshold is 1000 ppm; above that, most people start to notice the effects in a closed room. A basic notification automation:
alias: CO2 high alert
trigger:
- platform: numeric_state
entity_id: sensor.aqara_s1_co2
above: 1000
for:
minutes: 5
action:
- service: notify.mobile_app
data:
message: "CO2 is at {{ states('sensor.aqara_s1_co2') }} ppm. Open a window."
The for: minutes: 5 guard prevents a single transient spike from firing a notification. Adjust the threshold and notification target to fit your setup.
PM2.5 fan trigger
The WHO 24-hour mean guideline for PM2.5 is 15 µg/m³ (2021 revision); older guidelines used 25 µg/m³. A reasonable indoor trigger point for running an air purifier or opening windows is around 35 µg/m³:
alias: PM2.5 purifier trigger
trigger:
- platform: numeric_state
entity_id: sensor.aqara_s1_pm25
above: 35
action:
- service: switch.turn_on
target:
entity_id: switch.air_purifier
Adjust the entity IDs to match your setup. If you’re running the air purifier as a fan entity rather than a switch, change the service call accordingly.
These examples use round numbers as illustrative starting points. Calibrate the thresholds based on how your home actually behaves, not WHO guidelines for outdoor air.
Frequently asked questions
Does the Aqara Air Monitoring Panel S1 work without an Aqara hub?
Yes. It’s a standard Zigbee device. It pairs directly to any Z2M-compatible coordinator without needing an Aqara hub, Aqara Home app, or account.
What sensors does the S1 expose in Home Assistant?
Four: CO2 (ppm), PM2.5 (µg/m³), temperature (°C), and humidity (%). All four are available in Z2M v1.29.0+. ZHA currently exposes CO2 with the wrong unit multiplier and is missing humidity.
Why is PM2.5 showing as 0 on my S1 in Zigbee2MQTT?
This was a Z2M exposure-layer bug (issue #21475), not a hardware failure. Update Z2M. If you’re already on a current version and still seeing zeros, verify the device is reporting in the Z2M frontend logs under the device’s “Events” tab.
Does the S1 work with ZHA?
Partially. CO2 reads incorrectly (values in the millions, from a unit-multiplier error) and the humidity entity is missing. Use Z2M for this device.
What is the difference between the Aqara S1 panel and the Aqara TVOC monitor?
Different sensors, different form factors. The S1 (KQJCMB11LM) measures CO2 and PM2.5 and has a built-in display. The TVOC monitor (VOCKQJK11LM) measures volatile organic compounds, has no display, and is battery-powered. They are not interchangeable, and the SERP for the S1 is currently full of TVOC monitor content — which is why the S1’s setup experience has been poorly documented until now. Our Aqara TVOC Air Quality Monitor setup guide covers the TVOC unit if that’s the one you have.