f65bd41d60c14d0e2884125ff82ef1f8f10c9ac3
[smartthings-infrastructure.git] / Switch / Switching.groovy
1 //Create a class for switch device
2 package Switch
3
4 public class Switching{
5         int deviceNumbers       
6         List switches
7         def timers
8         def sendEvent
9
10         Switching(Closure sendEvent, int deviceNumbers) {
11                 this.sendEvent = sendEvent
12                 this.timers = new Timer()
13                 this.deviceNumbers = deviceNumbers
14                 this.switches = []
15                 if (deviceNumbers == 1) {
16                         switches = [new Switches(sendEvent, 0, "switch0", "off", "off")]
17                 } else if (deviceNumbers == 2) {
18                         switches = [new Switches(sendEvent, 0, "switch0", "off", "off"), new Switches(sendEvent, 1, "switch1", "off", "off")]
19                 } else if (deviceNumbers == 3) {
20                         switches = [new Switches(sendEvent, 0, "switch0", "off", "off"), new Switches(sendEvent, 1, "switch1", "off", "off")
21                                    ,new Switches(sendEvent, 2, "switch2", "off", "off")]
22                 }
23         }
24
25         //By Apps
26         def on() {
27                 switches*.on()
28         }
29
30         def on(LinkedHashMap metaData) {
31                 def task = timers.runAfter(metaData["delay"]) {
32                         switches*.on()
33                 }
34         }
35
36         def off() {
37                 switches*.off()
38         }
39
40         def off(LinkedHashMap metaData) {
41                 def task = timers.runAfter(metaData["delay"]) {
42                         switches*.off()
43                 }
44         }
45
46         //By Model Checker
47         def setValue(LinkedHashMap eventDataMap) {
48                 switches[eventDataMap["deviceId"]].setValue(eventDataMap["value"])
49                 sendEvent(eventDataMap)
50         }
51
52
53         def currentValue(String deviceFeature) {
54                 if (deviceNumbers == 1)
55                         switches[0].currentValue(deviceFeature)
56                 else
57                         switches*.currentValue(deviceFeature)
58         }
59
60         def latestValue(String deviceFeature) {
61                 if (deviceNumbers == 1)
62                         switches[0].latestValue(deviceFeature)
63                 else
64                         switches*.latestValue(deviceFeature)
65         }
66
67         def getAt(int ix) {
68                 switches[ix]
69         }
70 }