SIP
Using moisture sensors to control programs - Printable Version

+- SIP (https://nosack.com/sipforum)
+-- Forum: SIP (Sustainable Irrigation Platform) (https://nosack.com/sipforum/forumdisplay.php?fid=1)
+--- Forum: Writing plugins (https://nosack.com/sipforum/forumdisplay.php?fid=8)
+--- Thread: Using moisture sensors to control programs (/showthread.php?tid=320)

Pages: 1 2 3


RE: Using moisture sensors to control programs - cdesouza - 2024 Jan 20

Okay thanks, I'll look into it and do some minimal validation to avoid having to look at the logs too often.

I was thinking about the moisture control plugin and realised that it currently only does half the job i.e. suppressing schedules if the station is too wet. 

I was wondering if I could cover the other case as well, "what if the station is too dry?".

For each station I would add an additional two attributes, a too dry threshold and a program. If the current moisture reading for a station is below the too dry threshold then the program would be triggered. I looked at helpers.run_program but that calls stop_stations, not exactly what I want and also a program could cover more than one station so I'm guess using programs is not the way to go.

Instead of a program attribute I would use MM:SS and trigger the station to run once for this. Would this be a sensible way to go and would the node_red.run_once be the correct code to do this? Can I add from node_red import run_once in my plugin?


RE: Using moisture sensors to control programs - dan - 2024 Jan 21

(2024 Jan 20, 10:15 PM)cdesouza Wrote: Instead of a program attribute I would use MM:SS and trigger the station to run once for this. Would this be a sensible way to go and would the node_red.run_once be the correct code to do this? Can I add from node_red import run_once in my plugin?
Because node_red is a plugin it is not guaranteed to exist on all SIP installations. It would probably be best to copy the code in to your program.

Dan


RE: Using moisture sensors to control programs - dan - 2024 Jan 21

I have been working with these moisture sensors for about 2 years:
https://www.irrometer.com/sensors.html#wm

The strategy I have been using is to check the moisture in a zone every 15 minutes and when the moisture level drops below a set point (depending on the crop) irrigation is started for a brief period.

I am using drip irrigation for vegetables and this may not be the best for lawns with sprinkler irrigation.

Dan


RE: Using moisture sensors to control programs - cdesouza - 2024 Jan 22

(2024 Jan 21, 04:17 PM)dan Wrote:
(2024 Jan 20, 10:15 PM)cdesouza Wrote: Instead of a program attribute I would use MM:SS and trigger the station to run once for this. Would this be a sensible way to go and would the node_red.run_once be the correct code to do this? Can I add from node_red import run_once in my plugin?
Because node_red is a plugin it is not guaranteed to exist on all SIP installations. It would probably be best to copy the code in to your program.

Dan

I found two implementations of Run Once, one in the node_red plugin and the other in webpages.py. They are slightly different. If I copy the cope I would be creating a third one. 

Would it not be better to consolidate the code in a helper function?


RE: Using moisture sensors to control programs - dan - 2024 Jan 22

(2024 Jan 22, 06:32 AM)cdesouza Wrote:
(2024 Jan 21, 04:17 PM)dan Wrote:
(2024 Jan 20, 10:15 PM)cdesouza Wrote: Instead of a program attribute I would use MM:SS and trigger the station to run once for this. Would this be a sensible way to go and would the node_red.run_once be the correct code to do this? Can I add from node_red import run_once in my plugin?
Because node_red is a plugin it is not guaranteed to exist on all SIP installations. It would probably be best to copy the code in to your program.

Dan

I found two implementations of Run Once, one in the node_red plugin and the other in webpages.py. They are slightly different. If I copy the cope I would be creating a third one. 

Would it not be better to consolidate the code in a helper function?
Agreed.
I will work on it.


RE: Using moisture sensors to control programs - cdesouza - 2024 Jan 22

That would be great as it is the last piece of code missing for my moisture sensor plugins.

Let me know if you need help with testing.


RE: Using moisture sensors to control programs - dan - 2024 Jan 24

Help with testing would be appreciated.

I added a new branch named run-once.
It has the run_once() code moved from webpages.py to helpers.py.
You should be able to just run
Code:
git checkout run-once
on the command line to get the new code.

There is also a new feature in helpers.stop_stations that logs stations that have been stopped early. That allowed the simplification of the run_once code.

The run_once code in the node-red program has quite a few differences an has been renamed to nr_run_once.
I am still working on refactoring the node-red code to use the helpers code.


RE: Using moisture sensors to control programs - cdesouza - 2024 Jan 26

Thanks you for the quick turnaround, I'll take a look over the weekend.


RE: Using moisture sensors to control programs - cdesouza - 2024 Jan 26

I'm currently a bit confused about the number of stations and boards.

There are two variables 
  • gv.nbrd =number of board 
  • gv.nst =  number of stations 

and there are various variables where the length is the number of stations.
 
There is also code such as the following (from the proto plugin)
Code:
          $for bid in range(0,gv.sd['nbrd']):
            $for s in range(0,8):
              $ sid = (bid * 8) + s;
              $ s_sid = str(sid);

There are also boards with 1, 2 4, 8 and 16 channels.

As far as I can tell the above code will only work for a multiple of boards with 8 channels.

Will, for example, the length of gv.rs give me the number of stations  regardless of the number and type of boards?
  • 8 channel board = 8 stations
  • 2 channel board = 2 stations
  • 8 channel board + 2 channel board = 10 stations



RE: Using moisture sensors to control programs - cdesouza - 2024 Jan 26

*** Edit *** - I ran more tests on the run-once branch and this time also checked the logs. 

Compared to the tests I ran on the main branch (see (much) further down) it looks like you have fixed some bugs along the way and the home page now exhibits what I believe to be the  correct behavior. There are however still missing entries on the log page.

Version: 2024-01-24 / git status: Your branch is up to date with 'origin/run-once'
Run Once / Concurrent Mode / Run once
1) Trigger one station 1min  - Runs for 1 mins. - Log entry for 1 min
2) Trigger two stations, each 1 min - Both run concurrently for 1 min - Log for each station for 1 min
3) Trigger one station 1 min, trigger same station before end for 1 min - Station timer reset to 1 min and runs for 1 min - Missing log for first trigger, log for second trigger
4) Trigger two stations 1 mins, trigger first station before end for 1 min – Second station continues to run for 1 min, first station timer reset to 1 min - Missing log entry for first trigger on first station. Log entry for second trigger on first station and trigger on second station.
5) Trigger one station 1 mins, trigger second station before end for 1 min - First station continues to run for 1 min,  second station runs for 1 mins - Log entries for each station for 1 min
6) Trigger two stations 1 mins, trigger third station before end for 1 min- First two stations each continue to run for 1 min, third station runs for 1 min - Log entries for each station for 1 min

