X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=PresenceSensor%2FPresenceSensor.groovy;h=9c525293ed2551121642ae462ad21c3f03033f65;hb=d0b538d93e64c63d2673796db08570953b57f947;hp=7040a76dd561a4810b8a33e3aea2f99a0b8950f6;hpb=2932def9bb947d617975235763f7338360f0e5a4;p=smartthings-infrastructure.git diff --git a/PresenceSensor/PresenceSensor.groovy b/PresenceSensor/PresenceSensor.groovy index 7040a76..9c52529 100644 --- a/PresenceSensor/PresenceSensor.groovy +++ b/PresenceSensor/PresenceSensor.groovy @@ -1,97 +1,40 @@ -//Create a class for presence sensor +// Create a class for presence sensor package PresenceSensor -import Timer.SimulatedTimer +import SmartThing.SmartThing -//JPF's Verify API -import gov.nasa.jpf.vm.Verify +public class PresenceSensor 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 currentPresence = new StringBuilder() + // Maps from features to values + HashMap deviceValuesMap = new HashMap() + // Possible values for eventsSince method + List possibleValues = new ArrayList(); -public class PresenceSensor { - private String id - private String label - private String displayName - private String presence - private String currentPresence - private String presenceLatestValue + PresenceSensor(Closure sendEvent, StringBuilder id, StringBuilder label, StringBuilder displayName, StringBuilder currentPresence) { + deviceValuesMap = deviceValueSmartThing + idSmartThing = id + labelSmartThing = label + displayNameSmartThing = displayName + sendEventSmartThings = sendEvent + possibleValuesSmartThings = possibleValues - PresenceSensor(String id, String label, String displayName, String presence, String presenceLatestValue) { + // Initialization this.id = id this.label = label this.displayName = displayName - this.presence = presence - this.currentPresence = presence - this.presenceLatestValue = presenceLatestValue - } + this.currentPresence = currentPresence + possibleValues.add("present") + possibleValues.add("not present") - def setValue(String value) { - println("the presence sensor with id:$id is triggered to $value!") - this.presenceLatestValue = value - this.presence = value - this.currentPresence = value - } - - def statesSince() { - eventsSince() - } - - def statesSince(String info, Date dateObj) { - statesSince() - } - - def eventsSince(Date dateObj) { - eventsSince() - } - - def eventsSince() { - def evtActive = [[name: "presence", value: "present", deviceId: "motionSensorID0", descriptionText: "", - displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']] - def evtInactive = [[name: "presence", value: "not present", deviceId: "motionSensorID0", descriptionText: "", - displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}']] - def init = Verify.getInt(0,4) - def evtToSend = [] - if (init == 0) {//return empty set - return evtToSend - } else if (init == 1) {//send one active event - evtActive.each{ - evtToSend.add(it) - } - return evtToSend - } else if (init == 2) {//send two active events - evtActive.each{ - evtToSend.add(it) - } - evtActive.each{ - evtToSend.add(it) - } - return evtToSend - } else if (init == 3) {//send one inactive event - evtInactive.each{ - evtToSend.add(it) - } - return evtToSend - } else if (init == 4) {//send two inactive events - evtInactive.each{ - evtToSend.add(it) - } - evtInactive.each{ - evtToSend.add(it) - } - return evtToSend - } - } - - def currentState(String deviceFeature) { - return [rawDateCreated: [time: System.currentTimeMillis()]] - } - - def currentValue(String deviceFeature) { - if (deviceFeature == "presence") { - return presence - } + deviceValuesMap.put("presence", currentPresence) } - def latestValue(String deviceFeature) { - if (deviceFeature == "presence") { - return presenceLatestValue - } + // Methods to return values + def getCurrentPresence() { + return currentPresence.toString() } }