Jump to content

Hot Water Recirculation Pump Programming – Vacation Hold, etc.


MikeF

Recommended Posts

Posted (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 by MikeF
Posted (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 by larryllix
Posted (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 by MikeF
Posted (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 by kclenden
Corrected WAIT to REPEAT
Posted

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

  • Like 3
Guest
This topic is now closed to further replies.

×
×
  • Create New...