Jump to content

Proposed Evapotranspiration Algorithm in 3.1.4 Beta


Recommended Posts

Hi all,

 

Peter is correct: I mean whether or not - and unless user reconfigures the value manually - does the value change on its own.

 

As far as Irrigation Requirement >= Water applied per irrigation, why not have a boolean value instead? Basically:

Irrigation Requirement - Water applied per irrigation is either 0 (in which case you should not run irrigation) or >0 in which case you should. In theory, then, Irrigation Requirement should go away altogether and be replace with "Should I water the plants". Am I incorrect?

 

 

With kind regards,

Michel

Link to comment

Sounds good. As long as it can be adjusted.

 

On a normal day you might be fine with a 0.70 watering, but if the Irrigation_Requirement is much higher you might want to water at a higher rate. You could have a few cooler days then one hot one that might spike the Irrigation_Requirement so in this case this is how it might be handled.

 

If
       Module 'Climate' Irrigation_Requirement > 0.70

Then
       Set 'Station1 Back Drip1' On
       Wait  83 minutes
       Set 'Station2 Back Drip2' On
       Wait  83 minutes
       Set 'Station2 Back Drip2' Off
       Module 'Climate' Irrigation_Requirement -= 1.00

Else
       Set 'Station1 Back Drip1' On
       Wait  66 minutes
       Set 'Station2 Back Drip2' On
       Wait  66 minutes
       Set 'Station2 Back Drip2' Off
       Module 'Climate' Irrigation_Requirement -= 0.70

Link to comment
As far as Irrigation Requirement >= Water applied per irrigation, why not have a boolean value instead? Basically:

Irrigation Requirement - Water applied per irrigation is either 0 (in which case you should not run irrigation) or >0 in which case you should. In theory, then, Irrigation Requirement should go away altogether and be replace with "Should I water the plants". Am I incorrect?

 

The Irrigation_Requirement reflects how empty the soil is of water, same as how empty is the cup of water. We want to replace near the same amount of water that is removed from the ground without overflowing it with water or without under replacing the water, but rather hit filling it to just right. With having it an actual number then we can understand how empty the soil is and forward any remaining emptiness on to the next watering cycle.

Link to comment
I am not confused again.

 

Mark, your images do NOT reflect the reality of our code base. We do not have anything such as -= for the action part.

 

I thought that the decremented value was preconfigured and now it's back to being back on the program line.

 

With kind regards,

Michel

I am sorry Michel I thought it was still being discussed. You actually never answered which way you where going to do design it. GUI widget or program line?

 

Then I know how to proceed with our discussion.

Link to comment

Mark,

 

I am at a complete loss! I am not even sure what I had to answer!!!

 

1. User defined values will be in a configuration tab in WB Module; these will include:

a- land type (oceanside vs. desert etc.)

b- soil type

c- a floating value for Water applied per irrigation (WAI)

 

2. on ISY side

a- Decrement WAI from Irrigation Requirement (IR). If the value is >0, then you should water. If not, you should not

 

With kind regards,

Michel

Link to comment

1. User defined values will be in a configuration tab in WB Module; these will include:

a- land type (oceanside vs. desert etc.)

b- soil type

c- a floating value for Water applied per irrigation (WAI)

 

2. on ISY side

a- Decrement WAI from Irrigation Requirement (IR). If the value is >0, then you should water. If not, you should not

 

Sounds good. Sorry for the confusion I am just going by what I am reading and understanding.

 

What is our method of triggering an update for IR after we have watered? Are you going to watch the EZFlora for stations that get turned on and trigger the IR update internally or are we doing it from in a program?

Link to comment

So, in summary thus far... Please correct me if I'm wrong....

 

1. ET data isn't really usable right now, but will be used in a future irrigation module.

 

2. A new module will be available sometime that will allow control of EZFlora based on soil water needs. It will...

a. keep up with average daily ET and keep a running total

b. keep up with rainfall and subtract from ET

c. keep up with applied irrigation and subtract from cumulative ET

d. trigger irrigation based on when a certain water deficit has been reached.

e. be idiot proof (or at least well documented in the wiki)

Link to comment

1. User defined values will be in a configuration tab in WB Module; these will include:

a- land type (oceanside vs. desert etc.)

