Why Fixed-Speed Ventilation Falls Short
Fixed-speed ventilation runs at the same speed continuously regardless of room occupancy. Problems that result:
- 40-60% excess energy consumption when rooms are unoccupied
- Constant noise even when unnecessary
- Filter loading faster than needed — more frequent replacements
- Excessive dryness during lower-humidity periods
Demand-Controlled Ventilation (DCV) solves this by using CO2 as a proxy for human presence in the room.
Calculating Minimum Ventilation Rate per ASHRAE 62.1
ASHRAE 62.1 is the international ventilation standard used worldwide. Minimum fresh air formula:
Ventilation Rate = (People Component) + (Area Component)
- People component: number of occupants × 7.5 L/s/person (or 15 CFM/person)
- Area component: room area (m²) × 0.3 L/s/m² (or 0.06 CFM/sq.ft)
Example — 20 m² bedroom (2 occupants):
- People: 2 × 7.5 = 15 L/s
- Area: 20 × 0.3 = 6 L/s
- Total: 21 L/s = 44.5 CFM minimum
- Converted to ACH: 44.5 CFM × 60 ÷ (20 m² × 2.7m × 35.3) = ~1.4 ACH
Living room 30 m² (4 occupants):
- People: 4 × 7.5 = 30 L/s
- Area: 30 × 0.3 = 9 L/s
- Total: 39 L/s = 82.7 CFM minimum
CO2 Thresholds for DCV in Thai Homes
| CO2 Level | Meaning | Response |
|---|---|---|
| < 600 ppm | Empty or excellent ventilation | Fan 20% low speed |
| 600-800 ppm | Normal, few occupants | Fan 40% medium |
| 800-1,000 ppm | High occupancy or activity | Fan 70% high |
| 1,000-1,200 ppm | Air quality declining | Fan 100% max + alert |
| > 1,200 ppm | Health risk | Critical alert + auto open window |
Thai bedroom target: < 900 ppm throughout the night (Harvard T.H. Chan School research: CO2 > 1,000 ppm reduces sleep quality by 10-15%)
Multi-Level DCV Automation in Home Assistant
yaml
alias: "Bedroom CO2 DCV - Multi Level"
trigger:
- platform: numeric_state
entity_id: sensor.bedroom_co2
above: 800
- platform: numeric_state
entity_id: sensor.bedroom_co2
above: 1000
- platform: numeric_state
entity_id: sensor.bedroom_co2
below: 600
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.bedroom_co2
above: 1000
sequence:
- service: fan.set_percentage
target:
entity_id: fan.bedroom_erv
data:
percentage: 100
- service: notify.mobile_app_owner
data:
title: "⚠️ CO2 High"
message: "Bedroom CO2: {{ states('sensor.bedroom_co2') }} ppm"
- conditions:
- condition: numeric_state
entity_id: sensor.bedroom_co2
above: 800
below: 1001
sequence:
- service: fan.set_percentage
target:
entity_id: fan.bedroom_erv
data:
percentage: 70
- conditions:
- condition: numeric_state
entity_id: sensor.bedroom_co2
below: 600
sequence:
- service: fan.set_percentage
target:
entity_id: fan.bedroom_erv
data:
percentage: 20
VOC vs CO2 Sensors: What to Use Where
| Sensor | Measures | Best for | Price (THB) |
|---|---|---|---|
| CO2 (NDIR) | Direct CO2 | Bedrooms, living rooms | 1,500-3,000 |
| eCO2 (MOX) | Estimated CO2 from VOC | Budget option, less accurate | 500-1,000 |
| TVOC | Total volatile organics | New furniture, paint, adhesives | 800-1,500 |
| PM2.5 | Fine particulate matter | Entry areas, reception rooms | 1,000-2,500 |
Recommendations for Thai homes:
- Bedrooms: CO2 NDIR (Sensirion SCD40 or SCD41)
- Rooms with new furniture or recent renovation: add TVOC sensor
- Home entry points: PM2.5 to monitor outdoor air infiltration
