From: Chris H. <ch...@ba...> - 2013-07-12 05:11:53
|
Hey all, does anybody have any good code for controlling sprinklers? I'm using an example from quite a few years ago and honestly it just isn't that flexible. I'm hoping somebody has some good OO type code with functions etc for turning zones off/on during various times of day, if it's raining, etc. If not....I guess I need to refactor my code and finally update my MH to the git repo and hopefully contribute back. Thanks! |
From: Jim D. <ji...@du...> - 2013-07-12 23:41:52
|
On 07/12/2013 12:41 AM, Chris Hirsch wrote: > Hey all, does anybody have any good code for controlling sprinklers? I'm > using an example from quite a few years ago and honestly it just isn't > that flexible. > > I'm hoping somebody has some good OO type code with functions etc for > turning zones off/on during various times of day, if it's raining, etc. > If not....I guess I need to refactor my code and finally update my MH to > the git repo and hopefully contribute back. > > Thanks! > I have something which uses one-wire relays to turn on my valves. I have five zones. All the controls are stored in a mysql database. There is a web page which allows control over the schedule. If you are interested, I can give you my code. I'm leaving for vacation today, so I might not respond for a week if you are interested. Regards, Jim |
From: Jim D. <ji...@du...> - 2013-08-05 00:13:38
|
On 07/12/2013 07:41 PM, Jim Duda wrote: > > I have something which uses one-wire relays to turn on my valves. > I have five zones. > All the controls are stored in a mysql database. > There is a web page which allows control over the schedule. > If you are interested, I can give you my code. > I'm leaving for vacation today, so I might not respond for a week if you are interested. > I have attached the perl code, web page html. To instantiate the Owfs_Irrigation.pm object, simply do this in some code file. $irrigation = new Owfs_Irrigation( ); The Owfs_Irrigation.pm makes use of Owfs_Item::DS2408 for relay control. I link the Owfs_irrigation.pl by putting it in my data/web/ia5/outside directory along with irrigation.shtml and menu.shtml. There are four tables in the mysql Irrigation database. mysql> use Irrigation; mysql> describe Days; +------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+------------+------+-----+---------+-------+ | dayOfWeek | int(11) | NO | PRI | NULL | | | dayEnabled | tinyint(1) | YES | | NULL | | +------------+------------+------+-----+---------+-------+ mysql> describe Events; +----------+-----------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-----------+------+-----+-------------------+----------------+ | eventId | int(11) | NO | PRI | NULL | auto_increment | | zoneId | int(11) | NO | UNI | NULL | | | date | date | YES | | NULL | | | dateTime | timestamp | NO | | CURRENT_TIMESTAMP | | +----------+-----------+------+-----+-------------------+----------------+ 4 rows in set (0.00 sec) mysql> describe Schedule; +-----------+------------+------+-----+----------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+------------+------+-----+----------+-------+ | dayOfWeek | int(11) | NO | PRI | NULL | | | zoneId | int(11) | NO | PRI | NULL | | | onTime | time | NO | PRI | 00:00:00 | | | offTime | time | YES | | NULL | | | enabled | tinyint(4) | YES | | NULL | | +-----------+------------+------+-----+----------+-------+ mysql> describe Zone; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | zoneId | int(11) | NO | PRI | NULL | | | location | varchar(50) | YES | | NULL | | | relay | varchar(50) | YES | | NULL | | | enabled | tinyint(1) | YES | | NULL | | | hold | tinyint(4) | YES | | NULL | | | hold_timer | int(11) | YES | | NULL | | | override | tinyint(4) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 7 rows in set (0.00 sec) Unfortunately, I have no documentation to offer you. I hope you can make use of this as a starting point. Regards, Jim |
From: Jeff S. <ne...@si...> - 2013-07-25 20:22:56
|
On 07/12/2013 12:41 AM, Chris Hirsch wrote: > Hey all, does anybody have any good code for controlling sprinklers? I'm > using an example from quite a few years ago and honestly it just isn't > that flexible. > > I'm hoping somebody has some good OO type code with functions etc for > turning zones off/on during various times of day, if it's raining, etc. > If not....I guess I need to refactor my code and finally update my MH to > the git repo and hopefully contribute back. I have setup an if clause with time_cron and some other conditions, like master enable/disable and manual override, for each of my zones. Nothing fancy like OO but it works well enough I don't really feel the need to move to anything better. The only interesting thing I added was rain compensation which is stored in a generic item called $Dryness. It is a simple scaling factor that reduces the watering time based on a dryness estimate of the soil. I can send the code for calculating that separately if you are interested. Example zone watering code: # Turn on the South lawn sprinklers at 12:01 AM for 60 minutes every # Wednesday between May 1 (month 5) and September 30 (month 9) # when $Automatically_Water is set. # Also turn on the water when manually triggered. if (((time_cron '1 0 * 5-9 3') && (state $Automatically_Water eq ON)) || (state_now $Front_Yard_South_Lawn_Macro eq ON)) { set_with_timer $Front_Yard_South_Lawn_AM (ON, (60 * 60 * (state $Dryness))); print_log "Front Yard South Lawn: Started watering for " . state $Dryness . " * 60 minutes..."; } elsif (state_now $Front_Yard_South_Lawn_Macro eq OFF) { set $Front_Yard_South_Lawn_AM OFF; print_log "Front Yard South Lawn: Manually stopped watering."; } |