0e9ced0f3d70afae552600d363ac1ccdd2175ee9
[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                 switch (hexColor) {
70                         case "#0000FF":
71                                 color = "Blue"
72                                 break;
73                         case "#00FF00":
74                                 color = "Green"
75                                 break;
76                         case "#FFFF00":
77                                 color = "Yellow"
78                                 break;
79                         case "#FF6000":
80                                 color = "Orange"
81                                 break;
82                         case "#BF7FBF":
83                                 color = "Purple"
84                                 break;
85                         case "#FF5F5F":
86                                 color = "Pink"
87                                 break;
88                         case "#FF0000":
89                                 color = "Red"
90                                 break;
91                         default:
92                                 color = "Blue"
93                                 break;
94                 }
95                 if (color != this.color) {
96                         this.currentColor = color
97                         this.color = color
98                         println("The color of the light is changed to $color!")
99                         sendEvent([name: "color", value: "$color", deviceId: this.id, descriptionText: "",
100                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
101                 }
102         }
103
104         def setColor(String color) {
105                 if (color != this.color) {
106                         this.currentColor = color
107                         this.color = color
108                         println("The color of the light is changed to $color!")
109                         sendEvent([name: "color", value: "$color", deviceId: this.id, descriptionText: "",
110                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
111                 }
112         }
113
114         def setHue(int hue) {
115                 if (hue != this.hue) {
116                         this.hue = hue
117                         this.currentHue = hue
118                         println("The hue level of the light is changed to $hue!")
119                         sendEvent([name: "hue", value: "$hue", deviceId: this.id, descriptionText: "",
120                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
121                 }
122         }
123
124         def setSaturation(int saturation) {
125                 if (saturation != this.saturation) {
126                         this.currentSaturation = saturation
127                         this.saturation = saturation
128                         println("The saturation level of the light is changed to $saturation!")
129                         sendEvent([name: "saturation", value: "$saturation", deviceId: this.id, descriptionText: "",
130                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
131                 }
132         }
133
134         def setLevel(int level) {
135                 if (level != this.level) {
136                         this.currentLevel = level
137                         this.level = level
138                         println("The level of the light is changed to $level!")
139                         sendEvent([name: "level", value: "$level", deviceId: this.id, descriptionText: "",
140                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
141                 }
142         }
143
144         def setColorTemperature(int colorTemperature) {
145                 if (colorTemperature != this.colorTemperature) {
146                         this.colorTemperature = colorTemperature
147                         println("The color temperature level of the light is changed to $colorTemperature!")
148                         sendEvent([name: "colorTemperature", value: "$colorTemperature", deviceId: this.id, descriptionText: "",
149                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
150                 }
151         }
152
153         def on() {
154                 if (this.currentSwitch != "on") {
155                         this.currentSwitch = currentSwitch
156                         println("The light is changed to on!")
157                         sendEvent([name: "switch", value: "on", deviceId: this.id, descriptionText: "",
158                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
159                 }
160         }
161
162         def off() {
163                 if (this.currentSwitch != "off") {
164                         this.currentSwitch = currentSwitch
165                         println("The light is changed to off!")
166                         sendEvent([name: "switch", value: "off", deviceId: this.id, descriptionText: "",
167                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
168                 }
169         }
170
171         def currentValue(String deviceFeature) {
172                 if (deviceFeature == "color") {
173                         return color
174                 } else if (deviceFeature == "saturation") {
175                         return saturation
176                 } else if (deviceFeature == "hue") {
177                         return hue
178                 } else if (deviceFeature == "level") {
179                         return level
180                 } else if (deviceFeature == "colorTemperature") {
181                         return colorTemperature
182                 } else if (deviceFeature == "switch") {
183                         return currentSwitch
184                 }
185         }
186
187         def latestValue(String deviceFeature) {
188                 if (deviceFeature == "color") {
189                         return color
190                 } else if (deviceFeature == "saturation") {
191                         return saturation
192                 } else if (deviceFeature == "hue") {
193                         return hue
194                 } else if (deviceFeature == "level") {
195                         return level
196                 } else if (deviceFeature == "colorTemperature") {
197                         return colorTemperature
198                 } else if (deviceFeature == "switch") {
199                         return currentSwitch
200                 }
201         }
202 }