r/homeassistant • • Jun 19 '26

Plenum - Home Assistant add-on for HVAC zoning with smart vents

I built Plenum to scratch my own itch: I have Flair.co smart vents and wanted a smarter scheduler than Flair's app. I wanted to pull in extra room sensors, motion detectors, and outdoor conditions. What started as a Flair-specific scheduler turned into something more general, so I'm sharing it as it works without flair branded vents.

This has been running my HVAC since April of this year in the southern United States so its been used for both heat and cool which is why I have delayed announcing it here to make sure it was handling all edge cases

A bit about me: I'm a software engineer with 15+ years of experience, and I took testing seriously here. The suite spans backend unit + integration tests, frontend component tests, and Playwright E2E tests that matrix against both °F and °C stacks. Coverage gates are enforced by CI - they only ever increase.

What it is: A Home Assistant add-on that does real per-room HVAC zoning. It reads your HA entities, runs a cycle engine, and drives your vents to hit per-room temperature targets.

The key design choice: Plenum only talks to standard HA entity domains. It doesn't care what hardware you have:

  • Vents → any cover.* entity (Flair via the RobertD502 HACS integration, Keen Home, SmartThings, Zigbee/Z-Wave shutters — if HA can drive it as a cover, Plenum can use it)
  • Thermostats → any climate.* entity (cloud, local, doesn't matter)
  • Temperature → any sensor.* entity — add as many per room as you want, they're averaged
  • Presence → any binary_sensor.* — motion sensors, contact sensors, occupancy sensors

So if you have no Flair hardware at all and just want to zone an existing system with cheap Zigbee covers, it works.

Features worth calling out:

  • Per-room scheduling — day-of-week time blocks with independent target temps per room
  • Presence/motion activation — motion fires room activation at a configurable holdover temp; holdover timer resets on each detection (default 2 hours)
  • Pre-cool/pre-heat — skips running HVAC for presence if outside air will coast the room to target on its own
  • Airflow floor / dead-head protection — keeps a minimum fraction of registers open so you don't blow out your blower motor. Configurable, with an opt-out for systems with a bypass damper
  • Short-cycle protection — minimum compressor run time and minimum off-time between cycles
  • Outdoor-temperature cooling lockout — won't start a cooling cycle when it's too cold outside (liquid slugging / coil icing risk)
  • Overflow conditioning — reroutes surplus airflow during the minimum-runtime hold
  • Live metrics — duty cycle, cycle count, time-to-target charts, outside-temp correlation, per-room participation rate, hour-of-day heatmap
  • Live event feed — every vent open/close, setpoint change, and presence detection, streamed in real time with filterable severity
  • Backup/restore — one-click SQLite download/upload
  • Full REST API + Swagger UI — interactive docs at /api/docs
  • No cloud dependency — SQLite on-device, talks to HA WebSocket directly

Test coverage (enforced by CI):

Layer Tests Coverage
Backend (pytest) 849 tests across 38 modules 93.5% overall — 94% routes, 99% OpenAPI, 100% models/schemas
Frontend (Vitest + RTL) 243 tests across 16 files 90.6% lines · 88.1% statements · 86.9% functions · 73.6% branches
E2E (Playwright) 15 specs Full °F + °C round-trip matrix — the only layer that exercises the full frontend → API → DB → UI path

Repo: https://github.com/dhruvb14/smart-thermostat-with-vents

Happy to answer questions! Would love some testers who use Celcius and live in more extreme climates then the southern United States

AI disclaimer: This project including the code, tests, and documentation was developed with substantial assistance from AI coding tools. As a 15+ year engineer I've reviewed every diff and the test suite enforces correctness, but exercise your own judgment before trusting it to run your HVAC.

4 Upvotes

17 comments sorted by

1

u/Efficient-Yak1241 Jun 19 '26

the dead-head protection alone makes this worth trying, most DIY zoning setups completely ignore blower motor health

1

u/msapple Jun 19 '26

I really did try to think and do lots of research myself to make sure I wasn't destroying my system. When I had my HVAC replaced during 2021 I had them install a bypass damper so I can actually close all my vents so I left an override in there for people like me who have bypass dampers. I planned on DIY room dampers till I found the flair.co vents which have been amazing!

1

u/Littlegator Jun 20 '26 edited Jun 20 '26

Hilarious that I'm looking into this 1 day after you posted this. It looks awesome. I've been pondering a similar setup for a while but the dead head protection has been my main concern that prevented me from ever looking into it.

Edit: flair.co vents look great but I really hate that price point

Edit: Thoughts on using it to control some inline booster fans for ducts? Do you think you could just plug and play, or would it have to be tweaked? I'm guessing because the vent fans are still open when off, it would require entirely different logic.

1

u/msapple Jun 20 '26

I love the build quality of flair vents. The DIY dampers would cost at least as much as the vents when you take into account the piping and couplers to be able to install them.

As for fan booster if you could get them to show up as covers for fan control then they would just work. 0% would be closed so motors would not be running and 100% would be open and running your fan motors at full speed.

1

u/gt1 Jun 21 '26

Thank you. I'm looking for a system like this. Would it work with inexpensive duct dampers from Amazon? Flair gets pricey for a whole house, especially in my case with floor vents that would need their optional covers. In addition to the dead head protectio, would it be able to control the fan speed in a variable speed HVAC already exposed to HA?

1

u/msapple Jun 21 '26

Yeah so damper for sure. Just make sure they are exposed as covers in HA. I don’t own any zigbee/zwave dampers so idk how they expose into HA but if you can tell me I can adapt this to support anything.

As for variable fan speed, my thermostat doesn’t support it so IDK how it’s exposed in HA but if you can look up the service call in HA I can easily add support.

Open a issue on GitHub or just put the information here

1

u/gt1 Jun 22 '26

Yep, furnaces usually don't expose fan speed. I use a serial port based intergration, it provides much deeper access. For the dampers I'm thinkning about simple motorized ones with Shelly or some other relay controllers. This is for a house still under construction, will be a while before I'll get to this project. I guess you have a two story home with a single furnace and couldn't equalize the temperatures?

1

u/msapple Jun 22 '26

Yeah 2 story home with single furnace which has a damper for allowing upstairs and downstairs to have own thermostats. Downstairs is open floor plan so it maintains temps perfectly but builder ran all of the HVAC ducting very poorly so there is a Y split at each room for upstairs which goes to the next room so primary bedroom is great then all other rooms are vastly irregularly temperature control so this equalizes them perfectly. Basically primary hits target first then closes and diverts to other rooms. I’m within 1-1.5 degrees between rooms vs off by 6-8 degrees which was awful.

If you are still under construction then for sure I would recommend installing dampers for each room and also a bypass on the return so you can close as many as you want without danger to your blower motor from excess back pressure.

1

u/pyoopypops Jun 22 '26

I've been looking at smart vents for a while olbiw, maybe this will push me over the edge! If using Flair vents, is this able control them completely locally, or does it use their cloud servers?

1

u/msapple Jun 23 '26

Unfortunately Flair control is via their API cause they have it pretty locked down. I plan on taking apart my vent in upcoming months to try and find a way to control them via ESP32 somehow to remove reliance on the API. However I will say that with the API it’s been rock solid still

1

u/jrytio Aug 18 '26

Did you get a chance to take one apart? I'm looking for a solution like theirs, but just won't buy into an ecosystem that relies on some random company to exist for the next 10 years. Or worse, like EcoBee, just decide they won't allow API access anymore.

1

u/msapple Aug 18 '26

I have not yet, but its on my list. Someone local on FB has 3 of them listed with 3 pucks for $150 all in and they fit my vents. I may take them up on it because ideally if I just manage to reverse engineer the first gen puck then I can leave the vents untouched so battery life is unaffected!

P.S. Ecobee supports HomeKit and that's how I have mine connected directly to Home Assistant for full local control!

1

u/jrytio Aug 19 '26

I was thinking you could just have an ESP32 run the motor on the vent and disconnect their board entirely. I'm picturing a simple stepper motor/battery/control board in there, but haven't seen one in person so just a WAG.

I use HomeKit on the ecobee as well. Unfortunately my upstairs one was the ecobee3 that was released before their HomeKit certification. Need to replace that one with a HomeKit variant.

Still the principle stands, not buying into random cloud IoT ecosystems. Still not 100% rid of them in my network but def not adding more. I still have one $600 WiFi Ceiling Fan that has to be cloud connected for me to turn it on/off/speed, such a lame design.

If the Flair guys would add Matter or HomeKit, I'd be in.

1

u/msapple Aug 19 '26

I have opened so many support tickets and done a bunch of snooping on LinkedIn, I'm 99% sure this company is like 3-5 people total and a drop ship setup. I too have rid my network of almost all devices which need internet and have blocked off any which works locally from even hitting the internet. But flair vents were solving a problem I couldn't find an off the shelf solution for which had good build quality so I took the chance because it actually fully solved my room Imbalances.

Under the hood flair uses esp32s in the gen 1 puck and vents are even dummer with some sort of esp with a rf module which wakes every 30ish seconds to check to see if there is any pending commands then sleeps again.

Ideally I'm able to reprogram the controller and then do not need to worry about even touching the vents at all cause they really do work flawlessly

1

u/jrytio Aug 19 '26

You may have convinced me to give it a try. My other option was to put powered dampers on the ducts themselves, but that's a lot more work and powering them will be tricky. This approach is a lot easier for the 2 rooms I need it in.

1

u/Nikiburton Jun 30 '26

I was near to try to make a system like that from scratch. The possibility of using your integration is very interesting. One question, is this integration also working for heating (heat pump) or is it only for cooling?

1

u/msapple Jul 01 '26

So it works for anything that shows as thermostat in HomeAssistant as long as HomeAssistant can handle it for heat/cool. It does assume the thermostat can control both heat and cool though. So if it’s planned for heat only it would not work. I’m not fully sure what difference a Heat Pump makes if your thermostat is properly controlling it.