Jump to content

Prioritizing Thermostats using dynamic cycles


oskrypuch

Recommended Posts

Posted

I have four T1800s in the house, together with some floor heating zones as well, and some circulation fans. I have ISY control all these, and change their settings automatically and dynamically based on the time of day as well as the "season" (summer-hot, summer, spring/fall, winter, winter-cold). The season is determined by the current temperature and wind chill outside, for a given time of day.

 

This all works very well, but sometimes I want a certain zone to be given priority, the bedroom before going to bed in the summer, or first thing in the morning in the winter. In addition you may wish to give priority to the main floor cooling in the summer, sacrificing the second story until the main floor is satisfied.

 

You may also wish to have a priority button, that will cool (or warm) a given zone rapidly under manual control.

 

The priority mode closes all the other zones for a period of time, and then cycles them back on/off, until the prioritized zone is satisfied, or until the condition driving the priority is extinguished.

 

 

In any case, the possibilities are many. I wrote a set of programs, the key elements from one zone I highlight below. This is yet another example of machine state programming.

 

There are three levels of program flow, arbitrarily dubbed L1, L2 and L3. L1 can trigger/stop the L2 logic, and in turn L2 controls L3. Control is triggered by passing a true/false state. I use a program variable (vice v3+ variables) for that just by force of habit.

 

The L1 level is where I define the conditions that drive the potential priority setting. For example, if it is morning and it is winter, then do something. When the condition is true, then L2 is triggered by setting condition program variable. There can be any number of L1 priorities, or rules, each having a START and STOP program.

 

Once L2 is triggered, then it decides whether to start the priority cycle depending on whether the current zone is calling, and whether others are calling as well. As appropriate, it triggers L3.

 

L3 does the actual work of cycling the other zones off and on.

 

 

All taken from the folder Priority Master (Bedroom), enough code to understand the logic.

 

Some "program variables" are used, these programs all start with "var", and are used as a boolean true/false variable, and are probably self-explanatory in their use from the labels.

 

Some v3+ variables are used, state variables all start with "$_", eg. $_pri_mas_tick.

 

"flash seasons" is a program that will reset all the thermostats to normal operation for the season and time of day.

 

 

The Max/Min tick values are set to determine the percentage time priority. For example, Max can be set to 20, and Min to -10. The tick program decrements the value each minute. When it is set to Max then the zone is set for priority, when the tick reaches 0, then the zones are normalized, when the tick reaches -10, then the tick is set to 20, the zone is prioritized again, and the cycle continues.

 

 


LEVEL 1

program pri mas.L1 cond1.start
If
       Program 'var pri mas.L1 cond1' is False
   And Program 'var away setback' is False
   And Program 'var tstat nite' is True
   And (
            Program 'var season summer' is True
         Or Program 'var season summer hot' is True
       )
Then
       Wait  30 seconds
       Run Program 'var pri mas.L1 cond1' (Then Path)
Else
  - No Actions - (To add one, press 'Action')


program pri mas.L1 cond1.stop
If
       Program 'var pri mas.L1 cond1' is True
   And (
            Program 'var away setback' is True
         Or Program 'var tstat nite' is False
         Or (
                 Program 'var season summer' is False
             And Program 'var season summer hot' is False
            )
       )
Then
       Wait  30 seconds
       Run Program 'var pri mas.L1 cond1' (Else Path)
Else
  - No Actions - (To add one, press 'Action')

-----------------------------------------------------------------------

LEVEL2

program pri mas.L2 do
If
       Program 'var pri mas.L3 exe' is False
   And (
            Program 'var pri mas.L1 cond1' is True
         Or Program 'var pri mas.L1 cond2' is True
         Or Program 'var pri mas.L1 cond3' is True
       )
   And Status  'thermostats / Master - tstat -' is not Calling for Nothing
   And (
            Status  'thermostats / UpStrs - tstat -' is not Calling for Nothing
         Or Status  'thermostats / MAIN - tstat -' is not Calling for Nothing
       )
