Smarter Ventilation with the Apollo AIR-1

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.

Apollo Automation AIR-1 Air Quality Sensor

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.

Apollo Automation AIR-1 Air Quality Sensor CAD Drawing

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.

Graph showing CO₂ levels rising during New Year's Eve celebration

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.

Graph showing CO₂ levels rising overnight in the bedroom

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.

Screenshot of Home Assistant automation to turn on fan when air quality is low

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.

Screenshot of Home Assistant dashboard showing CO2 levels in bedroom and living room

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.

Back to blog