HVAC / Smart Vent Zoning control through HomeAssistant, no internet required (but recommended)

BLUF (Bottom Line Up Front): I want to see how many people are looking for controlling the A/C zones in their home with Home Assistant using schedules and presence combined, but not using someone else’s API or cloud service. This is something I want to build and see if other people would prefer it too.
See bottom of post for proposed solution

The current scenario:
I recently bought a mobile home and installed my nest thermostat. I have home assistant running and linked to google cloud, controlling the thermostat based on my wife’s location (she likes it set to 72°F when home, but has an odd schedule with work so a basic HVAC schedule does not work, and the Google presence sensing is not enough because she likes it cool when she gets home).

This works relatively well because I have multiple geo zones that set the thermostat to 78°F when she’s within 30 minutes of the house, 75°F when within 15 minutes, and 72°F when she enters the house (the HA app on her phone updates her location from GPS). The tiered structure is designed such due to her traveling job having one stop within 15 minutes of home (I work 11 minutes away and we also share one car). We get electricity savings because the system is not running full blast when we are not home, but the system is always ready for her when she does get home (side note, the A/C is not totally off when not home because we have pets that could overheat).

Another issue I have is that the thermostat is at the other end of the house from the master bedroom. She likes the temperature at 70°F during the night. The temperature at the thermostat stays ~70, but the master bedroom (right near the HVAC) gets either really cold or really hot (based on whether we have the vents adjusted or not). The hotter it gets outside, the colder it gets in our bedroom.

Troubleshooting:
To start data logging on this and start solving the issue, I bought a Govee BLE thermometer/hygrometer for $12 on Amazon, put it in the bedroom and configured HomeAssistant to listen for it (since BLE is not paired but just sends out beacons with the data).
I found the bedroom temp got no lower than 65°F and as high as 73°F, sometimes multiple instances a night. When it gets this high, my wife can’t sleep and kicks off the covers, then the A/C kicks on and freezes the both of us out.
Capture2

What I want:

  • Master bedroom consistently cool at night (as close as possible)
  • The rest of the house can get up to 78 after 10pm for all I care, and cool down a little around 6:30 am before work

How I want to solve it:

  • Use Home Assistant to regulate the temperature in the various rooms
  • Replace the Google Nest thermostat with something that works with HA without cloud requirement

Research on already-existing wheels:

  • Flair Smart Vents /w Puck
  • Keen Smart Vents
  • Ecobee Thermostat /w remote sensors

Issues with above:

  • Flair: This system seems to be the most complete, except the temperature sensors are at the vent, rather than in the room, causing the system to always read lower than what the room really is. It’s also the most expensive, and relies on the cloud.
  • Keen: These seem to only control the vents, not the HVAC, and is expensive & relies on the cloud
  • Ecobee: This is just a thermostat with remote sensors, and has no zone control but averages the house temp across all sensors. Also requires cloud access.
  • Other systems don’t have the 4x10 vents needed for my home, nor do they have rectangular ducts

Proposed solution:
Build my own smart vents and thermostat:

  • Using ESP32 (for each of the vents and replace the Nest)
  • Hobby servo motors
  • No batteries on the vents themselves (for my system, I’ll be running wires from each vent through the duct, as it’s all one level)
  • Build a thermostat add-on or integration to manage this ecosystem

EDIT 2022-07-14T16:20:00Z: Updated formatting and added screenshot of bedroom temp, clarified not having batteries on vents specifically

I know it was / may have been a lot to read. Thoughts or feedback?

My first home was a 12X60 in Stafford Texas. People don’t appreciate hot damned hot it can get inside an aluminum can in 100°F sun.

I think that you are overthinking the solution. I don’t think that a hobby servo motor would have the torque needed to move a typical duct vane, but maybe one of the 25kg might. I haven’t tried it. But if you find a working combination, please share.

Use 18/4 thermostat wire. I never thought of running wires through existing ducts. Thermostat wire is rated for -20ºC to +105ºC, so be aware of the output temperature of the furnace. In fact, fire it up and measure the temperature at a few locations where an ESP would be. Mine puts out 110°F at the vents closest to the furnace. You wouldn’t want to spend all summer perfecting the system only for it to literally fry in the winter.

Why 4-conductor? 2 for the servo power and 2 for the ESP. The servo motor can draw quite a bit of current so you want to power it separately from the ESP, otherwise moving the servo could reboot the ESP.

The ESP32 is overkill if all you are doing is controlling a single servo motor. My go-to board is the Wemos D1 Mini. I buy clones from AliExpress 5 at a time because they are only $5. I’ve only had one casualty, and I’m not sure it wasn’t something I did. Even an ESP-01 ($1 each) would be sufficient.

