[Release] HVAC Zoning & Ventilation Control

One thing that surprised me (and maybe it shouldn't have) is how s-l-o-w-l-y the T6 temperature reading changed when I moved it from the house to out front where it was 10 degrees colder (68 vs. 78). It must have taken 10 minutes for the T6 reading to fall to 70.

I assume that's intentionally throttled so your thermostat doesn't jerk your HVAC system around if the front door a window is open for a bit and a blast of cool air comes by.

Thank you. I will add the T6 to my list of successfully tested thermostats.
Also, my GoControl thermostat arrived last night and I have confirmed that it works well for this application.

1 Like

Now that my iBlinds are working I'm ready for a new challenge!

Any recommendations for Hubitat controllable, no cloud services required, dampers/registers?

Battery powered would be great.

Thanks for any suggestions.

I have recently installed a couple Keen vents. It was straight forward to link them to Hubitat via Zigbee. I am not using the Keen software, so there is no cloud dependence.

The zone dampers in my house are conventional 24VAC zone dampers. I use a Zooz ZEN16 multirelay to be able to control them from Hubitat.

A new version of my HVAC App will be released shortly. I have completed systematic testing and have had it working in my house for several weeks. I am in the process of updating the documentation.


FYI - A recent post said that Keen has supply chain issues...finding the vents may be difficult:

I got an email from Keen yesterday saying that my order of 3 4x10 vents has shipped. I'm confused by the email since I canceled the order after I got used vents. We'll see what shows up on my porch and on my credit card. The Keen website shows most sizes as out of stock.


Thank you for the suggestions!

The Keen vents look perfect. Unfortunately, I would need the larger size so supply any time soon seems unlikely.

I will subscribe to their newsletter and check back.

I got a couple of vents from ebay, and ordered just some sizing trims from Keen direct back in the middle of December. I got no shipping confirmation, so I emailed them this week to just cancel the order.
So they basically have nothing in stock. But their customer support is definitely online and responsive!

Today, I am releasing V0.3 of this App. The App controls the following types of HVAC equipment:

  • Single and Two-stage Forced Air Heating and Cooling Equipment
  • Zoned and Non-zoned duct systems, including systems with controllable registers and duct fans
  • Ventilation equipment, including ventilation equipment that utilizes the blower.
  • [New this version] Humidifiers and Dehumidifiers, including equipment that utilizes the blower

The largest change in this version is a re-structuring of the zone and subzone child apps to eliminate the 3 levels of App hierarchy of the previous version. In this version, zones and subzones utilize the same child App. Another significant change is that zones communicate with the main App and with subzones mostly via devices of a new device type. Due to the level of restructuring of the App, there is no update process from the previous version. Anyone using the previous version needs to uninstall the old one and install the new one.

The updated PDF documentation is at: HVAC/HVAC Zoning App.pdf

The easiest way to install the App is with Hubitat Package Manager. The App code can also be downloaded directly at:
and the Device Driver can be downloaded at:

1 Like

Hey Reid...I'm putting together a zoning system and am hoping to use your app as part of it. However, I'm planning a configuration you likely did not have in mind when you developed this. Here is my core setup.

1-stage heat, 1-stage cooling forced air system.
Three trunk ducts with 24 VAC Normally open dampers.
Ecobee thermostat with 3 remote sensors (1 for each zone)
Two Zooz ZEN16 devices (still in transit)
Home Assistant relaying Ecobee state and sensor values to Hubitat (fully local and seems to be fast, accurate, and reliable)

As I've mentioned to you previously, I would prefer that the Ecobee be the primary (really the only) controller for the system and not have the ZEN16 wired to the air handler. The ecobee allows the user to select which sensors are included for each comfort setting (ie. Home, Away, Sleep, etc.). The Ecobee switches between comport settings based on the schedule or user selection.

My intent is that the Ecobee would generate a call for heat, for example. The app would see that call for heat, compare it against which zones are currently active, and send the heat to those zones by closing the dampers on any inactive zones. I can create virtual switches and rules in HE so that the active sensors in the Ecobee are correlated to active zones in HE.

Because I've only got the one thermostat and the other "zones" will be unable to initiate heating or cooling commands, it seems like I won't be able to configure the app as intended. My initial thought is to configure your app in "single zone" mode and treat each damper as a subzone. I would adjust the closed position of the dampers such that even when the smallest zone is active, the others would be open just enough to ensure minimum airflow needs are met.

What are your thoughts on this setup?

Getting two control systems (Ecobee and my App) to work together may be a little like have two builders work together to build a house. You have to sort out who is the prime contractor and who is the sub-contractor. Often, both want to be in charge and want the other to just provide information and then do what they are told. In this case, both system want to at least believe that they are controlling the air handler. I can imagine a setup where they actually work together (while both thinking they are in charge).

The software expects a thermostat for each zone, but that can be a virtual thermostat which is fed a temperature signal from your Ecobee remote sensors. If I understand your setup correctly, if the Ecobee is using several sensors, it might not generate a command for heat when one of those virtual zone thermostats does call for heat. However, if the Ecobee is using only that sensor, then it should then generate a heat call. So, you could use one of the ZEN16 relays as the zone selection switch and then have rules in RM that responds to changes in those switch devices by adjusting which sensors the Ecobee uses (to whichever ones are calling).

You will need to have virtual switches that the App sets when it wants to turn on the furnace or air conditioner. If your Ecobee does the actual work of turning them on (and off), then you can ignore the status of those virtual switches. I recommend having a dashboard that displays the switches and the Ecobee so you can monitor whether it is doing what you expect.

I am not that familiar with Home Assistant.

How did you come to have a system with three trunk ducts and only one thermostat? Did you previously have more thermostats and a zone controller?

That was my logic behind proposing the single-zone w/ sub-zones configuration. In this setup the app basically just passes heating/cooling calls straight through. There should be less opportunity for conflicts.

This is correct...with one potentially significant caveat. If multiple sensors are in use (ie. multiple zones are "occupied") it will average the temperature values. For example, my "Home" program uses the main floor and upstairs sensors. So if the main floor is 70 degrees and the upstairs is 68 degrees, the ecobee responds as if the current temperature is 69 degrees. In this case my preference would be for the warmer zone to shut off when it is satisfied, sending more heat to the cooler zone.

I have questions here, but I think it may be more clear once I have the ZEN16s installed and the app setup.

THat makes two of us!

When we had the house built I had made sure I could add a zone system down the road. Even have thermostat wiring run to each level...although I'm not sure I remember exactly where its at anymore (someplace behind the drywall). With an unfinished basement I just had the hand dampers set at a position that kept the main and upper levels comfortable. Now that the basement is finished I need a bit more control.

I got my Zooz relays today and am working on getting the app setup. I'm assuming that subzones also need a [virtual] thermostat and not just a simple temperature sensor?

I've also been doing some airflow and temperature rise measurements on my furnace and so far I'm seeing that I have less airflow than I'd like. Even after replacing my filter and speeding up my fan my temperature rise is on the high end of what the unit is specified for. My next step is to wire both the heat and cool outputs to the HIGH fan speed, but there's a good chance that two of my three zones will not be able to operate individually. I was really hoping to get down to a single zone for my "sleep" mode and just heat the bedrooms on the second level.

If I configure my zones such that the closed position is still 15% (or 30% or 50%) open, does the app assume that a portion of the air handler's supply air will go to that zone even if it is not calling for heat? That may allow me to get most of my conditioned air to the zone I want without requiring a second zone to be calling for heating/cooling.

The current version does require a thermostat for every zone including subzones. The previous version had an option of using just a temperature sensor, but I eliminated that. Allowing that option made the code more complicated and I reasoned that setting up a virtual thermostat should be simple for people who have a temperature sensor.

Your understanding of the Apps handling of airflow calculations seems correct. For each damper, it asks for the percent open in the closed position. If that is not zero, then it assumes some flow to that zone anytime the blower is running, thus reducing the capacity required for another zone to run by itself. For example, if your air handler produces 1000 cfm, it would ordinarily not serve a zone with a capacity of 900 cfm unless other zones call. However, if you have another zone with a capacity of 800 cfm that is 20% open in the closed position, then the minimum capacity requirement goes down by (800)(0.2) = 160 cfm. Therefore, your 900 cfm zone does get served even if it is the only one calling. If you also want the 800 cfm zone to be served alone, then you would need the 900 cfm zone to also be slightly open in the closed position.

Another option, which you may not need based on how you are configuring your dampers, is to have some zones volunteer to accept heating when they don't have a heat call. There are a bunch of conditions you can set to decide when a zone should accept heating, like modes, temperature/setpoint difference, etc. When one zone is a subzone to another, the subzone does not get served unless the parent zone is either calling for heat or has volunteered to accept heat in the current condition.

With your zone dampers, you should set up all three zones as primary and not as subzones, even if your "main" thermostat is located in one of them. Subzones are for when the damper is located away from the furnace, like controllable registers, such that the zone beyond the damper cannot be served without also serving the upstream zone.

I've been tinkering with my setup over the past few days have a new appreciation for the amount of effort your app must've taken. After setting up one zone in the app, I got frustrated when attempting to set up a virtual thermostat. So I decided to put the app on the back burner and just wrote some simple rules within RM to close certain dampers under certain conditions. Everything seemed to be working as intended until one morning I noticed that all of my dampers were closed while my furnace was running (there is enough bypass airflow to keep things from tripping high limit switch). It looks like the ecobee was still in the "Sleep" setting (64 deg. setpoint) but was already heating in anticipating for the transition to the "Home" setpoint of 70 degrees. So my zones were all over setpoint by about a degree and getting warmer. This was conflicting with a rule I had set up to close the damper to any zone that was 0.5 degrees over setpoint in order to direct air to the under-served zones. With the setpoint still at 64, the zones all at 65 or more, and the ecobee still heating, things got all screwed up.

I haven't spent any time trying to work out a new RM method to overcome this, but I'm looking to give your app a second go. Do you have any recommendations for an app or rule to update the virtual thermostat attributes? I need something to push the data from the temperature sensors, modes, etc. into the virtual device. I'm sure I could write the rules myself, but don't want to recreate the wheel if someone else has already done it better.

My backup plan will be to control the modes of the Ecobee directly from HE/RM (requires WiFi and API available) and only use the built-in schedule in case of a WiFi outage. This seems possible, but like way more work.

Could this be your problem, no refresh method defined on the virtual thermostat driver?

I am using vThermostat from nclark. You specify a temperature sensor when you set up the app. The app creates a thermostat device.

In the past, I have used the built-in virtual thermostat. With that, you need a rule like the one below to get the temperature value from the temperature sensor to the virtual thermostat. Note that it is copied first to a local variable.

Virtual thermostats and my App may not solve the issue you discuss above. Your Ecobee might "outsmart" your virtual thermostats the same way it outsmarted your simple rules. On the one hand, you want the Ecobee to behave the way you expect it to. On the other hand, you want it to exercise some deeper "intelligence". Those goals may be incompatible. You can't hire a famous architect and then expect them to just draw the house you tell them to draw.

I'm beginning to see that... but too stubborn to give up just yet...

I encourage you to continue experimenting as long as you are enjoying it and your family doesn't get too concerned that they might wake up in a cold house due to your experiments. If you reach a point where either of those things are not true, then go out and buy two more thermostats.

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.