7) Trigger one station 1 min, trigger same station after 10 secs for 30 secs - Station timer reset to 30 secs and runs for 30 secs - Missing log for first trigger, log for second trigger
8) Trigger two stations 1 min, trigger first station after 10 secs for 30 secs – Second station continues to run for 1 min, first station timer reset to 30 secs - Missing log entry for first trigger on first station. Log entry for seconds trigger on first station and trigger on second station.
9) Trigger one station 1 mins, trigger second station after 10 secs for 30 secs - First station continues to run for 1 min,  second station runs for 30 secs - Log entries for first and second station
10) Trigger two stations 1 mins, trigger third station after 10 secs for 30 secs- First two stations each continue to run for 1 min, third station runs for 30 secs - Log entries for each station

11) Run 1 min program on station , trigger run once on same station before end for 1 min. Station timer reset to 1 min and runs for 1 min. Missing log for first trigger, log to second trigger
12) Run 1 min program on two stations, trigger run once on first station before end for 1 min – Second station continues to run for 1 min, first station timer reset to 1 min - Missing log entry for first trigger on first station. Log entry for second trigger on first station and trigger on second station.
13) Run 1 min program on station, trigger run once on second station before end for 1 min - First station continues to run for 1 min,  second station runs for 1 mins - Log entries for each station for 1 min
14) Run 1 min program on two stations, trigger once third station before end for 1 min- First two stations each continue to run for 1 min, third station runs for 1 min - Log entries for each station for 1 min
15) Run 1 min program on one station, trigger run once on same station after 10 secs for 30 secs - Station timer reset to 30 secs and runs for 30 secs - Missing log for first trigger, log for second trigger
16) Run 1 min program on two stations, trigger run once on first station after 10 secs for 30 secs – Second station continues to run for 1 min, first station timer reset to 30 secs - Missing log entry for first trigger on first station. Log entry for seconds trigger on first station and trigger on second station.
17) Run 1 min program on one station, trigger second station after 10 secs for 30 secs - First station continues to run for 1 min,  second station runs for 30 secs - Log entries for first and second station
18) Run 1 min program on two stations, trigger run once on third station after 10 secs for 30 secs- First two stations each continue to run for 1 min, third station runs for 30 secs - Log entries for each station


