X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=SwitchLevel%2FSwitchLevels.groovy;h=bc9140cc4344c844f06a23bdf562ee654790c41f;hb=f719b3a1011f5d99e474a4164b09e3ab528a9dfe;hp=35c4ad9669d21dbeab9a5b4e8b5b2de7c7836c7f;hpb=a97167cd66b70c9fa13d31ed411036713f386498;p=smartthings-infrastructure.git diff --git a/SwitchLevel/SwitchLevels.groovy b/SwitchLevel/SwitchLevels.groovy index 35c4ad9..bc9140c 100644 --- a/SwitchLevel/SwitchLevels.groovy +++ b/SwitchLevel/SwitchLevels.groovy @@ -13,18 +13,46 @@ public class SwitchLevels { private String label = "switchLevel0" private String displayName = "switchLevel0" private int level = 50 + private int currentLevel = 50 private int rate = 50 - private String switchState = "off" - private String currentSwitch = "off" - private String switchLatestValue = "off" + private int currentRate = 50 + private int hue = 30 + private int currentHue = 30 + private int saturation = 70 + private String switchState = "on" + private String currentSwitch = "on" + private String switchLatestValue = "on" - SwitchLevels(Closure sendEvent, int deviceNumbers) { + SwitchLevels(Closure sendEvent, int deviceNumbers, boolean init) { this.sendEvent = sendEvent this.timers = new SimulatedTimer() this.deviceNumbers = deviceNumbers this.switchLevels = [] - switchLevels.add(new SwitchLevel(sendEvent, id, label, displayName, this.level, this.switchState, this.switchLatestValue)) + if (init) { + this.level = 50 + this.currentLevel = 50 + this.rate = 50 + this.currentRate = 50 + this.hue = 30 + this.currentHue = 30 + this.saturation = 70 + this.switchState = "off" + this.currentSwitch = "off" + this.switchLatestValue = "off" + } else { + this.level = 60 + this.currentLevel = 60 + this.rate = 60 + this.currentRate = 60 + this.hue = 50 + this.currentHue = 50 + this.saturation = 90 + this.switchState = "on" + this.currentSwitch = "on" + this.switchLatestValue = "on" + } + switchLevels.add(new SwitchLevel(sendEvent, id, label, displayName, this.level, this.hue, this.saturation, this.switchState, this.switchLatestValue)) } //Methods for closures @@ -40,61 +68,115 @@ public class SwitchLevels { def find(Closure Input) { switchLevels.find(Input) } + def sort(Closure Input) { + switchLevels.sort(Input) + } def collect(Closure Input) { switchLevels.collect(Input) } //By Apps + def setColor(LinkedHashMap metaData) { + if ((this.level != metaData["level"]) || (this.hue != metaData["hue"]) || (this.saturation != metaData["saturation"])) { + this.level = metaData["level"] + this.currentLevel = metaData["level"] + this.rate = metaData["level"] + this.currentRate = metaData["level"] + this.hue = metaData["hue"] + this.currentHue = metaData["hue"] + this.saturation = metaData["saturation"] + switchLevels[0].setColor(metaData) + } + } + + def setLevel(String level) { + def newLevel = level.toInteger() + setLevel(newLevel) + } + def setLevel(int level) { + if (this.level != level) { + switchLevels[0].setLevel(level) + this.level = level + this.currentLevel = level + this.rate = level + this.currentRate = level + } + } + + def setLevel(long level) { if (this.level != level) { switchLevels[0].setLevel(level) this.level = level this.rate = level + this.currentLevel = level + this.currentRate = level } } def on() { - switchLevels[0].on() - switchLatestValue = switchState + switchLatestValue = "on" switchState = "on" currentSwitch = "on" + switchLevels[0].on() } def on(LinkedHashMap metaData) { def task = timers.runAfter(metaData["delay"]) { - switchLevels[0].on() - switchLatestValue = switchState + switchLatestValue = "on" switchState = "on" currentSwitch = "on" + switchLevels[0].on() } } def off() { - switchLevels[0].off() - switchLatestValue = switchState + switchLatestValue = "off" switchState = "off" currentSwitch = "off" + switchLevels[0].off() } def off(LinkedHashMap metaData) { def task = timers.runAfter(metaData["delay"]) { - switchLevels[0].off() - switchLatestValue = switchState + switchLatestValue = "off" switchState = "off" currentSwitch = "off" + switchLevels[0].off() } } //By Model Checker def setValue(LinkedHashMap eventDataMap) { - if (eventDataMap["value"] != switchLevels[0].level) { - switchLevels[0].setValue(eventDataMap["value"]) - this.level = switchLevels[0].level - this.rate = switchLevels[0].level - sendEvent(eventDataMap) + if (eventDataMap["name"] == "switch") { + if (eventDataMap["value"] != switchLevels[0].switchState) { + this.switchState = eventDataMap["value"] + this.switchLatestValue = eventDataMap["value"] + this.currentSwitch = eventDataMap["value"] + switchLevels[0].setValue(eventDataMap["value"], "switch") + sendEvent(eventDataMap) + } + } else if (eventDataMap["name"] == "level") { + if (eventDataMap["value"].toInteger() != switchLevels[0].level) { + this.level = eventDataMap["value"].toInteger() + this.currentLevel = eventDataMap["value"].toInteger() + this.currentRate = eventDataMap["value"].toInteger() + this.rate = eventDataMap["value"].toInteger() + switchLevels[0].setValue(eventDataMap["value"], "level") + sendEvent(eventDataMap) + } } } + def currentValue(String deviceFeature) { + switchLevels[0].currentValue(deviceFeature) + } + + def latestValue(String deviceFeature) { + switchLevels[0].latestValue(deviceFeature) + } + + def getAt(int ix) { switchLevels[ix] }