We have a standard dual zone HVAC system in our house split into two levels, upstairs and downstairs. I’ve setup schedules to be in-tune with our regular life so that we’re not wasting energy heating or cooling areas which are not occupied. That type of optimization is fairly simple — we’re upstairs at night, downstairs during the day — the rest is standard.
The problem is in our house the second floor thermostat is in our master bedroom and due to the house construction, maybe a 50 inch TV and some other electronics in our bedroom, our bedroom is 4-5 degrees warmer than the other 3 bedrooms on the 2nd floor. This goes for summer and winter. I’ve used a seek thermal camera
to check air temperature and see if there are heat/cold air leaks near the windows or doors and there are none, so it’s not an insulation issue. I checked air movement in the vents in all rooms, and the CFMs are within range and properly balanced for square footage of each room. Clearly, there has to be some solution to control the temperature in each bedroom.
The standard HVAC solution is complicated and expensive — it involves installing wired thermostats in each bedroom, connecting them to an expensive multizone controller in the basement, installing powered dampers connected to that same multizone controller.
A smarthome solution is the only cost effective option. I already have WiFi enabled thermostats. Inexpensive, Radio Thermostat CT50 which have an open easy to program against API.
I already had written full smarthome control of these thermostats, so the question was how to control air movement in each bedroom. The answer is going back to the HVAC solution, a powered damper, but with standard power control. I used again an inexpensive option — a Suncourt 8 inch normally open damper with a power supply.
This damper is installed into the main manifold in the attic for each bedroom. If the damper is switched on, the air flow to that room is shut off. Next step is a way to control if the damper is powered. Since my home automation system is Insteon based, I went with an Insteon OutletLinc, a remote control outlet.
Next is how to know the temperature in each bedroom. The master bedroom has the main second floor wired thermostat, now I needed wireless thermostats. Again, since my HA system is based on Insteon, I went with Insteon wireless thermostats
This thermostat communicates the temperature changes to the server and the server is able to control the state of each damper. Next is putting it all together.
The Radio Thermostats have API where with some programming I am able to figure out what the scheduled target temperature is supposed to be at any given time. The API also provides the ability to override the target temperature and set a hold temperature, that’s the key to the programming of the “Thermostat Engine” which I wrote. We have 2 rooms upstairs which are presently occupied, master bedroom and our daughter’s room as well as guest room, which is occasionally occupied with grandparents, or friends. We wanted the ability to do a few things in a perfect world, that includes having our daughter’s room a little warmer than our room, and not heat or cool the guest room, when there are no guests, and not heat or cool the 4th bedroom, well really ever. Logically, when I say not heat or cool a particular room, I am not saying I would let that room get bellow a certain temperature or above a certain temperature. Also, allow to bring our daughter’s room to temperature during her bed time and her naps, which do not coincide with our sleep schedule.
So the engine works in the following fashion. I set up an ability to set heating and cooling offsets. Then I also allow for specific overrides for each room based on time windows. So for example, if the main thermostat is set to not start heating the upstairs until 9 pm, then from 8 am to 9 pm, the upstairs set point would be 62, and at 9 pm it would be 68. But our daughter goes to bed at 6:30, so a specific override for her room would be from 6 pm to 9 pm 70 degrees. Then offsets for the 4th room are set to +7 for cool and -7 for heat. This means if the main thermostat targets are 68 heat, and 70 cool, the 4th room targets would be 61 heat and 77 cool, not ideal for us, but works well to save some money on cooling and heating bills.
The idea of the programming for the engine is that it kicks in whenever temperature changes in any room, whenever the primary thermostat target changes (meaning the time schedule indicates the target is different), or if there have been no activity in the last minute, this allows to run a programming loop at least once a minute, providing for overrides, and whenever the temperature changes. The programming loop decides if a room needs heating or cooling simply by comparing the computed room target temperature to the current room temperature, knowing the current mode (heating or cooling). Once the engine knows which rooms need heating or cooling — then it can open and close appropriate vents. The trick is how to turn on the heating or cooling when the primary thermostat doesn’t need heating or cooling. That is done by setting the primary thermostat hold temperature 2 degrees cooler or warmer than the current primary temperature, and closing the master bedroom vent. This will funnel the hot or cool air to the rooms that need it and keep the master bedroom at the current scheduled target. When none of he secondary rooms need heating or cooling any more, then the hold temperature is cleared, and regular schedule is resumed. The last step to the engine is that it knows if it set hold on, or if it was set manually, so if it was set manually, the engine will not kick in, this allows to manually set a target temperature in the house, thus not interfering with regular thermostat operation.
Using this system I am able to fully configure the target temperature in each room. After getting all the bugs out of the system, our oil and electricity usage is significantly lower than before putting the Thermostat Engine online, plus our house is a lot more comfortable to be in.