This sounds like a perfect project for ESPHome. I know you don’t like batteries, but for the temperature sensor you could use Zigbee devices and change the batteries when you change the smoke detector batteries. If you REALLY don’t like batteries, you could easily put a Dallas DS18b20 on each ESP. The problem here is that you don’t want the DS18b20 inside the duct and you would need to run wires to put the DS a few feet from the vent.

One step at a time. Don’t even think about presence detection yet because there’s a lot of solutions. Personally, I use Life360.

Please keep us posted on the progress because I want to do something similar in my home.

2 Likes

Lots of good feedback!

Very true. I just bought a 3D printer (for this and other projects, arrives on Saturday) so was hoping to build it into the frame of the vent itself, rather than duct vanes.

Good idea. I really don’t want the wire melting… I was thinking about running the wires through the vent using a remote controlled car, because of the level surfaces.
Also, you gave me an idea. Why not build a control board into the AC unit and have one ESP32 in there that controls all zones, and the unit as well? The wires would still run to each vent, with one servo at each vent. I might also want an airflow sensor and possibly a temperature sensor at the vent, just to make sure if the vent should be open and I don’t have airflow, throw an error. Especially, all vents are closed, turn off the system to protect itself. I don’t want the HVAC/furnace frying or causing a fire.

Well… I should have clarified. I didn’t want batteries powering the vents, because of the system possibly failing to work and getting damaged. I think the Govee BLE room temp sensor is totally fine, especially since I can monitor its battery power too via HA.

Definitely will investigate.

Thank you! I do have a habit of building elaborate designs in my head and then they don’t work out on paper. Step by step is something I am fighting for. Thanks for the encouragement!

I think I was using the term loosely (e.g. “X phone is detected at home”), but yes, that is something I do want to be able employ in the future (possibly PIR modules).

Again, thank you for the feedback. I typically try to do things on my own and not get input from other people, so this is requiring me to step out a little.

I was wondering what would be the advantage of an ESP at each vent. With a single ESP you would only need three wires to each servo. Maybe a couple more for other sensors, but then you have the problem of wire length. I would be inclined to put an ESP on each vent for the option of additional sensors.

Well, I have a 3D printer now, and I’m looking for some good stl files of smart vents, but all I can find is the vent covers that people have posted. Do you have any smart vents already? I could use the pictures, because nobody seems to have disassembled any and posted them online.
If not, I can build a model based on the existing manual ones in my home.

Also, I’m planning on using one ESP32 in the AC unit, and will figure something out for an interface other than Home Assistant if/when it’s offline or unreachable.

No. Too expensive.
I don’t think you will find a complete project anywhere because a full-size register would be too large for most 3D printers.
This one looks hackable. You might buy one to reverse engineer the motor control. I would not be surprised to find an ESP8266 inside. If that’s the case you are 90% done. If not, I would rip out the controller and wire in my own ESP (Wemos D1 Mini is my go-to ESP board at $5 each). The instructions imply that there is a 24VAC power supply inside, so you would just need to supply 24VAC from your air handler and control the Wemos over ESPHome.

Here’s an interesting resource on the subject of multi-zones:

These came in today. I’m going to replace the thermostat here in a day or so and then can start working on testing out servos.

Thanks Google Feed!
Here’s a potential solution!

Forget potential, Tony Brobston (and team?) have knocked this one out of the park!

Okay, so I jumped the gun in thinking a complete solution was available, but there is a ton of info on his page.
Update on progress made over the weekend:
I’ve integrated my relay board into my HVAC (will capture pics of the setup tonight, but it’s not pretty lol), and added a few more temp sensors to my house (original: front and master bedrooms, added livingroom and office), as well as added four virtual thermostats for the different zones (master bed, livingroom, office, front bedroom).

I created virtual switches for each of the thermostats, then used an automation to tie them all together using OR/AND logic (if any tstat on, turn on HVAC, all off, turn off).

Thermostat grouping:


4 thermostats in a graph:
image
–more screenshots coming soon–

Code, in order of what needs to be built first:

input_boolean.yaml:

# Master Bedroom
hvac_cooling_mrbr:
  name: HVAC Cooling Master Bedroom
  icon: mdi:snowflake
hvac_heating_mrbr:
  name: HVAC Heating Master Bedroom
  icon: mdi:fire
hvac_fan_mrbr:
  name: HVAC Fan Master Bedroom
  icon: mdi:fan

# Front Bedroom
hvac_cooling_frbr:
  name: HVAC Cooling Front Bedroom
  icon: mdi:snowflake
hvac_heating_frbr:
  name: HVAC Heating Front Bedroom
  icon: mdi:fire
hvac_fan_frbr:
  name: HVAC Fan Front Bedroom
  icon: mdi:fan

# Livingroom
hvac_cooling_lvrm:
  name: HVAC Cooling Livingroom
  icon: mdi:snowflake
