Critical Ponds Water Levels Control


Maybe someone has experience with this sort of thing...

For this situation we have HAI OmniPro II, UPB is employed, we have pumps (simple) set up for automation.

I have some ponds that have a critical water level regulation requirement, ...within inches tolerance, so typical float or water/wet sensor won't work.

Obviously with a large outdoor water body you have issues such as wind and rain to deal with, as well as evaporation, etc, etc.

Right now I have to monitor and run the pumps manually for maintaining the water level, i.e., we are glued to having to keep a physical eye on it. I cannot rely on automations for those, although I have the pumps all tied into my automations.

The client has the following method setup on his ponds... example: the drain is an 8" pipe that faces straight up, and is cut off just above the desired level of the pond. He tries to keep the water level just below that. What he wants is if any more than a smidge (couple inches [he says "a half-inch", but I think that's impossible]) drop below the top, and the pumps should go on until the water begins flowing into the drain pipe's upward facing orofice, and then turn off.

Since I cannot allow the pumps to be hammered by on and off commands, I am looking for a way to compensate for the wave-action factor (in wind, rain, etc). I saw two recommendations elsewhere on this forum for resources for water sensors, which happened to include some depth-pressure sensors, and I thought "hmm, I wonder if this is the answser?...".

In reviewing the products only briefly I am wondering if a depth "pressure" sensor mat be the answer, however, I am out of my depth in trying to understand millibars response factors, and how the tolerances work when waves kick up (add/subtract pressure down below?), and/or other factors. I.e., for all I know, up to a certain agitation factor the sensor may not see any "change in depth" ...etc???

I am wondering what your recommendations may be for tackling our problem?

Right now I am dealing with two bodies of water about the size of small swimming pools. The locale is one of my client's estates (a ranch) in Wisconsin. If you need more information I am happy to assemble that for you.

THANKS for your thoughts and reflections!!
I think you may be under-estimating the performance of a float switch. Check out I use these for automatic swimming pool level controls. The fill level is always the same within 0.1 inch and the slight lag associated with the valve shutting off causes a bit of hysteresis which means that the valve doesn't "hammer on and off." It should work the same for a pump. They are also extremely reliable.

If you are concerned about waves, you can put the float switch in a section of PVC. Cap the bottom and drill a small hole to serve as an orifice - like a shock absorber. Make sure the top is vented; otherwise, the water will compress the air slightly resulting in level difference.

