mirror of
https://github.com/mtan93/SmartThingsPublic.git
synced 2026-03-08 05:31:56 +00:00
190 lines
4.5 KiB
Groovy
190 lines
4.5 KiB
Groovy
/**
|
|
* Vinli Home Beta
|
|
*
|
|
* Copyright 2015 Daniel
|
|
*
|
|
*/
|
|
definition(
|
|
name: "Vinli Home Connect",
|
|
namespace: "com.vinli.smartthings",
|
|
author: "Daniel",
|
|
description: "Allows Vinli users to connect their car to SmartThings",
|
|
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",
|
|
oauth: true)
|
|
|
|
preferences {
|
|
section ("Allow external service to control these things...") {
|
|
input "switches", "capability.switch", multiple: true, required: true
|
|
input "locks", "capability.lock", multiple: true, required: true
|
|
}
|
|
}
|
|
|
|
mappings {
|
|
|
|
path("/devices") {
|
|
action: [
|
|
GET: "listAllDevices"
|
|
]
|
|
}
|
|
|
|
path("/switches") {
|
|
action: [
|
|
GET: "listSwitches"
|
|
]
|
|
}
|
|
path("/switches/:command") {
|
|
action: [
|
|
PUT: "updateSwitches"
|
|
]
|
|
}
|
|
path("/switches/:id/:command") {
|
|
action: [
|
|
PUT: "updateSwitch"
|
|
]
|
|
}
|
|
path("/locks/:command") {
|
|
action: [
|
|
PUT: "updateLocks"
|
|
]
|
|
}
|
|
path("/locks/:id/:command") {
|
|
action: [
|
|
PUT: "updateLock"
|
|
]
|
|
}
|
|
|
|
path("/devices/:id/:command") {
|
|
action: [
|
|
PUT: "commandDevice"
|
|
]
|
|
}
|
|
}
|
|
|
|
// returns a list of all devices
|
|
def listAllDevices() {
|
|
def resp = []
|
|
switches.each {
|
|
resp << [name: it.name, label: it.label, value: it.currentValue("switch"), type: "switch", id: it.id, hub: it.hub?.name]
|
|
}
|
|
|
|
locks.each {
|
|
resp << [name: it.name, label: it.label, value: it.currentValue("lock"), type: "lock", id: it.id, hub: it.hub?.name]
|
|
}
|
|
return resp
|
|
}
|
|
|
|
// returns a list like
|
|
// [[name: "kitchen lamp", value: "off"], [name: "bathroom", value: "on"]]
|
|
def listSwitches() {
|
|
def resp = []
|
|
switches.each {
|
|
resp << [name: it.displayName, value: it.currentValue("switch"), type: "switch", id: it.id]
|
|
}
|
|
return resp
|
|
}
|
|
|
|
void updateLocks() {
|
|
// use the built-in request object to get the command parameter
|
|
def command = params.command
|
|
|
|
if (command) {
|
|
|
|
// check that the switch supports the specified command
|
|
// If not, return an error using httpError, providing a HTTP status code.
|
|
locks.each {
|
|
if (!it.hasCommand(command)) {
|
|
httpError(501, "$command is not a valid command for all switches specified")
|
|
}
|
|
}
|
|
|
|
// all switches have the comand
|
|
// execute the command on all switches
|
|
// (note we can do this on the array - the command will be invoked on every element
|
|
locks."$command"()
|
|
}
|
|
}
|
|
|
|
void updateLock() {
|
|
def command = params.command
|
|
|
|
locks.each {
|
|
if (!it.hasCommand(command)) {
|
|
httpError(400, "$command is not a valid command for all lock specified")
|
|
}
|
|
|
|
if (it.id == params.id) {
|
|
it."$command"()
|
|
}
|
|
}
|
|
}
|
|
|
|
void updateSwitch() {
|
|
def command = params.command
|
|
|
|
switches.each {
|
|
if (!it.hasCommand(command)) {
|
|
httpError(400, "$command is not a valid command for all switches specified")
|
|
}
|
|
|
|
if (it.id == params.id) {
|
|
it."$command"()
|
|
}
|
|
}
|
|
}
|
|
|
|
void commandDevice() {
|
|
def command = params.command
|
|
def devices = []
|
|
|
|
switches.each {
|
|
devices << it
|
|
}
|
|
|
|
locks.each {
|
|
devices << it
|
|
}
|
|
|
|
devices.each {
|
|
if (it.id == params.id) {
|
|
if (!it.hasCommand(command)) {
|
|
httpError(400, "$command is not a valid command for specified device")
|
|
}
|
|
it."$command"()
|
|
}
|
|
}
|
|
}
|
|
|
|
void updateSwitches() {
|
|
// use the built-in request object to get the command parameter
|
|
def command = params.command
|
|
|
|
if (command) {
|
|
|
|
// check that the switch supports the specified command
|
|
// If not, return an error using httpError, providing a HTTP status code.
|
|
switches.each {
|
|
if (!it.hasCommand(command)) {
|
|
httpError(400, "$command is not a valid command for all switches specified")
|
|
}
|
|
}
|
|
|
|
// all switches have the comand
|
|
// execute the command on all switches
|
|
// (note we can do this on the array - the command will be invoked on every element
|
|
switches."$command"()
|
|
}
|
|
}
|
|
|
|
def installed() {
|
|
log.debug "Installed with settings: ${settings}"
|
|
}
|
|
|
|
def updated() {
|
|
log.debug "Updated with settings: ${settings}"
|
|
|
|
unsubscribe()
|
|
}
|