X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=ColorControl%2FColorControl.groovy;h=4878c48b9f82c55e43a105068269d29e1b6f02dc;hb=a78de66c478e9268f752e7b38e0acd3d27637eb6;hp=53658dce6e3ddb542ee1f616f6a7fa4174fd195d;hpb=d3802bd96ca8963ae52b9740443f9be6896f0e18;p=smartthings-infrastructure.git diff --git a/ColorControl/ColorControl.groovy b/ColorControl/ColorControl.groovy index 53658dc..4878c48 100644 --- a/ColorControl/ColorControl.groovy +++ b/ColorControl/ColorControl.groovy @@ -4,40 +4,54 @@ import Timer.SimulatedTimer public class ColorControl { + def sendEvent private String id private String label private String displayName private String color + private String currentColor private String currentSwitch private int level + private int currentLevel private int hue + private int currentHue private int saturation + private int currentSaturation private int colorTemperature - ColorControl(String id, String label, String displayName, String color, int hue, int saturation, int level, String currentSwitch, int colorTemperature) { + ColorControl(Closure sendEvent, String id, String label, String displayName, String color, int hue, int saturation, int level, String currentSwitch, int colorTemperature) { this.id = id this.label = label this.displayName = displayName this.color = color + this.currentColor = color this.hue = hue + this.currentHue = hue this.saturation = saturation + this.currentSaturation = saturation this.level = level + this.currentLevel = level this.currentSwitch = currentSwitch this.colorTemperature = colorTemperature + this.sendEvent = sendEvent } //By model checker def setValue(String value, String name) { if ((name == "color") && (value != this.color)) { this.color = value + this.currentColor = value println("the color of the light is changed to $value!") } else if ((name == "hue") && (value != this.hue)) { this.hue = value.toInteger() + this.currentHue = value.toInteger() println("The hue level of the light is changed to $value!") } else if ((name == "saturation") && (value != this.saturation)) { this.saturation = value.toInteger() + this.currentSaturation = value.toInteger() println("The saturation level of the light is changed to $value!") } else if ((name == "level") && (value != this.level)) { + this.currentLevel = value.toInteger() this.level = value.toInteger() println("The level of the light is changed to $value!") } else if ((name == "currentSwitch") && (value != this.currentSwitch)) { @@ -50,8 +64,47 @@ public class ColorControl { } //methods + def setColor(LinkedHashMap metaData) { + def hexColor = metaData.hex + def newColor + switch (hexColor) { + case "#0000FF": + newColor = "Blue" + break; + case "#00FF00": + newColor = "Green" + break; + case "#FFFF00": + newColor = "Yellow" + break; + case "#FF6000": + newColor = "Orange" + break; + case "#BF7FBF": + newColor = "Purple" + break; + case "#FF5F5F": + newColor = "Pink" + break; + case "#FF0000": + newColor = "Red" + break; + default: + newColor = "Blue" + break; + } + if (newColor != this.color) { + this.currentColor = newColor + this.color = newColor + println("The color of the light is changed to $newColor!") + sendEvent([name: "color", value: "$newColor", deviceId: this.id, descriptionText: "", + displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) + } + } + def setColor(String color) { if (color != this.color) { + this.currentColor = color this.color = color println("The color of the light is changed to $color!") sendEvent([name: "color", value: "$color", deviceId: this.id, descriptionText: "", @@ -62,6 +115,7 @@ public class ColorControl { def setHue(int hue) { if (hue != this.hue) { this.hue = hue + this.currentHue = hue println("The hue level of the light is changed to $hue!") sendEvent([name: "hue", value: "$hue", deviceId: this.id, descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) @@ -70,6 +124,7 @@ public class ColorControl { def setSaturation(int saturation) { if (saturation != this.saturation) { + this.currentSaturation = saturation this.saturation = saturation println("The saturation level of the light is changed to $saturation!") sendEvent([name: "saturation", value: "$saturation", deviceId: this.id, descriptionText: "", @@ -79,6 +134,7 @@ public class ColorControl { def setLevel(int level) { if (level != this.level) { + this.currentLevel = level this.level = level println("The level of the light is changed to $level!") sendEvent([name: "level", value: "$level", deviceId: this.id, descriptionText: "", @@ -95,24 +151,20 @@ public class ColorControl { } } - def on(String currentSwitch) { - if (currentSwitch != this.currentSwitch) { + def on() { + if (this.currentSwitch != "on") { this.currentSwitch = currentSwitch - println("The light is changed to $currentSwitch!") - sendEvent([name: "switch", value: "$currentSwitch", deviceId: this.id, descriptionText: "", - displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) - sendEvent([name: "switch.on", value: "$currentSwitch", deviceId: this.id, descriptionText: "", + println("The light is changed to on!") + sendEvent([name: "switch", value: "on", deviceId: this.id, descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) } } - def off(String currentSwitch) { - if (currentSwitch != this.currentSwitch) { + def off() { + if (this.currentSwitch != "off") { this.currentSwitch = currentSwitch - println("The light is changed to $currentSwitch!") - sendEvent([name: "switch", value: "$currentSwitch", deviceId: this.id, descriptionText: "", - displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) - sendEvent([name: "switch.off", value: "$currentSwitch", deviceId: this.id, descriptionText: "", + println("The light is changed to off!") + sendEvent([name: "switch", value: "off", deviceId: this.id, descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) } }