hvac_heating_lvrm:
  name: HVAC Heating Livingroom
  icon: mdi:fire
hvac_fan_lvrm:
  name: HVAC Fan Livingroom
  icon: mdi:fan

# Office
hvac_cooling_ofc:
  name: HVAC Cooling Office
  icon: mdi:snowflake
hvac_heating_ofc:
  name: HVAC Heating Office
  icon: mdi:fire
hvac_fan_ofc:
  name: HVAC Fan Office
  icon: mdi:fan

climate.yaml:

- platform: dual_smart_thermostat
  name: Master Bedroom
  heater: input_boolean.hvac_heating_mrbr
  cooler: input_boolean.hvac_cooling_mrbr
  target_sensor: sensor.master_br_temperature
  min_temp: 40
  max_temp: 80
  target_temp: 69
  target_temp_high: 69
  target_temp_low: 63
  cold_tolerance: 1
  hot_tolerance: 0.5
  min_cycle_duration:
    seconds: 900
  keep_alive:
    minutes: 3
#  initial_hvac_mode: "off" # hvac mode vill reset to this value after restart
  precision: 1
  
- platform: dual_smart_thermostat
  name: Front Bedroom
  heater: input_boolean.hvac_heating_frbr
  cooler: input_boolean.hvac_cooling_frbr
  target_sensor: sensor.front_br_temperature
  min_temp: 40
  max_temp: 80
  target_temp: 78
  target_temp_high: 78
  target_temp_low: 72
  cold_tolerance: 1
  hot_tolerance: 0.5
  min_cycle_duration:
    seconds: 900
  keep_alive:
    minutes: 3
#  initial_hvac_mode: "cool" # hvac mode vill reset to this value after restart
  precision: 1

- platform: dual_smart_thermostat
  name: Office
  heater: input_boolean.hvac_heating_ofc
  cooler: input_boolean.hvac_cooling_ofc
  target_sensor: sensor.office_govee_temperature
  min_temp: 40
  max_temp: 80
  target_temp: 78
  target_temp_high: 79
  target_temp_low: 72
  cold_tolerance: 1
  hot_tolerance: 0.5
  min_cycle_duration:
    seconds: 900
  keep_alive:
    minutes: 3
#  initial_hvac_mode: "off" # hvac mode vill reset to this value after restart
  precision: 1

- platform: dual_smart_thermostat
  name: Livingroom
  heater: input_boolean.hvac_heating_lvrm
  cooler: input_boolean.hvac_cooling_lvrm
  target_sensor: sensor.livingroom_govee_temperature
  min_temp: 40
  max_temp: 85
  target_temp: 78
  target_temp_high: 80
  target_temp_low: 66
  cold_tolerance: 1
  hot_tolerance: 0.5
  min_cycle_duration:
    seconds: 900
  keep_alive:
    minutes: 3
#  initial_hvac_mode: "cool" # hvac mode vill reset to this value after restart
  precision: 1

ESPHome config (very basic, eventually the sensors will be inserted here for direct monitoring):

esphome:
  name: hvac-controller

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: <redacted>

ota:
  password: <redacted>

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Hvac-Controller Fallback Hotspot"
    password: <redacted>

captive_portal:


switch:
  - platform: gpio
    name: "heater"
    pin: 21
    id: heater
  - platform: gpio
    name: "air_cond"
    pin: 19
    id: air_cond
  - platform: gpio
    name: "fan"
    pin: 18
    id: fan
  - platform: gpio
    name: "Extra Relay"
    pin: 5
    id: relay



Cooling Automation yaml (this ties all the thermostats together, will be additional ones for heating [which will contain exclusivity logic so we don’t have AC and heater on] and fan later):

alias: HVAC Cooling
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.hvac_cooling_frbr
      - input_boolean.hvac_cooling_mrbr
      - input_boolean.hvac_cooling_lvrm
      - input_boolean.hvac_cooling_ofc