Yes
b- soil type
Again, I strongly urge that for now this be a % of soil absorption rather than a list of types. Allows user to:

- Handle mixed type ("split the difference")

- Determine absorption empirically

c- a floating value for Water applied per irrigation (WAI)

Yes

 

2. on ISY side

a- Decrement WAI from Irrigation Requirement (IR). If the value is >0, then you should water. If not, you should not

If you mean literally "decrement" then no. What if you can't water at the time? If ISY decrements this first, then the continuing Irrigation Requirement balance will be too low. If what you mean is test that WAI - IR >= 0, that's different.

 

It's ok if you want to present the user with a boolean (Water or not) based on testing whether the value of IR - WAI >= 0, but there still has to be a way for the user's irrigation program(s) to say "I succeeded in watering completely, so go ahead and decrement IR by WAI." Remember, Irrigation Requirement is not "Irrigation Required?", is is actually Irrigation Requirement Balance.

 

Peter

Link to comment

I was wondering can you set the module up to watch for a "Fast Off" on a selected EZFlora station?

 

This could be a trigger without actually adding any new commands to the ISY programs module. When the a valve is "Fast Off" (this would only be used intentionally on the last valve) then do the decrement of Irrigation Requirement (IR) with the GUI widget predefined variable. And to take this idea a bit further you could have a GUI option to select which EZFlora station the module would be watching. What do you think?

Link to comment
I was wondering can you set the module up to watch for a "Fast Off" on a selected EZFlora station?

 

This could be a trigger without actually adding any new commands to the ISY programs module. When the a valve is "Fast Off" (this would only be used intentionally on the last valve) then do the decrement of Irrigation Requirement (IR) with the GUI widget predefined variable. And to take this idea a bit further you could have a GUI option to select which EZFlora station the module would be watching. What do you think?

This is a very interesting idea. But it cannot be specific to an EZFlora (I use 3 EZIO8Ts). Basically, you would be saying "Decrement IR whenever you see a Fast Off of this Insteon node." So it would work no matter what Insteon device someone used to control their valves.
Link to comment

Mark -

Please check this, then I'll mark it as final. (In particular, do you think I've gotten the whole location thing right?)

 

In the Climate Module configuration:

Water_Applied_per_Irrigation = (Value entered by user)
# Units: Depth (mm internally, entered/presented as mm if Metric presentation chosen in Climate config or as inches if English chosen)
# This is the amount of water the user's irrigation program applies to the soil during each run

Land_Location_Factor = (Value based on location selection by user)
# Units: Decimal, range 0.0 to 1.0  ???
# Internal variable not available to the user (of course they can see or change their location selection)

Soil_Absorption_Factor = (Value entered by user)
# Units: Percentage
# Adjusts for the relative efficiency of soil absorption
# (Example values: sand 100%, loam sand 83%, sandy loam 67%, loam 58%, clay loam 33%, silty clay 25%, clay 17%)

Michel - I suggest that Soil_Absorption_Factor be either:

- a value directly entered by the user

or

- a soil-type pulldown list with a Custom choice allowing a value to be directly entered by the user

(so that they could derive this by measurement, by using the example values directly, or by interpolating from the example values).

 

 

Throughout the day at each WeatherBug update:

Evapotranspiration_Tally = Evapotranspiration_Tally + Evapotranspiration_Sample
# Units: Depth (mm)
# These are internal variables not available to the user

Sample_Count = Sample_Count + 1
# Internal variable not available to the user

 

At 23:59 daily:

Daily_Evapotranspiration = Evapotranspiration_Tally / Sample_Count
# This variable is an average of all samples in the previous day.
# Units: Depth (mm internally, presented as mm if Metric presentation chosen in Climate config or as inches if English chosen)
# Available for use in programs in case advanced users want to program some custom irrigation strategy.

Daily_Water_Deficit = Daily_Evapotranspiration - (Rain_Today * (Soil_Absorption_Factor / 100))
# Daily Water Deficit is the amount of water that needs to be replenished for the day.
# Units: Depth (mm internally, presented as mm if Metric presentation chosen in Climate config or as inches if English chosen)
# This is a signed float and can be a negative value in the event of lots of (absorbed) rain.
# Available for use in programs in case advanced users want to program some custom irrigation strategy.