Then
       Run Program 'var pri mas.L3 exe' (Then Path)
       Send Notification to 'oskrypuch - GMail'
Else
  - No Actions - (To add one, press 'Action')


program pri mas.L2 end
If
       Program 'var pri mas.L3 exe' is True
   And (
            (
                 Program 'var pri mas.L1 cond1' is False
             And Program 'var pri mas.L1 cond2' is False
             And Program 'var pri mas.L1 cond3' is False
            )
         Or Status  'thermostats / Master - tstat -' is Calling for Nothing
       ) 
Then
       Wait  30 seconds
       Run Program 'var pri mas.L3 exe' (Else Path)
       Send Notification to 'oskrypuch - GMail'
Else
  - No Actions - (To add one, press 'Action')


-----------------------------------------------------------------------

LEVEL 3

program pri mas.L3 exe
If
       Program 'var pri mas.L3 exe' is True
Then
       Run Program 'pri mas.L3 exe.reset' (Then Path)
       Run Program 'pri mas.L3 exe.tick' (Then Path) 
Else
  - No Actions - (To add one, press 'Action')


program pri mas.L3 exe.activate
If
       $_pri_mas_tick is $pri_mas_tick_max
Then
       Set 'thermostats / MAIN - tstat -' Mode Off
       Set 'thermostats / UpStrs - tstat -' Mode Off
Else
  - No Actions - (To add one, press 'Action')


program pri mas.L3 exe.deactivate
If
       $_pri_mas_tick is 0
Then
       Run Program 'flash seasons' (If)
Else
  - No Actions - (To add one, press 'Action')


program pri mas.L3 exe.reset
If
       $_pri_mas_tick <= $pri_mas_tick_min
Then
       $_pri_mas_tick  = $pri_mas_tick_max
Else
  - No Actions - (To add one, press 'Action')


program pri mas.L3 exe.tick (disabled)
If
  - No Conditions - (To add one, press 'Schedule' or 'Condition')
Then
       Wait  1 minute 
       Repeat Every  1 minute 
          $_pri_mas_tick -= 1
Else
  - No Actions - (To add one, press 'Action')


program pri mas.L3 stop
If
       Program 'var pri mas.L3 exe' is False
Then
       Stop program 'pri mas.L3 exe.tick'
       $_pri_mas_tick  = 0
Else
  - No Actions - (To add one, press 'Action')

 

 

Kind of for the obsessive/compulsive, but I have to say I am really happy with the control this gives me. Instead of simple time programming to try give priority, this dynamic system gives just the right amount without sacrificing efficiency.

 

* Orest

Posted

Are you sure?

 

I have a Carrier Infinity furnace as well, nothing special about the original Carrier thermostats, standard 5 wire connection. I had a 2 zone Carrier controller initially, but broke it up further by adding a Lennox 4 zone controller. (my HVAC guy changed suppliers)

 

Had to add a pressure triggered bypass on a couple of the zones, it dumps the excess volume back to the return air. Although the Infinity is variable speed, it does not regulate by pressure, but rather only by volume. If there is only a small zone opened up, then the furnace motor could overheat against the high resistance.

 

 

T1800s work fine.

 

I have them all wirelessly remoted to one central location. Kind of fun watching them work - for a bit anyway!

 

 

Although the T1800 dongle locks up a fair bit (as most do), I have some programs that monitor for that (posted here), they just power cycle the controller at the panel, and the attached thermostats, and therefore the dongles. Fixes the problem before I even notice it.

 

* Orest

Posted

No, these are different. They are connected to the unit via an RS-485 connection I believe. The thermostats can pull up all kinds of info, like static pressures in all of the various air handling stages, freon pressures, outside temp, a history of any fault codes, status of accessories like humidifiers, air filters, hours in operation on all of the different modes (high heat, low heat, high cool, low cool,) hours since installation and on and on it goes.

Guest
This topic is now closed to further replies.

×
×
  • Create New...