Our Air Conditioner Was Fine… I Fixed It Anyway

The Problem

Living in Australia means dealing with both ends of the temperature spectrum. Summers easily push above 40°C, and winters drop to freezing. That means air conditioning and heating aren’t just nice to have — they’re borderline essential.

In our house, we’ve got a ducted reverse-cycle system: a large heat pump tucked in the roof, blowing air through ducts to each room. Overall, it’s a great system. But after installing some ceiling-mounted presence sensors, I started noticing some frustrating inefficiencies.

Despite setting the thermostat to 20°C, smaller rooms were blowing past 25°C before the larger living space — where the thermostat lives — even got close. That’s not just uncomfortable, it’s wasteful.

Worse still, we were heating and cooling rooms nobody was using. While I’m in the office working, there’s no reason the guest room should be just as toasty.

What I needed was zoning — the ability to open and close specific ducts depending on which rooms were in use, and how close they were to their set temperature.

Sure, commercial zone controllers exist, but most of the options I found were either cloud-connected (no thanks), overly simplistic, expensive, or just didn’t integrate cleanly with Home Assistant.

So naturally, I built my own.

My Solution

The basic idea was to split the house into zones, using motorised dampers to open and close air ducts as needed. Each zone would get its own virtual thermostat, powered by ESPHome and fed by data from our existing presence sensors.

The Hardware

I used 24V AC dampers — common for HVAC systems in Australia — which are simple devices: apply voltage to one pair of pins to open, another to close. Each damper has built-in limit switches to stop the motor at the end of its travel.

To control them, I picked up a KC868 relay board from KinCony. It’s an ESP32-based board with 8 relays, ethernet support, and costs about $30. Ethernet was important — I prefer wired reliability for critical systems like climate control.

The board runs on 12V DC, but the dampers need 24V AC, so I added a dedicated AC power supply (the kind typically used for irrigation systems). A passive PoE splitter handles power and data over the same ethernet cable.

For neatness and serviceability, I mounted everything inside a weatherproof junction box with RJ12 passthrough connectors for the dampers. That way I can swap or test individual dampers without rewiring anything.

The Logic

Each damper is represented as a climate component in ESPHome, with its own temperature sensor (from our ceiling-mounted Everything Presence sensors). These thermostats are all slaved to the main living room thermostat — change one, and the rest follow.

The idea is simple:

  • If a room is enabled and hasn’t reached the set temperature, its damper remains open.

  • Once it hits the target, the damper closes to prevent overshooting.

  • As more rooms reach their targets, airflow is concentrated on the remaining zones, helping them warm up (or cool down) faster.

But there are some gotchas.

For example, if all the actively heated rooms reach their target temperature while the main thermostat’s room (the living room) remains closed off, the system could keep running indefinitely — or worse, over-pressurise the ducts.

To prevent that, I built logic to:

  • Turn off the main thermostat once all active zones are at temperature.

  • Ensure a minimum number of dampers remain open at all times to prevent duct pressure issues — even if no zones technically need heating or cooling.

Finally, we use occupancy detection to turn zones on and off automatically. If a room is unused for 30 minutes, it’s excluded from conditioning. Walk into it? The damper opens again.

Conclusion / Performance

So, does it work?

Kind of! It’s not perfect — I’m still refining some of the edge-case logic — but overall, I’m really happy with it.

Rooms no longer overshoot their set temperature nearly as much. The system heats up faster, and it’s noticeably more comfortable, especially during our morning routine where the bedroom and bathroom are prioritised for warmth before the rest of the house.

Even better, my office gets up to temperature much faster during work hours, and unused rooms aren’t wasting energy anymore.

Will it save money long term? Maybe. But even if it doesn’t, the comfort factor alone makes it worth it to me. And most importantly, it’s fully local, flexible, and entirely mine.

If you're interested in the ESPHome configuration, you can find the files on GitHub — just don’t judge my YAML too harshly.

Next
Next

VHS was better...Hear me out.