Aqara TVOC Air Quality Monitor: Zigbee2MQTT + HA Setup
The Aqara TVOC Air Quality Monitor (model VOCKQJK11LM, also sold as AAQS-S01) is an E-Ink-display, battery-powered Zigbee 3.0 sensor that measures total volatile organic compounds, temperature, and humidity. It pairs directly with Zigbee2MQTT — no Aqara hub required, no Mi Home cloud involved. But it has a few quirks that catch people out: infrequent updates by design, a resolved-but-confusing historical TVOC scaling bug, and incomplete support under ZHA. This guide covers the full picture.
What Is the Aqara TVOC Air Quality Monitor?
VOCKQJK11LM and AAQS-S01 are the same hardware. Aqara sells it under both designations depending on the market. If you search either, you’ll land on the same device. The Zigbee device ID is lumi.airmonitor.acn01.
The sensor measures:
- TVOC (total volatile organic compounds) in parts per billion
- Ambient temperature (Celsius; see the Fahrenheit note in the configuration section)
- Ambient humidity
- Air quality level — a categorical summary (excellent / good / moderate / poor / unhealthy / unknown)
- Device internal temperature and battery level / voltage
The E-Ink display shows air quality and temperature directly on the unit. This display works standalone with no network connectivity — even if Home Assistant is down, the device still reads correctly and shows its local reading.
Why TVOC matters: VOCs include a wide class of compounds emitted by paints, cleaning products, adhesives, and off-gassing materials. A consistently elevated reading doesn’t tell you what specific chemical you’re dealing with, but it signals ventilation problems worth investigating. The sensor is a useful early warning in kitchens, workshops, and newly furnished rooms.
Prerequisites
Before pairing:
- Zigbee2MQTT running with a supported coordinator. The Z2M device page lists minimum adapter firmware versions: CC2530/CC2531 needs v20211115, CC1352/CC2652 needs v20211114, Conbee II needs 0x26720700.
- Home Assistant with the MQTT integration configured and connected to the same MQTT broker Z2M is publishing to.
- Z2M at a recent stable release. Older builds had a serious TVOC scaling bug (discussed in the quirks section). If you’re running anything from 2021, update first.
This guide assumes you’re running Z2M connected to HA via MQTT autodiscovery. That’s the typical setup. If you’re using ZHA instead, read the entities section first — ZHA support for this device is meaningfully less complete.
Pairing to Zigbee2MQTT
- Open the Z2M interface and click Permit join (or enable it for a specific device group if your setup supports that).
- On the TVOC monitor, press and hold the top button until the blue LED blinks. The device is now in pairing mode.
- Wait for the Z2M interface to show the device added with model ID
VOCKQJK11LM.
If the LED blinks and then nothing appears in Z2M, check that permit join is active and your coordinator is within range. The E-Ink display doesn’t give pairing feedback beyond the LED.
Once paired, verify the device name in Z2M. If you’ve edited the configuration.yaml to assign a friendly name, do that now — it flows through to HA entity naming.
Entities in Home Assistant
After pairing and with MQTT autodiscovery enabled, the following entities should appear in HA:
| Entity | Type | Notes |
|---|---|---|
sensor.air_quality |
Sensor | Categorical: excellent / good / moderate / poor / unhealthy / unknown |
sensor.voc |
Sensor | In ppb |
sensor.temperature |
Sensor | Ambient temperature in °C |
sensor.humidity |
Sensor | Ambient relative humidity |
sensor.battery |
Sensor | Percentage |
sensor.voltage |
Sensor | Battery voltage |
sensor.device_temperature |
Sensor | Internal device temperature, not ambient |
select.display_unit |
Select | Controls only the on-device E-Ink display (see Configuration) |
Your actual entity IDs will be prefixed by whatever friendly name you gave the device in Z2M, e.g. sensor.tvoc_monitor_bedroom_air_quality.
The air quality categories correspond to VOC ppb thresholds. The device maps the raw ppb reading to a category internally. You don’t configure these thresholds — they’re baked into the firmware. The categories are the same ones shown on the E-Ink display.
ZHA note: ZHA support for this device is less complete than Z2M. Users running ZHA have reported missing entities — temperature, humidity, and VOC may not appear at all. If you’re committed to ZHA, check the HA community threads for current status before buying. Z2M is the recommended path for full entity coverage. If you’d rather go the hub route, the Aqara Hub M2 local setup guide covers that path.
Understanding the Slow Update Behavior
This is the most common source of confusion with this device.
The TVOC monitor does not report on a fixed interval. It reports when it detects a significant change in air quality. In a stable environment, you might go an hour or more without a state update in HA — and that’s correct, not a broken integration.
This design makes sense for a battery-powered sensor. Constant interval reporting would drain the battery quickly. The trade-off is that your HA dashboard won’t show a freshly updated reading unless the air quality has actually changed.
To force an immediate report: press the top button once (don’t hold — a short press triggers a state push, a long hold re-initiates pairing mode). The device will send its current readings to Z2M immediately. This is the standard way to verify your setup is working without waiting for air quality to change.
A subset of users has reported faster-than-expected battery drain. This appears to be a hardware variation issue rather than a software or integration problem — it’s not consistent across all units. If your battery drops unusually fast, it’s worth swapping the battery and monitoring. The device takes a standard CR2032.
Configuration and Calibration
Z2M exposes calibration offsets for temperature, humidity, and VOC. These are useful when the TVOC monitor’s readings diverge meaningfully from a reference sensor.
In the Z2M interface, under the device’s Exposes tab, you’ll find the calibration fields. These are device-side offset corrections, not HA template calculations — the corrected value is what gets published to MQTT.
When to calibrate:
– Temperature and humidity: if you have a reference sensor in the same room and readings are consistently off by more than 1–2 degrees or 3–5% RH.
– VOC: more difficult to calibrate without a reference instrument. For most home setups, the factory calibration is sufficient for detecting relative changes.
About display_unit (and why Fahrenheit is a display-only setting): Z2M exposes a display_unit select with four options — mgm3_celsius, ppb_celsius, mgm3_fahrenheit, ppb_fahrenheit. Setting this via Z2M (or via the Aqara app) changes what the physical E-Ink display shows. It does not change what gets published over MQTT. The sensor.voc entity stays in ppb and sensor.temperature stays in °C regardless of the display setting. This catches people out: switching the device to a Fahrenheit display mode does not give you a Fahrenheit value in Home Assistant.
If you need Fahrenheit in HA, create a template sensor:
template:
- sensor:
- name: "TVOC Monitor Temperature (F)"
unit_of_measurement: "°F"
state: "{{ (states('sensor.tvoc_monitor_temperature') | float * 9/5 + 32) | round(1) }}"
Adjust the entity ID to match your device’s actual entity name.
Known Quirks
Historical TVOC Scaling Bug (Resolved)
Early versions of Z2M had a bug where VOC readings from this device were reported at vastly inflated values — think 75,000,000 µg/m³ instead of a ppb reading in the hundreds. This was a unit scaling error in the Z2M device handler.
If you’re seeing implausibly large VOC numbers, the fix is straightforward: update Zigbee2MQTT. The bug was fixed in development builds by early 2022. If you’re on a current stable release, you won’t encounter it. But if you inherited an older installation or see absurd readings, don’t assume the air quality is catastrophic — check your Z2M version first.
Binding Configuration Failure
Some users have reported that the XiaomiAqaraE1Cluster binding configuration fails during or after pairing, preventing access to full device configuration options. If you find that configuration controls aren’t appearing or responding in Z2M:
Remove the device from Z2M and re-pair it. In most reported cases, a fresh pairing resolves the binding issue. There’s no documented root cause — it appears to be a timing or adapter firmware interaction.
Battery Drain on Some Units
As noted in the slow-update section, a subset of devices shows faster-than-expected battery drain. This doesn’t appear to be related to Z2M or HA configuration. If you’re in this group, the practical workaround is to monitor battery levels via the sensor.battery entity and set a low-battery alert automation.
Re-Pairing After Adapter Firmware Updates
If you update your Zigbee coordinator firmware, the TVOC monitor may need to be re-paired. This applies across adapters — it’s a general Z2M behavior, not specific to this device, but worth calling out because it’s easy to forget when the pairing previously worked without issue.
Automation Ideas
VOC Alert When Air Quality Drops
alias: "TVOC Alert - Air Quality Degraded"
trigger:
- platform: state
entity_id: sensor.tvoc_monitor_air_quality
to:
- "moderate"
- "poor"
- "unhealthy"
condition: []
action:
- service: notify.mobile_app
data:
title: "Air Quality Alert"
message: "TVOC monitor shows {{ states('sensor.tvoc_monitor_air_quality') }}. VOC: {{ states('sensor.tvoc_monitor_voc') }} ppb."
mode: single
Adjust entity IDs to match your device. This triggers on any state transition to moderate, poor, or unhealthy, so you’ll get notified as conditions worsen but won’t be spammed on every minor fluctuation (since the device only updates on change anyway).
Low Battery Alert
alias: "TVOC Monitor Low Battery"
trigger:
- platform: numeric_state
entity_id: sensor.tvoc_monitor_battery
below: 20
action:
- service: notify.mobile_app
data:
message: "TVOC monitor battery at {{ states('sensor.tvoc_monitor_battery') }}%. Replace CR2032."
mode: single
Cross-Reference with Temperature for HVAC Logic
The TVOC monitor reports both air quality and ambient temperature, which means you can combine the two in climate automations. For example: turn on the bathroom exhaust fan if the air quality degrades above a threshold while temperature is elevated (indicating a hot shower is causing VOC buildup from cleaning products).
For deeper automation logic combining temperature, humidity, and VOC, pairing this sensor with a dedicated temperature/humidity sensor in the same room gives you richer data and a useful calibration cross-check. The Aqara T1 temp/humidity sensor setup guide covers a good companion device for this.
Does It Work Completely Offline?
Yes, fully. The Z2M + HA path is local by design. The TVOC monitor communicates over Zigbee to your coordinator, Z2M translates that to MQTT, and HA consumes it. No Aqara cloud involvement at any stage.
The E-Ink display operates independently of HA and Z2M. It shows the current air quality level and temperature based on the device’s own sensors. If your HA instance is down, the display still works correctly — it’s powered by the battery and calculated locally on the device.
The Aqara app and Aqara Home cloud are not required and not contacted after pairing with Z2M. If you had previously used this device with the Aqara app, factory-reset it before pairing to Z2M. To reset: hold the button for 5 seconds — the LED flashes 3 times to confirm.
Frequently Asked Questions
Does the Aqara TVOC air quality monitor work without the Aqara hub?
Yes. It pairs directly to Z2M via any supported Zigbee coordinator. No Aqara hub, no Mi Home, no Aqara Home app required.
Why is my Aqara TVOC sensor not updating in Home Assistant?
The device only reports on significant air quality changes, not on a fixed interval. Press the top button once to force an immediate state push and confirm the integration is working. Lack of updates in a stable environment is normal behavior.
What do the air quality levels mean?
The device maps its raw VOC ppb reading to a categorical scale: excellent, good, moderate, poor, unhealthy, or unknown. These thresholds are set in firmware. The same categories appear on the E-Ink display.
How do I get all sensor entities to show in Home Assistant?
Use Zigbee2MQTT, not ZHA. With Z2M, all eight entities appear via MQTT autodiscovery. ZHA support is incomplete — some users get all entities, others get partial or none.
What’s the difference between AAQS-S01 and VOCKQJK11LM?
Same device, different product names. Aqara uses different designations depending on market and regional catalog. The Zigbee device ID (lumi.airmonitor.acn01) is the same.
Getting this device running locally is straightforward once you know what to expect from the update behavior. The slow-by-design reporting model is the right trade-off for a battery sensor — you just need to press the button to test rather than waiting for air quality to change on its own. For a local-only smart home setup, this is one of the cleaner integrations in the Aqara lineup.


