oskrypuch Posted May 24, 2011 Posted May 24, 2011 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
apostolakisl Posted May 25, 2011 Posted May 25, 2011 Your program makes me wish I had thermostats I could control. I have a Carrier Infinity system that uses special thermostats. Oh well.
oskrypuch Posted May 25, 2011 Author Posted May 25, 2011 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
apostolakisl Posted May 25, 2011 Posted May 25, 2011 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.
oskrypuch Posted May 25, 2011 Author Posted May 25, 2011 Yes, that is definitely different, sounds a lot more recent. * Orest
Recommended Posts