//Create a class for switch level package SwitchLevel import Timer.SimulatedTimer public class SwitchLevel { private String id private String label private String displayName private String switchState private String currentSwitch private int level private int rate private String switchLatestValue def sendEvent def timers SwitchLevel(Closure sendEvent, String id, String label, String displayName, int level, String switchState, String switchLatestValue) { this.sendEvent = sendEvent this.timers = new SimulatedTimer() this.id = id this.label = label this.displayName = displayName this.level = level this.rate = level this.switchState = switchState this.currentSwitch = switchState this.switchLatestValue = switchLatestValue } //By Apps def setLevel(int level) { if (this.level != level) { println("the switch with id:$id is setted to level $level!") this.level = level this.rate = level sendEvent([name: "level", value: "50", deviceId: this.id, descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) } } def on() { if (this.switchState != "on") { println("the switch with id:$id is on!") this.switchLatestValue = this.switchState this.switchState = "on" this.currentSwitch = "on" sendEvent([name: "switch", value: "on", deviceId: this.id, descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) } } def on(LinkedHashMap metaData) { if (this.switchState != "on") { def task = timers.runAfter(metaData["delay"]) { println("the switch with id:$id is on!") this.switchLatestValue = this.switchState this.switchState = "on" this.currentSwitch = "on" sendEvent([name: "switch", value: "on", deviceId: this.id, descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) } } } def off() { if (this.switchState != "off") { println("the switch with id:$id is off!") this.switchLatestValue = this.switchState this.switchState = "off" this.currentSwitch = "off" sendEvent([name: "switch", value: "off", deviceId: this.id, descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) } } def off(LinkedHashMap metaData) { if (this.switchState != "off") { def task = timers.runAfter(metaData["delay"]) { println("the switch with id:$id is off!") this.switchLatestValue = this.switchState this.switchState = "off" this.currentSwitch = "off" sendEvent([name: "switch", value: "off", deviceId: this.id, descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) } } } //By Model Checker def setValue(String value) { println("the switch with id:$id is setted to level $value!") this.level = value.toInteger() this.rate = value.toInteger() } }