MikeF Posted January 14, 2019 Posted January 14, 2019 (edited) I have an Insteon Micro Switch controlling a Hot Water (HW) recirculation pump via ISY. There are three triggering mechanisms: 1) a schedule (ie., mornings); 2) KPL in the master bath; and 3) flow switch on the cold water side of the HW heater that is attached to the Sense #1 (yellow) wire of the Micro Switch. All is working well, however; I would like to add two additional features to increase efficiency. 1) A vacation hold of the schedule. Essentially, this program would suspend the scheduled run of the recirculation pump when there is no demand (no trigger of the flow switch) during defined hours of the day for 48 hours. 2) A run of the pump for 10 minutes every 72 hours when there has been no demand (no trigger of the flow switch) to prevent buildup of deposits in the water line. I attempted to use “Last Run” of my Demand program to change a variable that is checked by the Schedule program, but that didn’t work. I also tried using a Wait XX hours, then change variable in a control program; however, that didn’t work either because the If statement is false outside the defined hours described in A) above, and, as a result the Wait would be terminated. Any help anyone can give me would be appreciated. Below are the two main programs: HW Schedule If ( On Mon, Tue, Wed, Thu, Fri From 6:00:00AM To 8:00:00AM (same day) Or On Sat, Sun From 8:00:00AM To 10:00:00AM (same day) ) And $sHot_Water_Demand is 1 Then Repeat Every 10 minutes Set 'Hot Water Micro' On Wait 5 minutes Set 'Hot Water Micro' Off Else - No Actions - (To add one, press 'Action') HW Demand If ( On Mon, Tue, Wed, Thu From 8:00:05AM To 5:59:55AM (next day) Or On Fri From 8:00:05AM To 7:59:58AM (next day) Or On Sat From 10:00:05AM To 7:59:58AM (next day) Or On Sun From 10:00:05AM To 5:59:55AM (next day) ) And Status 'Hot Water Micro' is On And Status 'Hot Water Micro' is not Off Then $sHot_Water_Demand = 1 Wait 45 seconds Set 'Hot Water Micro' Off Else - No Actions - (To add one, press 'Action') Mike Edited January 14, 2019 by MikeF
larryllix Posted January 14, 2019 Posted January 14, 2019 (edited) I would use a State variable to control the pump. A simple final program to turn it on and off would be required and this may simplify the look of your programs making it easier to implement complex logic. Another advantage of a variable control is that it can only be turned on once and multiple programs can't keep hitting on it to cancel other timers. If $sPump = $cTRUE Then set pump On Else set pump Off Now using a vacation variable, things can be based on that logic flag If $sVacation is $cTRUE Then Repeat every 72 hours $sPump = $cTRUE Wait 10 minutes $sPump = $cFALSE Else $sPump = $cFALSE <----- vacation might be over while pump is on and then stays on Now you require programs to turn on your vacation mode flag. This flag will be used for many HVAC and other programs . This can be set off HVAC stats and other sources, even manually. I base mine on multiple logics. Mostly 12 MSes with different timeouts from each after seeing motion. If $sVacation is $cFALSE <----- add this to each existing program logic. AND your other time logic similar to what you have shown above etc.. Then $sPump = $cTRUE Else $sPump = $cFALSE To create a cycler after no action something like this could work. If $sVacation is $cFALSE AND $sPump = $cFALSE Then Wait 72 hours $sPump = $cTRUE Wait 10 minutes $sPump = $cFALSE Else $sPump = $cFALSE <--- another just-in-case recovery Now you can add all your shown logic, above, to operate the $sPump variable. This may make it easier for understanding and make program logic shorter, breaking it down into smaller logical blocks. I don't like basing program logic on other programs. I find that method obscure and can bite you down the road because it isn't visible inside programs being edited, that another depends on it's state. Edited January 14, 2019 by larryllix
MikeF Posted January 15, 2019 Author Posted January 15, 2019 (edited) larryllix, Thank you for your prompt response. Apologies for my denseness...can you go into more detail as to how I might set the 48 hour vacation flag especially as it relates to interacting with the Schedule and Demand programs? Essentially, I would like to set the flag after 48 hours of pump inactivity during specific hours of the day and these hours are not all contiguous (ie., when we are gone, a pet sitter will come to the house in the morning and use kitchen faucet which defaults to hot water and I don't want this activity - or demand - to restart the Schedule program. Also, it would have to ignore the pump activity generated by the Schedule program). I think I have it started correctly, but not sure how to proceed and still be able to have the pump run as it does when we are home: HW Schedule Ctrl If ( On Mon, Tue, Wed, Thu From 10:00:05AM To 5:48:55AM (next day) Or On Fri From 10:00:05AM To 5:48:58AM (next day) Or On Sat From 10:11:05AM To 5:48:58AM (next day) Or On Sun From 10:11:05AM To 5:48:55AM (next day) ) And $sPump = $cFALSE Then Wait 48 hours Set $sVacation = $cTRUE <--------- Not sure this would ever set because of the non-contiguous hours Else - No Actions - (This program stops "HW Schedule" program from running when there is no demand ("HW Demand") for water for over 48 hours (ie., no one is home). The schedule in this program reflects hours outside expected water usage by pet sitter.) Thanks for helping me learn. Mike Edited January 15, 2019 by MikeF
kclenden Posted January 17, 2019 Posted January 17, 2019 (edited) I think you're right, $sVacation won't ever become TRUE because the WAIT 48 hours will be interrupted whenever the time is not in one of the four periods you've specified. I think you could, however, use that program to accumulated time of non-demand and then use another program to set $sVacation to TRUE. Something like: No Hot Water Demand Count If ( On Mon, Tue, Wed, Thu From 10:00:05AM To 5:48:55AM (next day) Or On Fri From 10:00:05AM To 5:48:58AM (next day) Or On Sat From 10:11:05AM To 5:48:58AM (next day) Or On Sun From 10:11:05AM To 5:48:55AM (next day) ) Then Repeat Every 1 minute $sNonDemandCount += 1 Else - No Actions - HW Schedule Ctrl If $sNonDemandCount >= 2880 Then Set $sVacation = $cTRUE Else - No Actions - Now the only other thing you would need to do is to reset $sNonDemandCount to 0 whenever something you consider to be non-Pet Sitter caused demand occurs. You could also use $sNonDemandCount for your 72 hour recirculation program. I chose one minute intervals because the count accumulation is going to be interrupted whenever the time period shifts outside the four periods you defined. If an hour interval were used, then you'd miss some time from 5AM (next day) to 5:48AM (next day) when the REPEAT was interrupted. Edited January 17, 2019 by kclenden Corrected WAIT to REPEAT
MikeF Posted January 17, 2019 Author Posted January 17, 2019 Kclenden, Thank you for responding….and you did it! I had actually thought about a count variable before the first post, but didn’t know how to go about it. There may be cleaner ways to do what I’ve done (with your help and the help of larryllix), but I believe the following will work to set the sVacation flag and repeat a 10 min. run of the pump every 72 hours: • First, I established an hour count:Hour Count If From 12:00:00AM To 11:59:59PM (same day) Then Repeat Every 1 hour $sHW_NonDemand_Count += 1 Else - No Actions • Next, I set the sVacation flag when the count is >= 48 hours and clear it with the Else statement outside of that criteria:HW Schedule Ctrl If $sHW_NonDemand_Count >= 48 Then $sVacation = $cTRUE Else $sVacation = $cFALSE • Then, I reset the hour count variable (sHW_NonDemand_Count) when there is pump activity during the time I specify (ie., outside the hours of the Schedule program and when the pet sitter is at the house):HW No Demand Hr Count Reset If ( On Mon, Tue, Wed, Thu From 10:00:05AM To 5:48:55AM (next day) Or On Fri From 10:00:05AM To 5:48:58AM (next day) Or On Sat From 10:11:05AM To 5:48:58AM (next day) Or On Sun From 10:11:05AM To 5:48:55AM (next day) ) And $sPump is $cTRUE Then $sHW_NonDemand_Count = 0 Else - No Actions • Now, the Schedule program checks the sVacation variable before running:HW Schedule If ( On Mon, Tue, Wed, Thu, Fri From 6:00:00AM To 8:00:00AM (same day) Or On Sat, Sun From 8:00:00AM To 10:00:00AM (same day) ) And $sVacation is $cFALSE Then Repeat Every 10 minutes $sPump = $cTRUE Wait 5 minutes $sPump = $cFALSE Else - No Actions For the 72 hour 10 min. pump run, I had to use a slightly different method because I did not want the pump to run inside hours that would reset the $sHW_NonDemand_Count variable. • As you suggested, I started by having a program evaluate the sVacation variable, then based on that evaluation set another variable:HW 72 hr Ctrl If $sVacation is $cTRUE (is set to TRUE >= 48) Then Wait 24 hours $sHot_Water_Demand = 3 Else - No Actions • Once the sHot_Water_Demand variable is set to 3, the following is initiated:HW 72 hr Vac Run If $sHot_Water_Demand is 3 And From 8:05:00AM To 8:30:10AM (same day) Then $sPump = $cTRUE Wait 10 minutes $sPump = $cFALSE $sHot_Water_Demand = 4 Else - No Actions • Then, a program to repeat only every 72 hours. I realized if I included a Wait 72 hours, it would run the then statement every day at 0805 hrs, and subsequently reset the Wait. Here is the program to repeat:HW 72 hr Vac Run Repeat If $sHot_Water_Demand is 4 Then Repeat Every 72 hours Run Program 'HW 72 hr Vac Run' (Then Path) Else - No Actions • The sHot_Water_Demand variable is reset by:HW Demand If ( On Mon, Tue, Wed, Thu From 8:00:05AM To 5:59:55AM (next day) Or On Fri From 8:00:05AM To 7:59:58AM (next day) Or On Sat From 10:00:05AM To 7:59:58AM (next day) Or On Sun From 10:00:05AM To 5:59:55AM (next day) ) And $sPump is $cTRUE Then $sHot_Water_Demand = 1 Wait 45 seconds $sPump = $cFALSE Else - No Actions Again, a heap of thanks to you both. Mike 3
Recommended Posts