//Create a class for door control device package DoorControl import SmartThing.SmartThing public class DoorControl extends SmartThing { // id, label, and display name of the device StringBuilder id = new StringBuilder() StringBuilder label = new StringBuilder() StringBuilder displayName = new StringBuilder() // Features with string values StringBuilder currentDoorState = new StringBuilder() // Maps from features to values HashMap deviceValuesMap = new HashMap() DoorControl(Closure sendEvent, StringBuilder id, StringBuilder label, StringBuilder displayName, StringBuilder currentDoorState) { deviceValuesMap = deviceValueSmartThing idSmartThing = id labelSmartThing = label displayNameSmartThing = displayName sendEventSmartThings = sendEvent // Initialization this.id = id this.label = label this.displayName = displayName this.currentDoorState = currentDoorState deviceValuesMap.put("status", currentDoorState) } // Methods to set values def open() { action(currentDoorState, "open", "status") } def open(LinkedHashMap metaData) { open() } def close() { action(currentDoorState, "closed", "status") } def close(LinkedHashMap metaData) { close() } def action(StringBuilder variable, String newValue, String feature) { if (!variable.toString().equals(newValue)) { String tmpID = id.toString() variable.replace(0, variable.length(), newValue) println("$feature of the door with id:$tmpID is changed to $newValue!") sendEvent([name: feature, value: newValue, deviceId: tmpID, descriptionText: "", displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']) } } // Methods to return values def getCurrentDoorState() { return currentDoorState.toString() } }