ESP Projects

Planning DIY HVAC zoning with ESP32s and motorized dampers

Room-by-room zoning is one of the most appealing DIY Home Assistant projects — and one of the easiest ways to damage a furnace or freeze an AC coil. This guide is the planning work to do before buying dampers: how much air you can actually redirect, and the fail-safes a build needs.

This is a planning guide, not a substitute for an HVAC technician. Zoning changes how your equipment runs. Check local codes and your equipment warranty, and have static pressure and temperature rise measured after any change.

The idea

A typical forced-air house has one thermostat, so every room gets air whenever the system runs. Zoning adds a motorized damper in each supply run and a sensor in each room. Rooms that are empty or already comfortable get their damper closed, so more air goes where people are.

With ESPHome, the pieces are cheap: an ESP32 drives the dampers, and an LD2410 radar plus a temperature sensor in each room tells Home Assistant who is where and how warm it is.

The constraint that decides everything: airflow

Your furnace blower and AC coil are designed for a certain amount of air. Close too many dampers and that air has nowhere to go. Static pressure rises, the blower works harder, and:

  • In cooling, too little air across the evaporator coil can drop it below freezing. The coil ices over and airflow falls further.
  • In heating, too little air makes the heat exchanger run hot. The high-limit switch shuts the burner off, and repeated overheating shortens the heat exchanger's life.

So the first question isn't how many rooms you want to control. It's how much air you can take away and still stay in the equipment's safe range.

Working through the math

Here's the calculation for an example house: a two-ton single-stage air conditioner, a two-stage gas furnace, and eleven 6-inch round supply runs.

1. Find the design airflow

Air conditioners are usually set up for about 400 CFM (cubic feet per minute) per ton. Two tons is roughly 800 CFM.

2. Find the minimum

Many systems tolerate down to about 350 CFM per ton before coil freezing becomes a concern. For two tons, that's about 700 CFM. Your equipment's install manual may give a different figure; use it if it does.

3. Estimate what each run carries

800 CFM across eleven runs averages about 73 CFM per run. Real runs vary — short runs near the furnace carry more, long ones less — so measure with a flow hood or anemometer if you can.

4. See how much you can shed

The margin is 800 − 700 = 100 CFM. That's barely more than one average run. In cooling, this system can fully close about one room before it's in trouble.

That result surprises most people. A small single-stage system has very little room for zoning. Larger systems, variable-speed blowers and two-stage equipment have more.

5. Check heating separately

A two-stage furnace runs its blower slower on low stage, so the safe minimum is different. The number to check is the temperature rise: supply air temperature minus return air temperature. The furnace nameplate lists an allowed range (often around 35–65 °F). After closing dampers, measure the rise on each stage and keep it inside that range.

Designs that work within the limit

Partial closing instead of fully closed

Rather than closing an empty room's damper completely, set a minimum position — say 40% open. Five rooms at 40% sheds more air than one room fully closed, and no run goes completely dead. This is the best fit for small systems.

A dump zone

Pick one large, always-acceptable space, like a basement or main living area, whose dampers never close. It absorbs the extra air when other rooms close.

Only zone what matters

Often the real goal is narrower: bedrooms that are too warm at night, or an unused room you don't need to condition. Zoning two or three runs is much safer than zoning all eleven.

Barometric bypass dampers, which recirculate excess supply air back to the return, are another traditional answer. They protect the equipment but waste energy and can still let the coil run cold, so they've fallen out of favor.

Fail-safes the build needs

  1. Dampers that fail open. Choose spring-return dampers that open when power is lost, or design servo dampers so their unpowered position is open. A crashed ESP32 should never leave a run closed.
  2. Leave the thermostat in charge of the equipment. Let your existing thermostat (or a proper zone panel) decide when the furnace and AC run. The ESP32 only positions dampers. Wiring a microcontroller into furnace controls makes a software bug a heating failure.
  3. Open everything when Home Assistant goes away. If the ESP32 loses its connection, it should open all dampers rather than hold the last positions.
  4. Enforce the minimum in firmware. Put the minimum open position in the ESPHome config, not just in a Home Assistant automation, so no automation mistake can close more than the airflow math allows.

Here's what the third fail-safe looks like in ESPHome, checking once a minute:

interval:
  - interval: 60s
    then:
      - if:
          condition:
            not:
              api.connected:
          then:
            - servo.write:
                id: damper_servo
                level: 1.0   # fully open

Sensors per room

Each room needs two things: a temperature sensor and a presence sensor. A BME280 handles temperature (and humidity, useful for comfort in summer). An LD2410C handles presence, and unlike PIR it notices someone asleep. The config generator can build a combined room sensor with both.

Mount temperature sensors away from supply vents and outside walls, or they'll read the vent instead of the room.

Before you buy anything

  • Count your supply runs and note their sizes.
  • Find your AC tonnage and furnace model from the outdoor and indoor unit nameplates.
  • Measure total external static pressure today, with all registers open, using a manometer. If it's already near the equipment's rated maximum, there's no room for zoning without duct changes.
  • Decide which rooms actually need control. Fewer zones is safer and cheaper.