Home Assistant has no built-in particulate sensor, so a reliable air quality monitor comes down to two choices: which sensor hardware to buy, and which of Home Assistant's integration paths to route it through. Per Home Assistant's official air quality integration documentation, the platform accepts air quality data through locally-flashed ESPHome devices, MQTT (including Zigbee sensors bridged via Zigbee2MQTT), and a handful of cloud-polling integrations for commercial monitors like Airthings and Awair. This synthesis covers sensor selection, the integration methods that hold up over months of continuous use, dashboard layout, and the calibration and network issues that recur most often in ESPHome and Home Assistant community troubleshooting threads.
How to Integrate Air Quality Sensors with Home Assistant
ESPHome: the default path for DIY PM2.5 and VOC sensors
ESPHome is the most common integration path for scratch-built air quality monitors because it runs entirely on the sensor's own ESP8266/ESP32 microcontroller and exposes readings as native Home Assistant entities over the local network, with no cloud round-trip and no third-party custom component to maintain across Home Assistant version bumps. Per ESPHome's component documentation, the pmsx003 platform natively supports Plantower's PMS5003/PMS7003 family for PM1.0/PM2.5/PM10, the sds011 platform supports Nova Fitness's SDS011, and the bme680_bsec platform exposes Bosch's BME680/BME688 temperature, humidity, pressure, and gas-resistance (IAQ) readings once paired with Bosch's BSEC calibration library. A single ESP32 can typically host two or three of these sensors on shared I2C/UART buses, which is how most multi-metric DIY monitors (PM2.5 + VOC + CO2 in one enclosure) are built.
MQTT and Zigbee2MQTT: for pre-built and Zigbee sensors
For commercial or pre-built sensors that speak Zigbee, Zigbee2MQTT bridges them into Home Assistant over MQTT via a USB Zigbee coordinator, per Zigbee2MQTT's own documentation and Home Assistant's MQTT integration docs. This path avoids flashing custom firmware entirely and is generally the lower-maintenance option once a device is paired, since firmware updates and network management happen through the Zigbee2MQTT web UI rather than through ESPHome's OTA flow.
Native integrations: cloud-connected commercial monitors
Commercial air quality monitors from brands like Airthings and Awair connect through their own Home Assistant integrations, which poll the manufacturer's cloud API rather than talking to the device directly on the local network. This is the least maintenance-heavy option for someone who wants a monitor working quickly, at the cost of a cloud dependency and, on some models, a subscription for full sensor access.
Best Sensor Hardware for a Home Assistant Air Quality Setup
| Sensor | Measures | Interface | ESPHome/HA path |
|---|---|---|---|
| Plantower PMS5003 | PM1.0 / PM2.5 / PM10 (laser scattering) | UART | ESPHome pmsx003 |
| Nova Fitness SDS011 | PM2.5 / PM10 (laser scattering) | UART | ESPHome sds011 |
| Bosch BME680 / BME688 | Temperature, humidity, pressure, gas resistance (IAQ proxy) | I2C | ESPHome bme680_bsec |
| Sensirion SCD40 / SCD41 | CO2 (true NDIR), temperature, humidity | I2C | ESPHome scd4x |
| MQ135 | VOC/CO2 proxy (uncalibrated resistive) | Analog | Generic ADC sensor, manual calibration |
A note on the MQ135
The MQ135 shows up in a lot of budget air quality tutorials because it's inexpensive and easy to wire to an analog pin, but it is not a calibrated gas-specific sensor. It outputs a relative resistance change that shifts with humidity, temperature, and sensor age, and the ESPHome and Home Assistant communities generally treat it as a trend indicator rather than a source of absolute ppm readings, useful after a manufacturer-recommended 24-48 hour burn-in and a manual calibration curve against a known baseline. Builders who need defensible CO2 numbers typically move to a true NDIR sensor like the Sensirion SCD40 instead.
Building a Multi-Sensor Air Quality Dashboard
Once sensors are reporting into Home Assistant as entities, the standard next step is grouping them under a Home Assistant Area (e.g., "Living Room Air Quality") so history, statistics, and automations can reference the group rather than individual entity IDs. A Lovelace entities card or a HACS-installed trend card handles the at-a-glance view; Home Assistant's built-in History and Statistics panels cover longer-term trend analysis without extra add-ons. A common automation pattern is to trigger a notification, or switch on a smart-plug-connected air purifier, when a PM2.5 or VOC entity crosses a threshold for a sustained period — using for: in the automation trigger avoids false positives from brief spikes (cooking, opening a window) that a single reading would otherwise catch.
Repurposing an idle display as a wall-mounted dashboard
Many multi-sensor setups eventually outgrow a phone widget and get dedicated to an always-on screen. A Raspberry Pi running Home Assistant OS is the most common host for this kind of build — see our guide to Raspberry Pi projects for home automation for broader Pi-based automation projects beyond air quality alone. If a spare monitor is already sitting around from another project, it's worth checking what's actually usable for a dashboard: our 4K monitor buying guide covers displays with enough resolution for a dense multi-sensor Lovelace layout, while makers repurposing older CRT hardware from a retro-gaming bench should check compatibility first — see our guides on CRT monitors for retro gaming, CRT monitors for retro consoles, best CRT monitors for retro gaming, CRT PC monitors for retro gaming, the 2025 CRT reality check, and CRT vs. modern monitor for retro gaming before dedicating one to a permanently-on dashboard, since low refresh persistence and power draw differ meaningfully from an LCD panel.
Troubleshooting Common Home Assistant Air Quality Monitor Issues
Calibration drift
Optical PM sensors accumulate dust on the internal laser and photodiode over months of continuous operation, and gas-resistance elements (MQ135, BME680's gas sensor) shift baseline as the heating element ages. The standard mitigation discussed in ESPHome and Home Assistant community threads is periodic recalibration against a known reference, keeping the BSEC library and ESPHome firmware current, and, for laser PM sensors, occasional cleaning per the manufacturer's datasheet.
MQTT and network dropouts in multi-room setups
As a sensor network grows past a handful of rooms, MQTT broker load and Wi-Fi congestion become the more common failure point than the sensors themselves. Placing the MQTT broker (typically the Mosquitto add-on) on the same host as Home Assistant, keeping ESPHome devices on a dedicated 2.4GHz SSID away from busy 5GHz traffic, and staggering sensor publish intervals rather than having every device report simultaneously are the fixes most frequently cited in Home Assistant community forum threads for reducing dropped readings and "entity unavailable" states.
ESPHome OTA and Wi-Fi stability
ESPHome devices that fail over-the-air updates or intermittently drop off the network are most often traced to marginal Wi-Fi signal at the sensor's install location — frequently a vent, window, or exterior wall chosen for airflow reasons rather than radio reasons. Static IP reservations in the router's DHCP settings and, where signal is weak, an ESP32 board with an external antenna connector are the two most commonly recommended fixes in ESPHome's own documentation and community support threads.
Citations and sources
- Home Assistant — Air Quality integrations
- ESPHome — PMSX003 particulate matter sensor
- ESPHome — SDS011 particulate matter sensor
- ESPHome — BME680 BSEC gas/IAQ sensor
- ESPHome — SCD4x CO2 sensor
- Zigbee2MQTT documentation
- Home Assistant — MQTT integration
This piece is editorial synthesis based on publicly available information. No independent first-party benchmarking is reported.
