import groovy.transform.Field
//Importing Classes
-import ContactSensor.Contacting
-import ContactSensor.Contacts
-import Lock.Locking
+import ContactSensor.ContactSensor
+import ContactSensor.ContactSensors
+import DoorControl.DoorControl
+import DoorControl.DoorControls
+import Lock.Lock
import Lock.Locks
-import Switch.Switching
+import Thermostat.Thermostat
+import Thermostat.Thermostats
+import Switch.Switch
import Switch.Switches
+import PresenceSensor.PresenceSensor
+import PresenceSensor.PresenceSensors
import Logger.Logger
import Location.LocationVar
import Location.Phrase
import appTouch.Touched
+import NfcTouch.NfcTouch
+import AeonKeyFob.AeonKeyFob
+import AeonKeyFob.AeonKeyFobs
+import MusicPlayer.MusicPlayer
+import MusicPlayer.MusicPlayers
+import MotionSensor.MotionSensor
+import MotionSensor.MotionSensors
+import ImageCapture.ImageCapture
+import ImageCapture.ImageCaptures
+import SmokeDetector.SmokeDetector
+import SmokeDetector.SmokeDetectors
+import Alarm.Alarm
+import Alarm.Alarms
+import SpeechSynthesis.SpeechSynthesis
+import SpeechSynthesis.SpeechSynthesises
import Event.Event
import Timer.SimulatedTimer
eventHandler(eventDataMap)
}
//Object for location
-@Field def locationObject = new LocationVar()
-//Object for touch
+@Field def locationObject = new LocationVar(sendEvent)
+//Object for touch to call function
@Field def appObject = new Touched(sendEvent, 0)
//Create a global list for events
@Field def evt = []
-
-//Extracted global objects for both Apps
-//Global Object for class lock!
-@Field def lockObject = new Locking(sendEvent,1)
-//Global Object for class contactSensor!
-@Field def contactObject = new Contacting(sendEvent,1)
+//Global Object for class Touch Sensor!
+@Field def touchSensorObject = new NfcTouch(sendEvent, 1)
//Global Object for class switch!
-@Field def switchObject = new Switching(sendEvent, 1)
+@Field def switchObject = new Switches(sendEvent, 1)
+//Global Object for class lock!
+@Field def lockObject = new Locks(sendEvent, 1)
+//Global Object for class door control!
+@Field def doorControlObject = new DoorControls(sendEvent, 1)
+//Global Object for class contact sensor!
+@Field def contactObject = new ContactSensors(sendEvent, 1)
+//Global Object for class presence sensor!
+@Field def presenceSensorObject = new PresenceSensors(sendEvent, 1)
+//Global Object for class thermostat!
+@Field def thermostatObject = new Thermostats(sendEvent, 1)
+//Global Object for class aeon key fob!
+@Field def aeonKeyFobObject = new AeonKeyFobs(sendEvent, 1)
+//Global Object for class music player!
+@Field def musicPlayerObject = new MusicPlayers(sendEvent, 1)
+//Global Object for class motion sensor!
+@Field def motionSensorObject = new MotionSensors(sendEvent, 1)
+//Global Object for class image capture!
+@Field def imageCaptureObject = new ImageCaptures(sendEvent, 1)
+//Global Object for class smoke detector!
+@Field def smokeDetectorObject = new SmokeDetectors(sendEvent, 1)
+//Global Object for class alarm!
+@Field def alarmObject = new Alarms(sendEvent, 1)
+//Global Object for class speech synthesis!
+@Field def speechSynthesisObject = new SpeechSynthesises(sendEvent, 1)
//Application #1
class App1 {
def app
//Extracted objects for App1
+ //Object for class switch!
+ def switches
+ //Object for class thermostat!
+ def thermostats
//Object for class lock!
- def lock1
- //Object for class contactSensor!
- def contact
- //Global variable for number!
- def minutesLater = 1
- //Global variable for number!
- def secondsLater = 10
- //Global variable for contact!
- def recipients = "AJ"
- //Global variable for phone!
- def phoneNumber = 9495379373
+ def locks
//Extracted objects for functions for App1
//Global Object for functions in subscribe method!
//Global Object for functions in subscribe method!
def updated = this.&updated
//Global Object for functions in subscribe method!
- def initialize = this.&initialize
+ def appTouch = this.&appTouch
+ //Global Object for functions in subscribe method!
+ def changedLocationMode = this.&changedLocationMode
//Global Object for functions in subscribe method!
- def lockDoor = this.&lockDoor
+ def restoreState = this.&restoreState
//Global Object for functions in subscribe method!
- def unlockDoor = this.&unlockDoor
+ def saveState = this.&saveState
//Global Object for functions in subscribe method!
- def doorHandler = this.&doorHandler
+ def getCurrentMode = this.&getCurrentMode
App1(Object obj) {
reference = obj
location = obj.locationObject
app = obj.appObject
- lock1 = obj.lockObject
- contact = obj.contactObject
+ switches = obj.switchObject
+ thermostats = obj.thermostatObject
+ locks = obj.lockObject
+ //Global variable for settings!
+ settings = [app:app, switches:switches, thermostats:thermostats, locks:locks]
}
//Global variables for each app
- //Settings variable defined to settings on purpose
- def settings = "Settings"
//Global variable for state[mode]
def state = [home:[],away:[],night:[]]
//Create a global logger object for methods
def timersFuncList = []
//Create a global list for timer schedulers
def timersList = []
+ //Create a global variable for settings
+ def settings
+ //Zip code
+ def zipCode = 92617
//Methods
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
////subscribe(obj, func)
def subscribe(Object obj, Closure FunctionToCall) {
- objectList.add(obj)
- eventList.add("Touched")
- functionList.add(FunctionToCall)
+ if (obj == app) {
+ objectList.add(obj)
+ eventList.add("Touched")
+ functionList.add(FunctionToCall)
+ } else if (obj == location) {
+ objectList.add(obj)
+ eventList.add("Location")
+ functionList.add(FunctionToCall)
+ }
}
////subscribe(obj, event, func)
def subscribe(Object obj, String event, Closure FunctionToCall) {
def runIn(int seconds, Closure functionToCall) {
if (timersFuncList.contains(functionToCall)) {
timersList[timersFuncList.indexOf(functionToCall)].cancel()
- def task = timersList[timersFuncList.indexOf(functionToCall)].runAfter(1000*seconds, functionToCall)
+ def task = timersList[timersFuncList.indexOf(functionToCall)].runAfter(1000*seconds*0, functionToCall)
} else {
timersFuncList.add(functionToCall)
timersList.add(new SimulatedTimer())
- def task = timersList[timersFuncList.indexOf(functionToCall)].runAfter(1000*seconds, functionToCall)
+ def task = timersList[timersFuncList.indexOf(functionToCall)].runAfter(1000*seconds*0, functionToCall)
+ }
+ }
+
+ def runIn(int seconds, Closure functionToCall, LinkedHashMap metaData) {
+ runIn(seconds, functionToCall)
+ }
+
+ def runIn(int seconds, String nameOfFunction, LinkedHashMap metaData) {
+ runIn(seconds, nameOfFunction)
+ }
+
+ def runIn(int seconds, String nameOfFunction) {
+ timersFuncList.add(nameOfFunction)
+ timersList.add(new SimulatedTimer())
+ def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(seconds*1000*0) {
+ "$nameOfFunction"()
}
}
/////////////////////////////////////////////////////////////////////
def sendSms(long phoneNumber, String text) {
println("Sending \""+text+"\" to "+phoneNumber.toString())
}
+
+ def sendSMS(long phoneNumber, String text) {
+ println("Sending \""+text+"\" to "+phoneNumber.toString())
+ }
/////////////////////////////////////////////////////////////////////
////sendPush(text)
def sendPush(String text) {
timersFuncList.add(nameOfFunction)
timersList.add(new SimulatedTimer())
- def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*1000) {
+ def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*1000*0) {
"$nameOfFunction"()
}
}
if (timersFuncList.contains(nameOfFunction)) {
timersList[timersFuncList.indexOf(nameOfFunction)].cancel()
- def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*seconds, nameOfFunction)
+ def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*seconds*0, nameOfFunction)
} else {
timersFuncList.add(nameOfFunction)
timersList.add(new SimulatedTimer())
- def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*seconds, nameOfFunction)
+ def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*seconds*0, nameOfFunction)
}
}
+ /////////////////////////////////////////////////////////////////////
+ def now() {
+ return System.currentTimeMillis()
+ }
+ /////////////////////////////////////////////////////////////////////
+ def getTemperatureScale() {
+ return 'C' //Celsius for now
+ }
+
+ /////////////////////////////////////////////////////////////////////
+ def getSunriseAndSunset(LinkedHashMap metaData) {
+ def sunRiseSetInfo = [sunrise:[time:1563800160000],sunset:[time:1563850740000]]
+ return sunRiseSetInfo
+ }
- def installed(){
- initialize()
+ def installed() {
+ subscribe(location, changedLocationMode)
+ subscribe(app, appTouch)
+ saveState()
}
- def updated(){
- unsubscribe()
- unschedule()
- initialize()
+ def updated() {
+ unsubscribe()
+ subscribe(location, changedLocationMode)
+ subscribe(app, appTouch)
+ saveState()
}
- def initialize(){
- log.debug "Settings: ${settings}"
- subscribe(lock1, "lock", doorHandler, [filterEvents: false])
- subscribe(lock1, "unlock", doorHandler, [filterEvents: false])
- subscribe(contact, "contact.open", doorHandler)
- subscribe(contact, "contact.closed", doorHandler)
+ def appTouch(evt)
+ {
+ restoreState(currentMode)
}
- def lockDoor(){
- log.debug "Locking the door."
- lock1.lock()
- if(location.contactBookEnabled) {
- if ( recipients ) {
- log.debug ( "Sending Push Notification..." )
- sendNotificationToContacts( "${lock1} locked after ${contact} was closed for ${minutesLater} minutes!", recipients)
- }
- }
- if (phoneNumber) {
- log.debug("Sending text message...")
- sendSms( phoneNumber, "${lock1} locked after ${contact} was closed for ${minutesLater} minutes!")
- }
+ def changedLocationMode(evt)
+ {
+ restoreState(evt.value)
}
- def unlockDoor(){
- log.debug "Unlocking the door."
- lock1.unlock()
- if(location.contactBookEnabled) {
- if ( recipients ) {
- log.debug ( "Sending Push Notification..." )
- sendNotificationToContacts( "${lock1} unlocked after ${contact} was opened for ${secondsLater} seconds!", recipients)
- }
- }
- if ( phoneNumber ) {
- log.debug("Sending text message...")
- sendSms( phoneNumber, "${lock1} unlocked after ${contact} was opened for ${secondsLater} seconds!")
- }
+ private restoreState(mode)
+ {
+ log.info "restoring state for mode '$mode'"
+ def map = state[mode] ?: [:]
+ switches?.each {
+ def value = map[it.id]
+ if (value?.switch == "on") {
+ def level = value.level
+ if (level) {
+ log.debug "setting $it.label level to $level"
+ it.setLevel(level)
+ }
+ else {
+ log.debug "turning $it.label on"
+ it.on()
+ }
+ }
+ else if (value?.switch == "off") {
+ log.debug "turning $it.label off"
+ it.off()
+ }
+ }
+
+ thermostats?.each {
+ def value = map[it.id]
+ if (value?.coolingSetpoint) {
+ log.debug "coolingSetpoint = $value.coolingSetpoint"
+ it.setCoolingSetpoint(value.coolingSetpoint)
+ }
+ if (value?.heatingSetpoint) {
+ log.debug "heatingSetpoint = $value.heatingSetpoint"
+ it.setHeatingSetpoint(value.heatingSetpoint)
+ }
+ }
+
+ locks?.each {
+ def value = map[it.id]
+ if (value) {
+ if (value?.locked) {
+ it.lock()
+ }
+ else {
+ it.unlock()
+ }
+ }
+ }
}
- def doorHandler(evt){
- if ((contact.latestValue("contact") == "open") && (evt.value == "locked")) { // If the door is open and a person locks the door then...
- //def delay = (secondsLater) // runIn uses seconds
- runIn( secondsLater, unlockDoor ) // ...schedule (in minutes) to unlock... We don't want the door to be closed while the lock is engaged.
- }
- else if ((contact.latestValue("contact") == "open") && (evt.value == "unlocked")) { // If the door is open and a person unlocks it then...
- unschedule( unlockDoor ) // ...we don't need to unlock it later.
- }
- else if ((contact.latestValue("contact") == "closed") && (evt.value == "locked")) { // If the door is closed and a person manually locks it then...
- unschedule( lockDoor ) // ...we don't need to lock it later.
- }
- else if ((contact.latestValue("contact") == "closed") && (evt.value == "unlocked")) { // If the door is closed and a person unlocks it then...
- //def delay = (minutesLater * 60) // runIn uses seconds
- runIn( (minutesLater * 60), lockDoor ) // ...schedule (in minutes) to lock.
- }
- else if ((lock1.latestValue("lock") == "unlocked") && (evt.value == "open")) { // If a person opens an unlocked door...
- unschedule( lockDoor ) // ...we don't need to lock it later.
- }
- else if ((lock1.latestValue("lock") == "unlocked") && (evt.value == "closed")) { // If a person closes an unlocked door...
- //def delay = (minutesLater * 60) // runIn uses seconds
- runIn( (minutesLater * 60), lockDoor ) // ...schedule (in minutes) to lock.
- }
- else { //Opening or Closing door when locked (in case you have a handle lock)
- log.debug "Unlocking the door."
- lock1.unlock()
- if(location.contactBookEnabled) {
- if ( recipients ) {
- log.debug ( "Sending Push Notification..." )
- sendNotificationToContacts( "${lock1} unlocked after ${contact} was opened or closed when ${lock1} was locked!", recipients)
- }
- }
- if ( phoneNumber ) {
- log.debug("Sending text message...")
- sendSms( phoneNumber, "${lock1} unlocked after ${contact} was opened or closed when ${lock1} was locked!")
- }
- }
+
+ private saveState()
+ {
+ def mode = currentMode
+ def map = state[mode] ?: [:]
+
+ switches?.each {
+ map[it.id] = [switch: it.currentSwitch, level: it.currentLevel]
+ }
+
+ thermostats?.each {
+ map[it.id] = [coolingSetpoint: it.currentCoolingSetpoint, heatingSetpoint: it.currentHeatingSetpoint]
+ }
+
+ locks?.each {
+ map[it.id] = [locked: it.currentLock == "locked"]
+ }
+
+ state[mode] = map
+ log.debug "saved state for mode ${mode}: ${state[mode]}"
+ log.debug "state: $state"
+ }
+
+ private getCurrentMode()
+ {
+ location.mode ?: "_none_"
}
}
def app
//Extracted objects for App2
+ //Object for class Touch Sensor!
+ def tag
//Object for class switch!
- def switchesoff
- //Object for class switch!
- def switcheson
+ def switch1
//Object for class lock!
- def lock1
- //Global variable for mode!
- def newMode = "away"
- //Global variable for number!
- def waitfor = 4
+ def lock
+ //Object for class door control!
+ def garageDoor
+ //Global variable for enum!
+ def masterSwitch = "Yes"
+ //Global variable for enum!
+ def masterLock = "Yes"
+ //Global variable for enum!
+ def masterDoor = "No"
//Extracted objects for functions for App2
//Global Object for functions in subscribe method!
+ def pageTwo = this.&pageTwo
+ //Global Object for functions in subscribe method!
def installed = this.&installed
//Global Object for functions in subscribe method!
def updated = this.&updated
//Global Object for functions in subscribe method!
- def appTouch = this.&appTouch
+ def initialize = this.&initialize
+ //Global Object for functions in subscribe method!
+ def touchHandler = this.&touchHandler
App2(Object obj) {
reference = obj
location = obj.locationObject
app = obj.appObject
- switchesoff = obj.switchObject
- switcheson = obj.switchObject
- lock1 = obj.lockObject
+ tag = obj.touchSensorObject
+ switch1 = obj.switchObject
+ lock = obj.lockObject
+ garageDoor = obj.doorControlObject
+ //Global variable for settings!
+ settings = [app:app, tag:tag, switch1:switch1, lock:lock, garageDoor:garageDoor, masterSwitch:masterSwitch, masterLock:masterLock, masterDoor:masterDoor]
}
//Global variables for each app
- //Settings variable defined to settings on purpose
- def settings = "Settings"
//Global variable for state[mode]
def state = [home:[],away:[],night:[]]
//Create a global logger object for methods
def timersFuncList = []
//Create a global list for timer schedulers
def timersList = []
+ //Create a global variable for settings
+ def settings
+ //Zip code
+ def zipCode = 92617
//Methods
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
////subscribe(obj, func)
def subscribe(Object obj, Closure FunctionToCall) {
- objectList.add(obj)
- eventList.add("Touched")
- functionList.add(FunctionToCall)
+ if (obj == app) {
+ objectList.add(obj)
+ eventList.add("Touched")
+ functionList.add(FunctionToCall)
+ } else if (obj == location) {
+ objectList.add(obj)
+ eventList.add("Location")
+ functionList.add(FunctionToCall)
+ }
}
////subscribe(obj, event, func)
def subscribe(Object obj, String event, Closure FunctionToCall) {
def runIn(int seconds, Closure functionToCall) {
if (timersFuncList.contains(functionToCall)) {
timersList[timersFuncList.indexOf(functionToCall)].cancel()
- def task = timersList[timersFuncList.indexOf(functionToCall)].runAfter(1000*seconds, functionToCall)
+ def task = timersList[timersFuncList.indexOf(functionToCall)].runAfter(1000*seconds*0, functionToCall)
} else {
timersFuncList.add(functionToCall)
timersList.add(new SimulatedTimer())
- def task = timersList[timersFuncList.indexOf(functionToCall)].runAfter(1000*seconds, functionToCall)
+ def task = timersList[timersFuncList.indexOf(functionToCall)].runAfter(1000*seconds*0, functionToCall)
+ }
+ }
+
+ def runIn(int seconds, Closure functionToCall, LinkedHashMap metaData) {
+ runIn(seconds, functionToCall)
+ }
+
+ def runIn(int seconds, String nameOfFunction, LinkedHashMap metaData) {
+ runIn(seconds, nameOfFunction)
+ }
+
+ def runIn(int seconds, String nameOfFunction) {
+ timersFuncList.add(nameOfFunction)
+ timersList.add(new SimulatedTimer())
+ def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(seconds*1000*0) {
+ "$nameOfFunction"()
}
}
/////////////////////////////////////////////////////////////////////
def sendSms(long phoneNumber, String text) {
println("Sending \""+text+"\" to "+phoneNumber.toString())
}
+
+ def sendSMS(long phoneNumber, String text) {
+ println("Sending \""+text+"\" to "+phoneNumber.toString())
+ }
/////////////////////////////////////////////////////////////////////
////schedule(time, nameOfFunction as String)
def schedule(String time, String nameOfFunction) {
timersFuncList.add(nameOfFunction)
timersList.add(new SimulatedTimer())
- def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*1000) {
+ def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*1000*0) {
"$nameOfFunction"()
}
}
if (timersFuncList.contains(nameOfFunction)) {
timersList[timersFuncList.indexOf(nameOfFunction)].cancel()
- def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*seconds, nameOfFunction)
+ def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*seconds*0, nameOfFunction)
} else {
timersFuncList.add(nameOfFunction)
timersList.add(new SimulatedTimer())
- def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*seconds, nameOfFunction)
+ def task = timersList[timersFuncList.indexOf(nameOfFunction)].runAfter(delay*seconds*0, nameOfFunction)
}
}
+ /////////////////////////////////////////////////////////////////////
+ def now() {
+ return System.currentTimeMillis()
+ }
+ /////////////////////////////////////////////////////////////////////
+ def getTemperatureScale() {
+ return 'C' //Celsius for now
+ }
+
+ /////////////////////////////////////////////////////////////////////
+ def getSunriseAndSunset(LinkedHashMap metaData) {
+ def sunRiseSetInfo = [sunrise:[time:1563800160000],sunset:[time:1563850740000]]
+ return sunRiseSetInfo
+ }
- def installed()
- {
- log.debug "Installed with settings: ${settings}"
- log.debug "Current mode = ${location.mode}"
- subscribe(app, appTouch)
+ def pageTwo() {
+ dynamicPage(name: "pageTwo") {
+ section("If set, the state of these devices will be toggled each time the tag is touched, " +
+ "e.g. a light that's on will be turned off and one that's off will be turned on, " +
+ "other devices of the same type will be set to the same state as their master device. " +
+ "If no master is designated then the majority of devices of the same type will be used " +
+ "to determine whether to turn on or off the devices.") {
+
+ if (switch1 || masterSwitch) {
+ input "masterSwitch", "enum", title: "Master switch", options: switch1.collect{[(it.id): it.displayName]}, required: false
+ }
+ if (lock || masterLock) {
+ input "masterLock", "enum", title: "Master lock", options: lock.collect{[(it.id): it.displayName]}, required: false
+ }
+ if (garageDoor || masterDoor) {
+ input "masterDoor", "enum", title: "Master door", options: garageDoor.collect{[(it.id): it.displayName]}, required: false
+ }
+ }
+ section([mobileOnly:true]) {
+ label title: "Assign a name", required: false
+ mode title: "Set for specific mode(s)", required: false
+ }
+ }
}
+ def installed() {
+ log.debug "Installed with settings: ${settings}"
- def updated()
- {
+ initialize()
+ }
+
+ def updated() {
log.debug "Updated with settings: ${settings}"
- log.debug "Current mode = ${location.mode}"
+
unsubscribe()
- subscribe(app, appTouch)
+ initialize()
+ }
+
+ def initialize() {
+ subscribe tag, "nfcTouch", touchHandler
+ subscribe app, touchHandler
}
- def appTouch(evt) {
- log.debug "changeMode, location.mode = $location.mode, newMode = $newMode, location.modes = $location.modes"
- if (location.mode != newMode) {
- setLocationMode(newMode)
- log.debug "Changed the mode to '${newMode}'"
- } else {
- log.debug "New mode is the same as the old mode, leaving it be"
- }
- log.debug "appTouch: $evt"
- lock1.lock()
- switcheson.on()
- def delay = (waitfor != null && waitfor != "") ? waitfor * 1000 : 120000
- switchesoff.off(delay: delay)
+ private currentStatus(devices, master, attribute) {
+ log.trace "currentStatus($devices, $master, $attribute)"
+ def result = null
+ if (master) {
+ result = devices.find{it.id == master}?.currentValue(attribute)
+ }
+ else {
+ def map = [:]
+ devices.each {
+ def value = it.currentValue(attribute)
+ map[value] = (map[value] ?: 0) + 1
+ log.trace "$it.displayName: $value"
+ }
+ log.trace map
+ result = map.collect{it}.sort{it.value}[-1].key
+ }
+ log.debug "$attribute = $result"
+ result
+ }
+
+ def touchHandler(evt) {
+ log.trace "touchHandler($evt.descriptionText)"
+ if (switch1) {
+ def status = currentStatus(switch1, masterSwitch, "switch")
+ switch1.each {
+ if (status == "on") {
+ it.off()
+ }
+ else {
+ it.on()
+ }
+ }
+ }
+
+ if (lock) {
+ def status = currentStatus(lock, masterLock, "lock")
+ lock.each {
+ if (status == "locked") {
+ lock.unlock()
+ }
+ else {
+ lock.lock()
+ }
+ }
+ }
+
+ if (garageDoor) {
+ def status = currentStatus(garageDoor, masterDoor, "status")
+ garageDoor.each {
+ if (status == "open") {
+ it.close()
+ }
+ else {
+ it.open()
+ }
+ }
+ }
}
}
app1.installed()
app2.installed()
- // Generate a random variable
- Random random = new Random(1131)
- int nextRandom = 10
-
- // Touch events
- new Thread() {
- @Override
- public void run() {
- while(true) {
- appObject.setValue([name: "Touched", value: "Touched", deviceId: 0, descriptionText: "",
- displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
- Thread.sleep(random.nextInt(nextRandom));
-
- }
- }
- }.start()
-
- // Lock events
- new Thread() {
-
- @Override
- public void run() {
- while(true) {
- lockObject.setValue([name: "lock", value: "locked", deviceId: 0, descriptionText: "",
- displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
- Thread.sleep(random.nextInt(nextRandom));
- }
- }
- }.start()
-
- new Thread() {
-
- @Override
- public void run() {
- while(true) {
- lockObject.setValue([name: "unlock", value: "unlocked", deviceId: 0, descriptionText: "",
- displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
- Thread.sleep(random.nextInt(nextRandom));
- }
- }
- }.start()
-
- // Contact sensor events
- new Thread() {
-
- @Override
- public void run() {
- while(true) {
- contactObject.setValue([name: "contact.open", value: "open", deviceId: 0, descriptionText: "",
- displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
- Thread.sleep(random.nextInt(nextRandom));
-
- }
- }
- }.start()
-
- new Thread() {
-
- @Override
- public void run() {
- while(true) {
- contactObject.setValue([name: "contact.closed", value: "closed", deviceId: 0, descriptionText: "",
- displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
- Thread.sleep(random.nextInt(nextRandom));
-
- }
- }
- }.start()
+appObject.setValue([name: "nfcTouch", value: "touched", deviceId: "nfcSensorID0", descriptionText: "",
+displayed: true, linkText: "", isStateChange: false, unit: "", data: [info: "info"]])
+appObject.setValue([name: "Touched", value: "touched", deviceId: "touchedSensorID0", descriptionText: "",
+displayed: true, linkText: "", isStateChange: false, unit: "", data: [info: "info"]])
+locationObject.setValue([name: "Location", value: "away", deviceId: "locationID0", descriptionText: "",
+displayed: true, linkText: "", isStateChange: false, unit: "", data: [info: "info"]])
+locationObject.setValue([name: "Location", value: "home", deviceId: "locationID0", descriptionText: "",
+displayed: true, linkText: "", isStateChange: false, unit: "", data: [info: "info"]])
+locationObject.setValue([name: "Location", value: "night", deviceId: "locationID0", descriptionText: "",
+displayed: true, linkText: "", isStateChange: false, unit: "", data: [info: "info"]])