Smarter Ventilation with the Apollo AIR-1
Every time I cook on our gas stove, I switch on the kitchen vent—not because I’m searing steaks or deep-frying anything, but because lighting the burner immediately releases combustion byproducts into the room. One of the biggest is CO₂, the gas that will make us tired, our brain foggy and head hurt, and eventually lead to loss of consciousness.
Proper ventilation is key, and I have the sensor to prove it.
The AIR-1 is a compact indoor air sensor built by Apollo Automation, designed for Home Assistant: locally-controlled via WiFi and ESPHome, open hardware & firmware, no cloud subscription or app to download. Let's look at the sensors before we dive into placement and automations.
The Base Sensor
The core device packs a surprising amount of sensing into a tiny enclosure. It tracks particulates (PM1, PM2.5, PM4, PM10), VOC index, NOx index, temperature, humidity, and barometric pressure. These line up directly with everyday life:
Particulate matter (PM1, PM2.5, PM4, PM10) describes airborne solid and liquid particles of different sizes. They come from cooking, burning candles, smoking, dust, pollen, and outdoor pollution. PM2.5 is usually below 10 µg/m³, PM10 below 50 µg/m³, and PM1 and PM4 generally stay in the single-digit range in a clean, unoccupied room.
Volatile organic compounds (VOCs) are gases released from common household products such as paints, cleaners, new furniture, and aerosols. Elevated VOC levels can cause irritation of the eyes, nose, and throat, headaches, and other short-term symptoms, and long-term exposure is associated with more serious health concerns. Total VOCs normally stay below 200 ppb in a well-ventilated home, with freshly cleaned or newly furnished rooms ranging up to 300–500 ppb before settling.
Nitrogen oxides (NOx) are combustion byproducts from sources like gas stoves, fireplaces, and vehicle exhaust infiltrating indoors. Elevated NOx levels signal the presence of combustion pollution and are associated with respiratory problems. Both NO and NO₂ in healthy indoor air usually sit below 20 ppb when no combustion source is active.
One of my hobbies, 3D printing, releases PM2.5, PM10, and VOCs.

The CO₂ Version
The CO₂ model adds the Sensirion SCD40, a reliable NDIR CO₂ sensor. If you want to understand how fast the air in a closed bedroom gets stale or how your gas stove affects air quality, this is the one to get.
After watching a single night’s graph with two people in a closed room, I stopped sleeping with the door and windows shut. The rise is fast and only clears once the room gets some fresh air. What’s cool about these sensors is that they are so precise you can estimate the number of people around.
CO₂ ideally stays under 800 ppm. Outside air is expected at 420 ppm. Prolonged exposure over 1000 ppm should be avoided, and levels above 1500 ppm are considered bad air quality with ventilation required.
The CO₂ + Gas Version
Lastly, the top-tier version has the CO₂ sensor and adds a MiCS-4514 gas sensor. It detects a wide range of gases (CO, NO₂, NH₃, ethanol, hydrogen, methane) that actually show up in a normal home.
Carbon monoxide is the serious one: a byproduct from burners, fireplaces, or even a running car in an attached garage. Nitrogen dioxide appears whenever combustion happens indoors, also around gas stoves with weak ventilation. Methane spikes are quiet leak indicators, since it’s the main ingredient in natural gas used for cooking and heating. Typically, CO should remain below 5 ppm, NO₂ typically under 20 ppb, and methane near background levels of 1.8–2.0 ppm unless there is a leak.
Ethanol shows up during cleaning or sanitizing because it’s in tons of household products. Ammonia also tends to spike when using stronger cleaners and glass sprays. Ethanol usually stays under 100 ppb at baseline, while ammonia sits below 30 ppb in normal indoor conditions.
Despite all its capabilities, the gas sensor is not a certified safety device. It is however excellent for revealing the gas patterns around cooking, workshop activities, or hobby spaces with solvents.
Sensor Placement
I recommend adding a CO₂ sensor to every area where you spend long stretches of time, especially rooms with limited ventilation or any combustion or pollution sources.
In our place, an AIR-1 monitors the kitchen and dining area, while MSR-2 mmWave units with the CO₂ module cover the bedroom and office/workshop. I place them close to likely pollution sources and away from anything that could skew the readings. A sensor next to a drafty window can make the air look cleaner and cooler than it is, and direct sunlight consistently pushes my temperature readings upward—another reason to keep them off the windowsill.
I combine the sensors with IKEA Starkvind air purifiers, which my automations turn on via Zigbee when air quality drops. Window actuators would be ideal for opening windows, but until those are part of the setup, I just highlight unusual air quality levels on our wall dashboards, and a voice announcement makes sure we catch the alert even when we’re focused on cooking.
Data That Changes Daily Habits
After a few weeks, the patterns become easy to read and surprisingly consistent.

