Update step-notifier.groovy
[smartapps.git] / official / sprayer-controller-2.groovy
1 /**
2  *  Sprayer Controller 2
3  *
4  *  Copyright 2014 Cooper Lee
5  *
6  *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
7  *  in compliance with the License. You may obtain a copy of the License at:
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
12  *  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
13  *  for the specific language governing permissions and limitations under the License.
14  *
15  */
16 definition(
17     name: "Sprayer Controller 2",
18     namespace: "sprayercontroller",
19     author: "Cooper Lee",
20     description: "Control Sprayers for a period of time a number of times per hour",
21     category: "My Apps",
22     iconUrl: "http://www.mountpleasantwaterworks.com/images/ground_sprinkler.png",
23     iconX2Url: "http://www.mountpleasantwaterworks.com/images/ground_sprinkler.png"
24 )
25
26
27 preferences {
28         section("Select First Valve(s):") {
29                 input name: "valves1", type: "capability.switch", multiple: true
30                 input name: "startHour1", title: "Start Hour", type: "number"
31                 input name: "stopHour1", title: "Stop Hour", type: "number"
32                 input "minutes", "enum", title: "Run how many times an Hour?", expanded: true,
33         options: ["1","2","3","4","5","6","12","20","30","60"] /*/
34         options: ["0", "0,30", "0,20,40", "0,15,30,45", "0, 10, 15, 20, 25,30,35,40,45,50,55", "6", "7"] */
35                 input "duration", "number", title: "For how many seconds?"
36         }
37
38 }
39
40
41 def installed() {
42         log.debug "Installed with settings: ${settings}"
43     def startHour = startHour1
44     def stopHour = stopHour1
45     def startTime = minutes
46     if (minutes == "1") {
47                 startTime = "0 0 " + startHour + "-" + stopHour + " * * ?"
48         } else if (minutes == "2") {
49                 startTime = "0 0,30 " + startHour + "-" + stopHour + " * * ?"
50         } else if (minutes == "3") {
51                 startTime = "0 0,20,40 " + startHour + "-" + stopHour + " * * ?"
52         } else if (minutes == "4") {
53                 startTime = "0 0,15,30,45 " + startHour + "-" + stopHour + " * * ?"
54         } else if (minutes == "5") {
55                 startTime = "0 0,12,24,36,48 " + startHour + "-" + stopHour + " * * ?"
56         } else if (minutes == "6") {
57                 startTime = "0 0,10,20,30,40,50 " + startHour + "-" + stopHour + " * * ?"
58         } else if (minutes == "12") {
59                 startTime = "0 0,5,10,15,20,25,30,35,40,45,50,55 " + startHour + "-" + stopHour + " * * ?"
60         } else if (minutes == "20") {
61                 startTime = "0 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 " + startHour + "-" + stopHour + " * * ?"
62         } else if (minutes == "30") {
63                 startTime = "0 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 " + startHour + "-" + stopHour + " * * ?"
64         } else {
65                 startTime = "0 0 " + startHour + "-" + stopHour + " * * ?"
66         }
67         log.debug "${startTime}"   
68     /*
69     def stopTime = "0 $minutes $stopHour * * ?"   */
70         schedule(startTime, openValve)
71 /*      schedule("0 0,5,10,15,20,25,30,35,40,45,50,55 " + startHour + "-" + stopHour + " * * ?", openValve) */
72 /*      schedule(stopTime, closeValve)  */
73         subscribe(valves1, "switch.on", valveOnHandler, [filterEvents: false])
74
75 }
76
77 def updated(settings) {
78         unschedule()
79         unsubscribe()
80         log.debug "Installed with settings: ${settings}"
81     def startHour = startHour1
82     def stopHour = stopHour1
83     def startTime = minutes
84     if (minutes == "1") {
85                 startTime = "0 0 " + startHour + "-" + stopHour + " * * ?"
86         } else if (minutes == "2") {
87                 startTime = "0 0,30 " + startHour + "-" + stopHour + " * * ?"
88         } else if (minutes == "3") {
89                 startTime = "0 0,20,40 " + startHour + "-" + stopHour + " * * ?"
90         } else if (minutes == "4") {
91                 startTime = "0 0,15,30,45 " + startHour + "-" + stopHour + " * * ?"
92         } else if (minutes == "5") {
93                 startTime = "0 0,12,24,36,48 " + startHour + "-" + stopHour + " * * ?"
94         } else if (minutes == "6") {
95                 startTime = "0 0,10,20,30,40,50 " + startHour + "-" + stopHour + " * * ?"
96         } else if (minutes == "12") {
97                 startTime = "0 0,5,10,15,20,25,30,35,40,45,50,55 " + startHour + "-" + stopHour + " * * ?"
98         } else if (minutes == "20") {
99                 startTime = "0 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 " + startHour + "-" + stopHour + " * * ?"
100         } else if (minutes == "30") {
101                 startTime = "0 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 " + startHour + "-" + stopHour + " * * ?"
102         } else {
103                 startTime = "0 0 " + startHour + "-" + stopHour + " * * ?"
104         }
105         log.debug "${startTime}"   
106     /*
107     def stopTime = "0 $minutes $stopHour * * ?"   */
108         schedule(startTime, openValve)
109 /*      schedule(stopTime, closeValve)  */
110         subscribe(valves1, "switch.on", valveOnHandler, [filterEvents: false])
111 /*      schedule("0 0,5,10,15,20,25,30,35,40,45,50,55 " + startHour + "-" + stopHour + " * * ?", openValve)  */
112
113 }
114
115 def openValve() {
116         log.debug "Turning on Sprinklers ${valves1}"
117         valves1.on()
118
119 }
120
121 def closeValve() {
122         log.debug "Turning off Sprinklers ${valves1}"
123         valves1.off()
124 }
125
126 def valveOnHandler(evt) {
127         log.debug "Valve ${valves1} turned: ${evt.value}"
128         def delay = duration
129         log.debug "Turning off in ${duration/60} minutes (${delay}seconds)"
130         runIn(delay, closeValve)
131 }
132
133 def setStartTime() {
134     if (minutes == "1") {
135                 def startTime = "0 0 $startHour * * ?"
136         } else if (minutes == "2") {
137                 def startTime = "0 0,30 $startHour * * ?"
138         } else if (minutes == "3") {
139                 def startTime = "0 0,20,40 $startHour * * ?"
140         } else if (minutes == "4") {
141                 def startTime = "0 0,15,30,45 $startHour * * ?"
142         } else if (minutes == "5") {
143                 def startTime = "0 0,12,24,36,48 $startHour * * ?"
144         } else if (minutes == "6") {
145                 def startTime = "0 0,10,20,30,40,50 $startHour * * ?"
146         } else if (minutes == "12") {
147                 def startTime = "0 0,5,10,15,20,25,30,35,40,45,50,55 $startHour * * ?"
148         } else if (minutes == "20") {
149                 def startTime = "0 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 $startHour * * ?"
150         } else if (minutes == "30") {
151                 def startTime = "0 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 $startHour * * ?"
152         } else {
153                 def startTime = "0 0 $startHour * * ?"
154         }
155 }