Irrigation_Requirement = Irrigation_Requirement + Daily_Water_Deficit
# This is the amount of irrigation that is required to replenish water lost since the previous irrigation run.
# Units: Depth (mm internally, presented as mm if Metric presentation chosen in Climate config or as inches if English chosen)
# This is an unsigned float and cannot be below zero.
# It is incremental so it can collect for days if necessary.
# Available for use in programs - the most straightforward way to use ET data within ISY.

 

Within the user's irrigation program:

# The IF condition should be able to be written as:
IF Irrigation Requirement >= Water Applied per Irrigation THEN ...

# The final THEN action (after the irrigation zones all run) would trigger ISY internal calculation of:
Irrigation_Requirement = Irrigation_Requirement - Water_Applied_per_Irrigation

 

Peter

Link to comment

4. At 00:00, ISY copies today's average ET to yesterday's average ET and clears today's

5. The same goes for Daily_Water_Deficit

Can you reflect these storage variables too in this writeup?

 

At 00:00 daily:

Yesterday_Evapotranspiration = Daily_Evapotranspiration
# At 00:00, ISY copies today's average ET to yesterday's average ET and clears today's

Yesterday_Water_Deficit = Daily_Water_Deficit
# At 00:00, ISY copies today's deficit to yesterday's deficit and clears today's

I will get back to you on the land location thing after I read a bit in that pdf...

Link to comment

4. At 00:00, ISY copies today's average ET to yesterday's average ET and clears today's

5. The same goes for Daily_Water_Deficit

Can you reflect these storage variables too in this writeup?

 

At 00:00 daily:

Yesterday_Evapotranspiration = Daily_Evapotranspiration
# At 00:00, ISY copies today's average ET to yesterday's average ET and clears today's

Yesterday_Water_Deficit = Daily_Water_Deficit
# At 00:00, ISY copies today's deficit to yesterday's deficit and clears today's

I will get back to you on the land location thing after I read a bit in that pdf...

I can certainly add those, but in that case Daily_Evapotranspiration and Daily_Water_Deficit will only be non-zero for 60 seconds. Is that what we want? (Is there confusion arising because the day in "Daily" is in fact yesterday? Do we need to rename the "Daily_" variables?)

Link to comment

Hi Peter/Mark, this is great!

 

Comments:

# The IF condition should be able to be written as:
IF Irrigation Requirement >= Water Applied per Irrigation THEN ...

 

Unfortunately we cannot do this. It's best to name "Irrigation Requirement - Water Applied Per Irrigation" some other variable (such as Need this Much Water) and then have:

# The IF condition should be able to be written as:
IF Need this Much Water >= 

 

Other questions:

1. What is the value of irrigation requirement at boot up?

2. What values should be persisted?

3. What happens to the persisted values if the system has been down for a while?

4. If there's a Rest button/Program, what values should it reset?

 

 

I think we are almost there. We are going to add a System command that can be run explicitly in a program after all zones have been watered. This command decrements Irrigation Requirement by Water Applied Per Irrigation.

 

We will probably have another System command that can reset Irrigation related values. Thus the need to know which values should be reset.

 

Thanks again in advance and with kind regards,

Michel

Link to comment
I can certainly add those, but in that case Daily_Evapotranspiration and Daily_Water_Deficit will only be non-zero for 60 seconds. Is that what we want? (Is there confusion arising because the day in "Daily" is in fact yesterday? Do we need to rename the "Daily_" variables?)

 

Maybe the other stuff you have already in the doc should be...

 

At 23:59:59 daily:

 

And we should note the "Daily" variables are running totals that are displayed throughout the day and at 23:59:59 really is the moment the final measurement is taken before the "Yesterday" copy happens at 00:00 and "Daily" measurements reset.

Link to comment
Hi Peter/Mark, this is great!

 

Comments:

# The IF condition should be able to be written as:
IF Irrigation Requirement >= Water Applied per Irrigation THEN ...

 

Unfortunately we cannot do this. It's best to name "Irrigation Requirement - Water Applied Per Irrigation" some other variable (such as Need this Much Water) and then have:

# The IF condition should be able to be written as:
IF Need this Much Water >= 

Michel -

We're not testing against Irrigation Requirement - Water Applied Per Irrigation, so no need for a "Need this Much Water" variable (Irrigation Requirement is how much water we need. So:

# The IF condition would be written as:
IF Irrigation Requirement >= 

The reason I asked about expressing it the other way is that the value the user will be selecting from that list will by definition be exactly the same as what they have entered for Water Applied Per Irrigation (since it's better programming practice to avoid having the same value entered in more than one place...).

 

Other questions:

1. What is the value of irrigation requirement at boot up?

Ideally, the value calculated @ 23:59:59 the night before.

2. What values should be persisted?

Irrigation Requirement would be the most important. If the system goes down briefly (i.e. less than a day), the next Daily_Evapotranspiration calculation will be low, but if the user has chosen a reasonable Water Applied Per Irrigation value the plants should tolerate this just fine.

3. What happens to the persisted values if the system has been down for a while?

Great question. I'd say if the system has been down for an extended period (i.e. days), the running balance would be meaningless and should be discarded. Probably the best thing would be to alert the user that they should assess the situation and manually run their irrigation program if necessary.

4. If there's a Rest button/Program, what values should it reset?

I can't see why you'd want to reset anything, but if you did I guess just Irrigation Requirement. Maybe Mark has a thought on this.

 

I think we are almost there. We are going to add a System command that can be run explicitly in a program after all zones have been watered. This command decrements Irrigation Requirement by Water Applied Per Irrigation.

 

We will probably have another System command that can reset Irrigation related values. Thus the need to know which values should be reset.

 

Thanks again in advance and with kind regards,

Michel

One question for you, Michel - how are you thinking of handling the user's entry of Soil_Absorption_Factor in the configuration?

 

Peter

Link to comment
# The IF condition should be able to be written as:
IF Need this Much Water >= 

Here is my attempt at this variable name, Peter something better?
Irrigation_Unapplied_Remainder = Irrigation_Requirement - Water_Applied_Per_Irrigation
# This is the leftover irrigation unapplied remainder that may be too high to wait until the next water cycle so longer station run times may be necessary
# This number is only a positive number

1. What is the value of irrigation requirement at boot up?

2. What values should be persisted?

3. What happens to the persisted values if the system has been down for a while?

4. If there's a Rest button/Program, what values should it reset?

Here is my thoughts...

1. If the data is less than 24 hours use it, otherwise we will have to start fresh.

2. Everything persists if its less than 24 hours, otherwise we will have to start fresh..

3. Start from scratch.

4. Reset Daily_Water_Deficit, Irrigation_Requirement, and Irrigation_Unapplied_Remainder. I think this command would only be used to reset the system and start over and this would be the variables that would start over... this may need adjusting after testing the next ISY firmware release.

 

We are going to add a System command that can be run explicitly in a program after all zones have been watered. This command decrements Irrigation Requirement by Water Applied Per Irrigation.
Just what we need, Thanks Michel!
Link to comment
Irrigation_Unapplied_Remainder
I don't think this variable exists. I think Michel suggested this because he did not understand that the decision as to whether irrigation is needed yet is simply looking at whether Irrigation Requirement has met or exceeded Water Applied per Irrigation. If you want to know whether to adjust your irrigation times, then add an email to yourself of Irrigation Requirement after running the System command which subtracts Water Applied per Irrigation - at that point it will be the remainder. (As an aside, going back to that example Irrigation Requirement Balance table I posted, having some remainder should not be a problem. Only if it were consistently high would adjustment be needed (maybe longer times, maybe shorter...)
Maybe [...] we should note the "Daily" variables are running totals that are displayed throughout the day and at 23:59:59 really is the moment the final measurement is taken before the "Yesterday" copy happens at 00:00 and "Daily" measurements reset.
But are these in fact running totals?

 

If you did these calculations repeatedly throughout the day (and at the moment they are specified as happening only once @ 23:59(:59)), would the results be useful? As an average, Daily ET could swing up or down as more samples were collected depending on the instantaneous ET samples. Daily Water Deficit could rise at first, then fall if it rained later in the day. I think the real value in these is as a record of how what happened yesterday (sun, wind, rain...) affects whether irrigation is needed today.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing

    • No registered users viewing this page.
  • Who's Online (See full list)

    • There are no registered users currently online
  • Forum Statistics

    • Total Topics
      37k
    • Total Posts
      371.1k
×
×
  • Create New...