When friends come over, the CO₂ graph always tells the story: a steady climb into the 1500–2000 ppm range during dinner or board games (or New Year's in the graph above), then it quickly drops once the windows open again.

The bedroom shows an even clearer pattern. Two people sleeping in a closed room push CO₂ up fast, and the mornings feel exactly like the graph looks. Leaving the door open, running the A/C, or cracking a window keeps the curve lower and lines up with better rest.
The office behaves differently. Whenever the 3D printer runs certain materials, PM2.5, PM10, and VOCs jump in a neat, predictable arc. The purifier kicks in on its own, and I can watch the room clear once the print finishes.
Dashboard and Automation Code
Turn On Air Purifier When CO₂ Is High
This automation turns on the bedroom fan at high speed and alerts you when CO₂ stays above 2000 ppm for 5 minutes while you’re home. Once levels drop below 1200 ppm for 3 minutes (or after 2 hours), it returns the fan to auto mode.

alias: "Fan: Air Quality Low"
description: ""
triggers:
- entity_id:
- sensor.living_climate_co2
- sensor.bedroom_radar_co2
for:
hours: 0
minutes: 5
seconds: 0
above: 2000
trigger: numeric_state
conditions:
- condition: state
entity_id: group.home_occupied
state: home
actions:
- action: fan.turn_on
target:
entity_id: fan.bedroom_fan
data:
percentage: 80
- action: fan.set_percentage
target:
entity_id:
- fan.bedroom_fan
data:
percentage: 100
- if:
- condition: state
entity_id: input_select.sleep
state: Awake
then:
- action: script.announce
data:
message: Warning! The air quality in the apartment is very low.
alias: Announce if awake
- action: script.notify_phone
metadata: {}
data:
tag: airquality
channel: airquality
importance: high
title: Air quality low
message: The air quality in the apartment is low.
notification_icon: mdi:air-purifier
- wait_for_trigger:
- trigger: numeric_state
entity_id:
- sensor.bedroom_radar_co2
for:
hours: 0
minutes: 3
seconds: 0
below: 1200
timeout:
hours: 2
minutes: 0
seconds: 0
milliseconds: 0
- action: fan.set_preset_mode
metadata: {}
data:
preset_mode: auto
target:
entity_id: fan.bedroom_fan
mode: single
Show CO₂ Levels When They Are High
This dashboard section displays 12-hour CO₂ line graphs for the bedroom and living room. The stack only becomes visible when either sensor rises above 1000 ppm.

type: horizontal-stack
cards:
- graph: line
type: sensor
entity: sensor.bedroom_radar_co2
detail: 2
hours_to_show: 12
name: Bed
- graph: line
type: sensor
entity: sensor.living_climate_co2
detail: 2
hours_to_show: 12
name: Living
visibility:
- condition: or
conditions:
- condition: numeric_state
entity: sensor.bedroom_radar_co2
above: 1000
- condition: numeric_state
entity: sensor.living_climate_co2
above: 1000
Turn On Air Purifier & Fan When Sleeping
This automation sets the bedroom fan to 60% when we fall asleep and restores it to auto mode after you wake up and leave the room. It also toggles the fan’s LED indicator accordingly to give us full darkness.
alias: "Sleep: Fan at Night"
description: ""
triggers:
- entity_id:
- input_select.sleep
to: Asleep
for:
hours: 0
minutes: 0
seconds: 30
id: Sleep
trigger: state
- entity_id:
- input_select.sleep
to: Awake
for:
hours: 0
minutes: 0
seconds: 30
id: Wake
trigger: state
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- Sleep
sequence:
- action: fan.set_percentage
target:
entity_id:
- fan.bedroom_fan
data:
percentage: 60
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.bedroom_fan_disable_led
alias: Fan 40% when sleeping
- conditions:
- condition: trigger
id:
- Wake
sequence:
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id:
- switch.bedroom_fan_disable_led
- wait_for_trigger:
- entity_id:
- input_boolean.presence_bedroom
to: "off"
trigger: state
continue_on_timeout: true
timeout:
hours: 0
minutes: 30
seconds: 0
milliseconds: 0
- action: fan.set_preset_mode
target:
entity_id:
- fan.bedroom_fan
data:
preset_mode: auto
alias: Fan auto when awake
mode: single
Start Small and Learn
I assumed this before, but now I have the facts for our home: sleep improves when the bedroom stays airy, cooking and cleaning feel safer because spikes trigger the right automations, and hobby spaces like my 3D-printing corner stay cleaner thanks to particulate and VOC data. The house reacts on its own—fans, purifiers, and dashboards only wake up when something actually changes—so the air stays healthier without constant attention.
You don’t need to cover the entire house on day one. Start with the room that matters most to your daily life: For most people, that’s the bedroom (sleep and recovery) or the kitchen (cooking and combustion). Drop an AIR-1 there, wire it into Home Assistant, maybe connect it to whatever fans or purifiers you already own, and let the data tell you what to do next.
Once you’ve seen your first week of air quality graphs, it’s hard to go back to guessing what you’re breathing.