condition: []
action:
  - if:
      - condition: or
        conditions:
          - condition: state
            entity_id: input_boolean.hvac_cooling_frbr
            state: "on"
            for:
              hours: 0
              minutes: 0
              seconds: 0
          - condition: state
            entity_id: input_boolean.hvac_cooling_lvrm
            state: "on"
            for:
              hours: 0
              minutes: 0
              seconds: 0
          - condition: state
            entity_id: input_boolean.hvac_cooling_mrbr
            state: "on"
            for:
              hours: 0
              minutes: 0
              seconds: 0
          - condition: state
            entity_id: input_boolean.hvac_cooling_ofc
            state: "on"
            for:
              hours: 0
              minutes: 0
              seconds: 0
    then:
      - type: turn_on
        device_id: 00f31df0dd7d700cc6124f3dcac4d230
        entity_id: switch.air_cond
        domain: switch
  - if:
      - condition: and
        conditions:
          - condition: state
            entity_id: input_boolean.hvac_cooling_frbr
            state: "off"
            for:
              hours: 0
              minutes: 0
              seconds: 0
          - condition: state
            entity_id: input_boolean.hvac_cooling_lvrm
            state: "off"
            for:
              hours: 0
              minutes: 0
              seconds: 0
          - condition: state
            entity_id: input_boolean.hvac_cooling_mrbr
            state: "off"
            for:
              hours: 0
              minutes: 0
              seconds: 0
          - condition: state
            entity_id: input_boolean.hvac_cooling_ofc
            state: "off"
            for:
              hours: 0
              minutes: 0
              seconds: 0
    then:
      - type: turn_off
        device_id: 00f31df0dd7d700cc6124f3dcac4d230
        entity_id: switch.air_cond
        domain: switch
mode: queued

1 Like

3D ppriner willnot work unless you can design you own stuff with 3D CAD software.

Then yu find the printable plastic can not take the heat. It wil get soft if used as a heating vent.

But no need. you can but moterizd vents at Home Depot. Then all you need to do is add the ESP32 for control.

Thanks for posting this!, just about to jump into making my ducted system into more zones, smarter too!

1 Like

Specifically addressing the Keen Smart Vent. You mention under issues " Keen: These seem to only control the vents, not the HVAC, and is expensive & relies on the cloud"

It seems that Keen has been short lived. They were on Shark Tank in 2015. Merged with Ecovent in 2017. Then in 2019 Keen and Ecovent were acquired by ConnectM. After that the website basically went dead. The founders left the company in 2022.
( source: [What Happened To Keen Home Smart Vents From Shark Tank Season 6?] )

So, yes, they were expensive, but now they can only be found on ebay, for those outrageous prices. But they don’t rely on the cloud. They are Zigbee based and don’t need the Keen app at all.

I picked one up, brand new in box, from a thrift store for $20 which I thought at the time was double what it should go for until I realized it has a temp and pressure sensors built in.

I’m debating doing a teardown on it to see what chip it’s based on.

2 Likes

Very interested in this. Just bought a flair vent and a puck to try it out - although I hate having to use the cloud. HA Supervised with a Nest learning thermostat and most of an older home with forced air heating/cooling - is fully automated except for the vents - some rooms cold, some hot, etc. etc.

So looking forward to maybe removing the puck and making this (and possibly others) local - and following your journey -

Two questions, 1 interesting and 1 boring…

  1. I have bought into the flair paradigm and am in the process of instaling 10 flair vents in my home. They are very well made (strong metal construction) and have a paradigm of one ‘puck’ that is a hub for all of themn to connect. The Homae Assistant flair HACS integration is terrific and I already have it up and running. (They open/close based upon the HVAC fan starting and stopping as well as room temp vs. the thermostat setting but are also only open if there is someone also in the room.) The vents also monitor temp at the vent (not very useful) as well as air pressure at the vent. I already have all the other temp sensors in rooms etc. and I can give up the air pressure measurement if I have to. I loathe to use something cloud based, but am certain I can reverse engineer one (and then the others) to control locally. I just need some direction on how to connect a wifi based controller to the motor in the unit. These units can run on battery or 24v. My guess is the vents use something other than wifi to talk to their hub to save power. Therefore I plan on getting rid of the batteries and power them on the 24v - and then I can use that same source for the wifi based controller. Thoughts on where I can start on investigating how to proceed? (It may be very easy, just let the new and old circuitry both control the vents - connect the wifi controller simply to the motor & 24v power supply)?

  2. We love our very old home - here are some photos on the rough installations, to be “beautified” later. Rather than plaster of paris to be able to have the vent/s closer to the floor I am thinking of raising them up and putting trim underneath them so that if we hide the floors with wall to wall carpeting then vents are stll above that. - is there a typical installation standard?.. thoughts?

In the kitchen - I was stuck doing this one this way, beloved wallpaper pattern no longer available:

Need futher cleanup but I wanted this one near the floor as this room would never have carpet - or better to put…

…trim under it like I was going to do here (as wall to wall carpeting might be put back in here:?

Funny side effect - now my dog is scared of the vents… when they occassionally make a little sound to open or close he thinks there something living behind them

To change the standard SVG logo in Magento for groentopia.nl, you’ll want to access your store’s admin panel. Once there, navigate to the “Design” section and select “Theme Configuration.” From this menu, you can upload and configure a new SVG logo to replace the default one. Ensure the new logo adheres to size and format requirements for optimal display on your online store. Additionally, if you’re interested in design software, I recommend checking out Autodesk Autocad 2025. It’s a powerful tool for professionals in creative and technical fields.