Float switches can be very accurate and putting them in a baffle as suggested will solve your wave action issue. A single small hole will completely stop wave action (just make sure to do something to ensure the hole doesn't get plugged with debris).
Thank you so much for chiming in , gentlemen.
Sorry for the late reply... way many things on my plate these days !

I am going to talk to the coo about these great suggestions, he's the one who has been onsite looking after this situation, and who has been struggling to make a workable solution.

I found it interesting that float switches and such he has tried have not pleased him... he is a retired builder, and I have seen some of the pools and stuff he has put in (grade A), perhaps there is more to his dilemma than I yet understand.

Keeping this open, and will post as things progress.

Thanks for these great suggestions!

This is a great idea. I've thought about ways to do this for years but never implemented anything as everything I could think of had subtle drawbacks. I've seen people agonize over the best way to do this many times.

This post deserves to be in the automation hall of fame.
Well I think we have a winner. The coo really likes this idea. Our integrator was out ther today (on another matter), and afterward he contacted me to say 'thanks' for the great idea, and he thinks this is going to solve it. He's got some hardware and scheduling installtion soon. I am excited in anticipation of the result. It may be a while, but I will post back when its in and tested.
Thank you again!
Tags: Pond fill, Pump, Sprinklers, Flags, Automation
I want to follow-up in this post.  There was not a lot of time last year for troubleshooting the whole system fully (before winter kicked in), which includes sprinklers and pond fill, and as it turns out the code I wrote then for managing this was not efficient enough.  This spring I had to do a bit of troubleshooting and re-write the code, and there may be something in the code logic here, and use of flags, that others may find useful.
For those sort of new to, or working on further, understanding (better) use of flags, there is a tutorial on the forums here from "cornutt" that is really helpful here.
So here we go...
 - The pond float switch the technicians put in turns out to be very sensitive, and there seems to be no real hysteresis management, so I need to do it with code.
 - The pond fill pipe-channel/line-feed is tied into the same pump that runs the sprinklers.
 - The pond fill and sprinkler pipe-channels each have their own valve shutoffs and electronic actuation switches, with no hardware safety for alleviating pressure if, say, a valve is shut off prior to turning off the pump - which can result in pressurized lines, so I have to code for that as well.  (I keep telling them this results in more money spent on coding than it costs to install better hardware, and also that the code cannot be relied on to fully protect the system, but anyway...)
 - The pondfill switch is a "ZONE", while the Pondfill and Sprinkler valves are UNITS
So here's an example of how I set up a custom hysteresis affect using two interactive code blocks with timer flags.
Also in the code is a button... which is used by the automation handling, but can also be used by a person.
Included you will see flags that are used for sibling sprinkler systems awareness (and vice-versa, but that's not shown here).
Logic Base:  activity regulation/management logic (needs, concerns)...
 - allow the pond level to self-monitor, and also allow the user/owner a switch to turn it on (off too, but not discussed here)
 - protect the pump and pondfill channel/line from pressure buildup,
 - address brackish water situations, so actions will not try to toggle on and off sporadically (the switch is very sensitive),
 - augment behavior in response to the sibling sprinklers system,
 - check pond level following enforced 'off periods' timing out,
 - seasonal response (disables itself during off-season)
 - self correction when the system~timing~sequencing or power 'wanders' due to any number of adverse influences (for instance, if there is a hang or sluggish influence upon a response-mechanism in play, sometimes code triggers/affects can occur late or out of sequence !)
 - self adjust if code stalls (which may happen due to any number of chaotic-influences reasons),
 - protect the pump from over use... limits are 3 hours runtime maximium, with minimum of 0.5 hr rest period in between... so if the pondfill ever had to be used for a long period (say it was emptied to some extent for maintenance or whatever), make it so the pondfill can run safely over an extended period (even days) with self-monitoring having full integration with the other timing features (that take place over day/nite transitions).
Special circumstances in this particular case:
 - sibling sprinklers system is run at nite, so it is convenient to affect pondfill timeout overnight
The Code:  Now, rather than post code and then lengthy individual descriptions, I am posting the code with line comments.  The exercise then is for you to start somewhere, and then follow the path of affect.  You will need to create scenarios in your mind, such as "what if the switch immediately toggles due to brackish water" in this/that situation, or "what if someone comes along and hits the button" or "what if the pump is turned off" or what if the thing hiccups and just keeps running", and stuff like that.
***!***TO NOTE: Let me bring your attention particularly to the "Actuate Pond Fill", "Deactuate Pond Fill", and the "Pond Fill Button" macros.
The two De/Actuate macros cross-monitor the Pond Fill Switch Zone Ready / Secure states and the relevant "SEC/NR" flags are used to set the hysteresis response!  The pondfill button facilitates manual interaction, as well as automating the on/off switching of the pondfill.
So far my logs show this is working as expected, but as I find the need to tweak, I will come back here and update.

Here we go....
note: when stuff runs off the right side, click on the line and drag right, it should scroll into view...

######### POND FILL ON BUTTON ######################

--------- POND FILL BUTTON ---------------------------
134. WHEN Sprnk_Turn_Z6PondFill_ON_Btn
AND IF PumpSeason ON
AND IF SprinklerOnFlag OFF <<do not respond if sprinklers running
AND IF PondFloatSwitch SECURE <<only allow on if level is down, this allows calling this button when the hold-off-timer goes off, and if needed, the pondfill can continue filling
AND IF SprnkZ6_HoldOff_timer OFF <<--Limiter Timer: -30min timeout: must be Off for PondFill to be allowed ON
THEN PondFill_On_Flag ON FOR 1 MINUTES <<lets SprinklerPumpSwitchOnBtn know this btn called, and also lets "Sprinkler On Direct" command check know. Only ever called once (here)
THEN Sprinkler Z6 Pond Fill ON <<indefintely. When filled again trigger is 'Not Ready'
THEN SprnkZ6Timout_timer ON FOR 3 HOURS << Limiter Timer: Set a timer check for 3 hrs max runtime everytime this button is called
THEN Sprinkler Z1 Stream OFF <<these make sure sprinkler channels are closed
THEN Sprinkler Z2 South Pond OFF | can be safely done because SprinklerOnFlag is OFF
THEN Sprinkler Z3 Beach OFF | these are all UNITS
THEN Sprinkler Z4 North Pond OFF
THEN Sprinkler Z5 West Pond OFF
THEN RUN SprinklerPumpSwitchOnBtn

134. // ######### POND FILL AUTOMATION (2 macros) ########################

--------- ACTUATE POND FILL -Trigger queries for when/(does?) the pond needs filling ---------------------------
136. WHEN PondFloatSwitch SECURE
WHEN PondFloatSwitch_NR_Fl OFF <--flag toggles off upon HOLD Timeout if*******************
TIMED 5:00 AM MTWTFSS <<--5am check if Pond needs water
WHEN SprnkZ6_HoldOff_timer OFF << Limiter Timer- when goes off, check if filling needed
AND IF PumpSeason ON <<its not winter
AND IF SprinklerOnFlag OFF <<do not respond if sprinklers running
AND IF PondFloatSwitch SECURE <<allows the timed and flagged trigger operation
AND IF PondFloatSwitch_NR_Fl OFF <<if pond fill Zone is NOT HELD in NR WAIT State
AND IF SprnkZ6_HoldOff_timer OFF <<--Limiter Timer -30min timeout: must be Off for PondFill to be allowed ON
                AND IF Sprinkler Z6 Pond Fill Off   <<--Not if PondFill already On
        AND IF Sprnk_6Disabled_Flag Off   <<--Not if PondFill is Disabled
AND IF TIME IS GREATER THAN 4:18 AM <<--Not During Sprinklers Hours
AND IF TIME IS LESS THAN 10:15 PM <<--Not During Sprinklers Hours (turned off 1/5hr prior to sprnks to allow pump to rest if its been running hard
THEN PondFloatSwitch_SEC_Fl ON FOR 10 MINUTES <<Holds Secure State in case of brakish water action. Pond Cannot Deactuate until this goes Off
THEN RUN Sprnk_Turn_Z6PondFill_ON_Btn <<run the pondfill

--------- DEACTUATE POND FILL ---------------------------
137. WHEN PondFloatSwitch NOT READY
WHEN PondFloatSwitch_SEC_Fl OFF <--called upon HOLD Timeout if*******************
AND IF PumpSeason ON
AND IF SprinklerOnFlag OFF <<do not respond if sprinklers running
AND IF PondFloatSwitch NOT READY <<allows the timed and flagged trigger operation
AND IF PondFloatSwitch_SEC_Fl OFF <<if pond fill Zone is NOT HELD IN SEC WAIT State.
        AND IF Sprinkler Z6 Pond Fill On   <<--Not if PondFill already Off
THEN PondFloatSwitch_NR_Fl ON FOR 10 MINUTES <<Holds NotReady State in case of brakish water action. Pond Cannot Actuate until this goes Off
THEN PondFill_Off_Flag ON FOR 2Mins <<Called only once (here). Triggers Pump Off Command, then 2min later turns PondFill Off (allows for pressure relief)

--------- Sprinkler Z6 POND FILL OFF COMMAND ---------------------------
139. WHEN PondFill_Off_Flag OFF <<called by Not Ready after 2 min delay, allowing pump to go off first before closing pondfill channel
THEN Sprinkler Z6 Pond Fill OFF <<there is one trigger set for when this goes off for resetting the Limiter Timer

-------- Reset Limiter------- reset the Z6Timout timer whenever the unit goes off
1xx. WHEN Sprinkler Z6 Pond Fill OFF <<this is the Pondfill UNIT: reset the Z6Timout timer whenever the unit goes off
THEN SprnkZ6Timout_timer SET VALUE TO 0 <<--reset without triggering OFF so the SprnkZ6_HoldOff_timeris not triggered
THEN LOG SprnkZ6Timout_timer RESET to ZERO

-------- When Reset Limiter Triggered-------
----- Limiter Timer: When Flag Times out, Hold PondFill Off for at least 1/5 hour----------
1xx. WHEN SprnkZ6Timout_timer OFF <<--not reset, but actually timing out, which means pondfill has been on this whole time
THEN SprnkZ6_HoldOff_timer ON FOR 30 MINS <<--set a flag that will disable the pond fill for up to 30mins
THEN LOG SprnkZ6Timout_timer Trig_OFF
THEN LOG SprnkZ6HoldOff_timer ON FOR 30Mins
            THEN PondFill_Off_Flag ON FOR 2 MINUTES <<-Triggers Pump Off Command, then 2min later turns PondFill Off (allows for pressure relief)

140. // ###############################################
// -------- Sprinkler Pump Control --------------
// PumpOn responds only if flag criteria met
// Pump Off 3 mins before last Sprnkler Stops.
// "Sprinkler Pump-Src OnLast,Ofirst ON" is the actual pump UNIT/DEVICE.
141. // Pump On affected by Button

####### SPRNK PUMP ON COMMAND #######
142. WHEN SprinklerPumpSwitchOnBtn <<consider making this a flag later
AND IF PumpSeason ON <<pumpseason is spring to early fall
AND IF SprinklerOnFlag ON <<IF a sprinkler On-button actuated, this flag is set and runs while sprinkler does
AND IF PumpSeason ON
AND IF PondFill_On_Flag ON <<OR IF the PondFill On-Button actuated
THEN SprinklerPump ON

143. // SEE AHEAD FOR OFF CODe: WHEN SprinklerOnFlag OFF, THEN Sprinkler Pump-Src OnLast,Ofirst
// goes OFF

144. // ####### PUMP ON DIRECT COMMAND ###########
// If pump device switched on directly and no sprinklers are on,
// OR, Whenever a SprnkLine is deactivated, and 20 secs later the pump is still on,
// then turn the pump back off, and pressure-relieve the lines...
// (these are units here)
145. WHEN SprinklerPump ON
AND IF Sprinkler Z1 Stream OFF
AND IF Sprinkler Z2 South Pond OFF
AND IF Sprinkler Z3 Beach OFF
AND IF Sprinkler Z4 North Pond OFF
AND IF Sprinkler Z5 West Pond OFF
AND IF Sprinkler Z6 Pond Fill OFF
THEN SprinklerPump OFF
THEN Sprinkler Z1 Stream ON FOR 40 SECONDS
THEN Sprinkler Z2 South Pond ON FOR 40 SECONDS
THEN Sprinkler Z3 Beach ON FOR 40 SECONDS
THEN Sprinkler Z4 North Pond ON FOR 40 SECONDS
THEN Sprinkler Z5 West Pond ON FOR 40 SECONDS
THEN Sprinkler Z6 Pond Fill ON FOR 40 SECONDS

146. // Sprinkler On Direct (Unit) Command
// If sprinkler turned on and pump not activated, then turn it back off
147. WHEN Sprinkler Z1 Stream ON
WHEN Sprinkler Z2 South Pond ON
WHEN Sprinkler Z3 Beach ON
WHEN Sprinkler Z4 North Pond ON
WHEN Sprinkler Z5 West Pond ON
WHEN Sprinkler Z6 Pond Fill ON
AND IF SprinklerOnFlag OFF <<Sprinkler Button was not used
AND IF PondFill_On_Flag OFF <<PondFill Button was not used
AND IF SprinklerPump OFF <<And Pump was not activated
AND IF Sprnk_LeftOn_Flag OFF <<make sure the left on flag is not already counting down
THEN Sprnk_LeftOn_Flag ON FOR 45 SECONDS <<Set timinout to turn off all sprinks (Line 166) CHECK THIS

155. // -------------------------------------------
// When PumpOff button or a sprinkler directly turned off, check sprinkler timeout:
// When an off command is given, make sure the sprinkler that was in use stays open for a
// little while, and then turns off. In automations this happens normally, but in the case
// of a user button, or sending a direct command, these sequences keeps things in proper
// check
156. // Pump Off via Automations: This is the normal control off sequence. The rpinkler that was
// running has already turned off (for 3 mins), then the automation flag triggers this for
// finally turning off the pump...

####### SPRNK PUMP OFF COMMAND #######
157. WHEN SprinklerOnFlag OFF <<happens 2mins before a sprinkler is set to go off per its buttn
WHEN PondFill_Off_Flag ON <<when pondfill toggles to NOT Ready, this turns the pump off immediately (assuming timeout not being held), then pondfill off in 3mins (time to decompress)
AND IF SprinklerPump ON
THEN SprinklerPump OFF

158. // Sprinklers Off Button Command: non-automated button control of the sprinklers....
159. WHEN Sprinklers_Turn_Off_Button <
AND IF Sprnk_LeftOn_Flag OFF <<make sure the left on flag is not already counting down
THEN Sprnk_LeftOn_Flag ON FOR 45 SECONDS <<when times out, all sprinks off @Ln166
THEN SprinklerOnFlag OFF <<--turns off the pump (and lines are depressurizing)

160. // Sprinklers Off Trigger: non-automated off control of sprinks uses flag, automated uses
// same for now, possibly direct later. Also resets the SprinklerOnFlag. When Sprink Units
// go off, nothing else is actuated, so this works ok. Exception is when Z6 goes off, the Z6
// Limiter flag is put thru some motions, but I see no conflicts having this here

166. WHEN Sprnk_LeftOn_Flag OFF
AND IF SprinklerPump OFF
THEN Sprinkler Z1 Stream OFF
THEN Sprinkler Z2 South Pond OFF
THEN Sprinkler Z3 Beach OFF
THEN Sprinkler Z4 North Pond OFF
THEN Sprinkler Z5 West Pond OFF
THEN Sprinkler Z6 Pond FIll OFF <<--this added, we'll see how it goes

167. // -------------------------------------------------------
// Protect Pump if someone directly turns off a sprinkler, <snip>

Well I hope this is helpful to anyone.  I appreciate the good help I get here at Cocoontech.
Edited On 2013-07-24:  I made some changes to "Pond fill Button", and Actuate and DeActuate PondFill code groups, and the Reset Timer function.