Run Once / Sequential Mode / Run once
1) Trigger one station 1min  - Runs for 1 mins. - Log entry for 1 min
2) Trigger two stations, each 1 min - Stations run sequentially each for 1 min - Log for each station for 1 min
3) Trigger one station 1 min, trigger same station before end for 1 min - Station timer reset to 1 min and runs for 1 min - Log entry for first trigger for partial run, log entry for second trigger for 1 min
4) Trigger two stations 1 mins, trigger first station before end for 1 min – Second station is cancelled, first station timer reset to 1 min - Missing log entry for second station, log entry for first trigger on first station for partial run, log entry for second trigger on first station for 1 min.
5) Trigger one station 1 mins, trigger second station before end for 1 min - First station is cancelled,  second station runs for 1 mins - Log entries for each station
6) Trigger two stations 1 mins, trigger third station before end for 1 min- First two stations are cancelled, third station runs for 1 min - Log entries for first station and third station

7) Trigger one station 1 min, trigger same station after 10 secs for 30 secs - Station timer reset to 30 secs and runs for 30 secs - Log entry for first and second trigger
8) Trigger two stations 30 secs, trigger first station after 10 secs for 30 secs – Second station is csancelled, first station timer reset to 30 secs - Log entry for first station partial run trigger and second trigger.
9) Trigger one station 1 mins, trigger second station after 10 secs for 30 secs - First station is cancelled,  second station runs for 30 secs - Log entries for first station partial run and second station
10) Trigger two stations 1 mins, trigger third station after 10 secs for 30 secs- First two stations are cancelled, third station runs for 30 secs - Log entry for first station partial run, log entry for third station 



Version: 2024-01-18 / Main branch
Run Once / Concurrent Mode
1) Run once for one station 4mins  - Runs for 4 mins
2) Run once for two stations, each 4 mins - Both run concurrently for 4 mins
3) Run once for one station 4 mins, another run once on same station before end - Station overridden by second run once
4) Run once for two stations 4 mins, another run once on first station before end - Both stations set to OFF
5) Run once for one station 4 mins, another run once on second station before end - First station cancelled, second station runs for 4 mins
6) Run once for two stations 4 mins, another run once on third station before end - First two stations cancelled, thirst stations runs for 4 mins
Run Once / Sequential Mode
1) Run once for one station 4mins  - Runs for 4 mins
2) Run once for two stations, each 4 mins - Stations run sequentially, each  for 4 mins
3) Run once for one station 4 mins, another run once on same station before end - Station overridden by second run once
4) Run once for two stations 4 mins, another run once on first station before end - First station overridden by second run once, second station cancelled
5) Run once for one station 4 mins, another run once on second station before end - First station cancelled, second station runs for 4 mins
6) Run once for two stations 4 mins, another run once on third station before end - First two stations cancelled, thirst stations runs for 4 mins