From 585786fef994ab730acb2e4d2956fea4644877ed Mon Sep 17 00:00:00 2001 From: Venkata Kishore Chilakala Date: Mon, 12 Jun 2017 06:55:22 -0700 Subject: [PATCH] MSA-2031: I would like to develope a service which works like IFTTT . Default event trigger will be smarthings SENSORS --- .../realapplication-ca.groovy | 317 ++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100644 smartapps/ca/realapplication-ca.src/realapplication-ca.groovy diff --git a/smartapps/ca/realapplication-ca.src/realapplication-ca.groovy b/smartapps/ca/realapplication-ca.src/realapplication-ca.groovy new file mode 100644 index 0000000..d41831c --- /dev/null +++ b/smartapps/ca/realapplication-ca.src/realapplication-ca.groovy @@ -0,0 +1,317 @@ +/** + * RealApplication_CA + * + * Copyright 2017 Venkata Kishore Chilakala + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License + * for the specific language governing permissions and limitations under the License. + * + */ +definition( + name: "RealApplication_CA", + namespace: "CA", + author: "Venkata Kishore Chilakala", + description: "myApp", + category: "SmartThings Labs", + iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png", + iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png", + iconX3Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png") + + +preferences { + section("Allow External Service to Control These Things...") + { + + input "motions", "capability.motionSensor", title: "Which Motion Sensors?", multiple: true, required: false + input "contacts", "capability.contactSensor",title: "Which Contact Sensor?", multiple: true, required: false + input "presences", "capability.presenceSensor",title: "Which Presence Sensor?", multiple: true, required: false + input "switches", "capability.switchLevel", title: "Which Switches?", multiple: true, required: false + input "levelSwitches","capability.switchLevel",title: "Which Level Switch?",multiple: true, required:false + input "relativeHumidity","capability.relativeHumidityMeasurement",title: "Humidity",multiple:true,required:false + input "temperature","capability.temperatureMeasurement",title: "Temperature Measurement",multiple:true,required:false + input "lock","capability.lock",title: "Door Lock", multiple:true,required:false + input "hubs",title: "Hubs",multiple:false,required:false + } + +} + +def installed() { + initialize() +} + +def updated() { + initialize() +} + +mappings { + +path("/devices") +{ + action:[ + GET:"listDevices" + ] +} + +path("/hubs") { + log.debug "list action" + action: [ + GET: "listAll" + ] + } + + path("/switches") { + action: [ + GET:"listSwitches", + PUT:"updateSwitches" + ] + } + path("/switches/:id") { + action: [ + GET:"showSwitch", + PUT:"updateSwitch" + ] + } + path("/levelSwitches") { + action: [ + GET:"listLevelSwitches", + PUT:"updateLevelSwitches" + ] + } + path("/levelSwitches/:id") { + action: [ + GET:"showLevelSwitch", + PUT:"updateLevelSwitch" + ] + } + path("/motions") { + + action: [ + GET:"listMotions", + PUT:"updateMotions" + ] + } + path("/motions/:id"){ + action:[ + GET:"showMotion", + PUT:"updateMotion" + ] + } + path("/presences") + { + action:[ + GET:"listPresenceSensor", + PUT:"updatePresenceSensor" + ] + } + path("/presences/:id") + { + action:[ + GET:"showPresence", + PUT:"updatePresence" + ] + } + path("/locks") { + action: [ + GET:"listLocks", + PUT:"updateLocks" + ] + } + + path("/locks/:id") { + action: [ + GET:"showLock", + PUT:"updateLock" + ] + } + path("/contacts") + { + action: [ + GET: "listContacts", + PUP: "updateContacts" + ] + } + path ("/contacts/:id") + { + action:[ + GET:"showContact", + PUT:"updateContact" + ] + } + } + + def listAll() + { + [location_id :location.id,hub_id:location.hubs*.id,hub_type:location.hubs*.type,hub_name:location.hubs*.name,hub_firm_ver:location.hubs*.firmwareVersionString,hub_ip:location.hubs*.localIP,hub_port:location.hubs*.localSrvPortTCP] + + } + + + +def listSwitches() { + switches.collect { device(it,"switch") } +} +void updateSwitches() { + updateAll(switches) +} +def showSwitch() { + show(switches, "switch") +} +void updateSwitch() { + update(switches) +} +def listLevelSwitches() { + + levelSwitches.collect { device(it,"level") } + // motions.collect { device(it,"motion") } +} +void updateLevelSwitches() { + updateAll(levelSwitches) +} +def showLevelSwitch() { + show(levelSwitches, "level") +} +void updateLevelSwitch() { + update(levelSwitches) +} + +def listLocks() { + lock.collect { device(it,"lock") } +} +void updateLocks() { + updateAll(lock) +} +def showLock() { + show(lock, "lock") +} +void updateLock() { + update(lock) +} + +def listMotions() { + motions.collect { device(it,"motion") } +} +void updateMotions() +{ + updateAll(motions) +} +def showMotion() +{ + show(motions, "motion") +} +void updateMotion() +{ + update(motions) +} + +def listPresenceSensor() +{ + presences.collect{device(it,"presence")} +} +void updatePresenceSensor() +{ + updateAll(presences) +} +def showPresence() +{ + show(presences,"presence") +} +void updatePresence() +{ + update(presences) +} + +def listContacts(){ + + contacts.collect{device(it,"contact")} +} +void updateContacts() +{ + updateAll(contacts) +} +def showContact() +{ + show(contacts,"contact") +} +void updateContact() +{ + update(contacts) +} + + + +private device(it, name) { + if (it) { + def s = it.currentState(name) + [ + id: it.id, + name: it.displayName, + label: it.displayName, + hub_name: it.hub.name, + hub_id: it.hub.id, + hub_ip: it.hub.localIP, + hub_port: it.hub.localSrvPortTCP, + state: s +] + } +} +private void updateAll(devices) { + def command = request.JSON?.command + if (command) { + devices."$command"() + } +} +private show(devices, name) { + def device = devices.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } + else { + log.debug " state s :: ${s}" + log.debug "devices :: ${devices}" + log.debug "name :: ${name}" + def s = device.currentState(name) + [id: device.id, label: device.displayName, name: device.displayName,state:s] + } +} +private void update(devices) { + log.debug "update, request: ${request.JSON}, params: ${params}, devices: $devices.id" + def command = request.JSON?.command + def value = request.JSON?.value + + log.debug "$value" + log.debug "$command" + + if (command) { + def device = devices.find { it.id == params.id } + if (!device) { + httpError(404, "Device not found") + } else { + + if("$command"=="on") + { + device."$command"() + }else if("$command"=="off") + { + device."$command"() + }else if("$command"=="lock") + { + device."$command"() + }else if("$command"=="unlock") + { + device."$command"() + }else + { + device.setLevel("$command") + } + } + } +} +def initialize() { + +} \ No newline at end of file