Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/smartthings-infrastructure
[smartthings-infrastructure.git] / ColorControl / ColorControl.groovy
1 //Create a class for color control
2 package ColorControl
3 import Timer.SimulatedTimer
4
5
6 public class ColorControl {
7         def sendEvent
8         private String id
9         private String label
10         private String displayName
11         private String color
12         private String currentColor
13         private String currentSwitch
14         private int level
15         private int currentLevel
16         private int hue
17         private int currentHue
18         private int saturation
19         private int currentSaturation
20         private int colorTemperature
21         
22         ColorControl(Closure sendEvent, String id, String label, String displayName, String color, int hue, int saturation, int level, String currentSwitch, int colorTemperature) {
23                 this.id = id
24                 this.label = label
25                 this.displayName = displayName
26                 this.color = color
27                 this.currentColor = color
28                 this.hue = hue
29                 this.currentHue = hue
30                 this.saturation = saturation
31                 this.currentSaturation = saturation
32                 this.level = level
33                 this.currentLevel = level
34                 this.currentSwitch = currentSwitch
35                 this.colorTemperature = colorTemperature
36                 this.sendEvent = sendEvent
37         }
38         
39         //By model checker
40         def setValue(String value, String name) {
41                 if ((name == "color") && (value != this.color)) {
42                         this.color = value
43                         this.currentColor = value
44                         println("the color of the light is changed to $value!")
45                 } else if ((name == "hue") && (value != this.hue)) {
46                         this.hue = value.toInteger()
47                         this.currentHue = value.toInteger()
48                         println("The hue level of the light is changed to $value!")
49                 } else if ((name == "saturation") && (value != this.saturation)) {
50                         this.saturation = value.toInteger()
51                         this.currentSaturation = value.toInteger()
52                         println("The saturation level of the light is changed to $value!")
53                 } else if ((name == "level") && (value != this.level)) {
54                         this.currentLevel = value.toInteger()
55                         this.level = value.toInteger()
56                         println("The level of the light is changed to $value!")
57                 } else if ((name == "currentSwitch") && (value != this.currentSwitch)) {
58                         this.currentSwitch = value
59                         println("The light is changed to $value!")
60                 } else if ((name == "colorTemperature") && (value != this.colorTemperature)) {
61                         this.colorTemperature = value.toInteger()
62                         println("The color temperature level of the light is changed to $value!")
63                 }
64         }
65
66         //methods
67         def setColor(LinkedHashMap metaData) {
68                 def hexColor = metaData.hex
69                 def newColor
70                 switch (hexColor) {
71                         case "#0000FF":
72                                 newColor = "Blue"
73                                 break;
74                         case "#00FF00":
75                                 newColor = "Green"
76                                 break;
77                         case "#FFFF00":
78                                 newColor = "Yellow"
79                                 break;
80                         case "#FF6000":
81                                 newColor = "Orange"
82                                 break;
83                         case "#BF7FBF":
84                                 newColor = "Purple"
85                                 break;
86                         case "#FF5F5F":
87                                 newColor = "Pink"
88                                 break;
89                         case "#FF0000":
90                                 newColor = "Red"
91                                 break;
92                         default:
93                                 newColor = "Blue"
94                                 break;
95                 }
96                 if (newColor != this.color) {
97                         this.currentColor = newColor
98                         this.color = newColor
99                         println("The color of the light is changed to $newColor!")
100                         sendEvent([name: "color", value: "$newColor", deviceId: this.id, descriptionText: "",
101                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
102                 }
103         }
104
105         def setColor(String color) {
106                 if (color != this.color) {
107                         this.currentColor = color
108                         this.color = color
109                         println("The color of the light is changed to $color!")
110                         sendEvent([name: "color", value: "$color", deviceId: this.id, descriptionText: "",
111                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
112                 }
113         }
114
115         def setHue(int hue) {
116                 if (hue != this.hue) {
117                         this.hue = hue
118                         this.currentHue = hue
119                         println("The hue level of the light is changed to $hue!")
120                         sendEvent([name: "hue", value: "$hue", deviceId: this.id, descriptionText: "",
121                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
122                 }
123         }
124
125         def setSaturation(int saturation) {
126                 if (saturation != this.saturation) {
127                         this.currentSaturation = saturation
128                         this.saturation = saturation
129                         println("The saturation level of the light is changed to $saturation!")
130                         sendEvent([name: "saturation", value: "$saturation", deviceId: this.id, descriptionText: "",
131                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
132                 }
133         }
134
135         def setLevel(int level) {
136                 if (level != this.level) {
137                         this.currentLevel = level
138                         this.level = level
139                         println("The level of the light is changed to $level!")
140                         sendEvent([name: "level", value: "$level", deviceId: this.id, descriptionText: "",
141                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
142                 }
143         }
144
145         def setLevel(long level) {
146                 if (level != this.level) {
147                         this.currentLevel = level
148                         this.level = level
149                         println("The level of the light is changed to $level!")
150                         sendEvent([name: "level", value: "$level", deviceId: this.id, descriptionText: "",
151                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
152                 }
153         }
154
155         def setColorTemperature(int colorTemperature) {
156                 if (colorTemperature != this.colorTemperature) {
157                         this.colorTemperature = colorTemperature
158                         println("The color temperature level of the light is changed to $colorTemperature!")
159                         sendEvent([name: "colorTemperature", value: "$colorTemperature", deviceId: this.id, descriptionText: "",
160                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
161                 }
162         }
163
164         def on() {
165                 if (this.currentSwitch != "on") {
166                         this.currentSwitch = currentSwitch
167                         println("The light is changed to on!")
168                         sendEvent([name: "switch", value: "on", deviceId: this.id, descriptionText: "",
169                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
170                 }
171         }
172
173         def off() {
174                 if (this.currentSwitch != "off") {
175                         this.currentSwitch = currentSwitch
176                         println("The light is changed to off!")
177                         sendEvent([name: "switch", value: "off", deviceId: this.id, descriptionText: "",
178                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
179                 }
180         }
181
182         def currentValue(String deviceFeature) {
183                 if (deviceFeature == "color") {
184                         return color
185                 } else if (deviceFeature == "saturation") {
186                         return saturation
187                 } else if (deviceFeature == "hue") {
188                         return hue
189                 } else if (deviceFeature == "level") {
190                         return level
191                 } else if (deviceFeature == "colorTemperature") {
192                         return colorTemperature
193                 } else if (deviceFeature == "switch") {
194                         return currentSwitch
195                 }
196         }
197
198         def latestValue(String deviceFeature) {
199                 if (deviceFeature == "color") {
200                         return color
201                 } else if (deviceFeature == "saturation") {
202                         return saturation
203                 } else if (deviceFeature == "hue") {
204                         return hue
205                 } else if (deviceFeature == "level") {
206                         return level
207                 } else if (deviceFeature == "colorTemperature") {
208                         return colorTemperature
209                 } else if (deviceFeature == "switch") {
210                         return currentSwitch
211                 }
212         }
213 }