Compare commits

...

13 Commits

Author SHA1 Message Date
William Gabor
38ee1bd866 MSA-1716: Gideon 2017-01-18 08:01:08 -08:00
Vinay Rao
5ad20fbd2a Merge pull request #1584 from SmartThingsCommunity/staging
Rolling down staging hotfix to master
2017-01-10 16:08:36 -08:00
Duncan McKee
52357e4c50 Merge pull request #1580 from SmartThingsCommunity/DEVC-533
Add fingerprint for GE Smart Motion Sensor DEVC-533
2017-01-10 16:40:43 -05:00
Duncan McKee
f969027191 Add fingerprint for GE Smart Motion Sensor DEVC-533 2017-01-10 12:55:13 -05:00
Juan Pablo Risso
5607a3e346 DVCSMP-2309 - Wemo Exceptions (#1579) 2017-01-10 12:29:53 -05:00
Jack Chi
c028515fcd Merge pull request #1546 from skt123/dimmer_switch
[CHF-487] Health Check for Z-Wave Dimmer Switch
2016-12-29 10:29:43 -08:00
Jack Chi
751c98d123 Merge pull request #1550 from parijatdas/enerwave
[CHF-488] [CHF-489] [CHF-490] Implementation of HealthCheck for Enerwave Duplex Receptacle ZW15R, Enerwave On/Off Switch ZW15S and Leviton 15A Switch VRS15-1LZ
2016-12-29 10:27:18 -08:00
Jack Chi
5b874e8f3a Merge pull request #1545 from pchomal/dimmerswitch_generic
[CHF-477] Health Check for Z-Wave Dimmer Switch Generic
2016-12-27 11:36:51 -08:00
Parijat Das
9e10405527 Added fingerprints for the following devices:
1. Enerwave Duplex Receptacle ZW15R
2. Enerwave On/Off Switch ZW15S
3. Leviton 15A Switch VRS15-1LZ
2016-12-20 18:33:50 +05:30
sushant.k1
32ceaff54d [CHF-487]
Added Health Check Implementation for:
1. 1,000-Watt In-Wall Smart Dimmer Switch (GE 12725)
2. In-Wall Smart Fan Control (GE 12730)
2016-12-20 12:08:16 +05:30
piyush.c
5b1da30a47 [CHF-477]
Health Check implementation for Z-Wave Dimmer Switch Generic with checkinterval of 32min
2016-12-20 10:39:08 +05:30
Vinay Rao
0a82077b24 Merge pull request #1519 from SmartThingsCommunity/staging
Rolling down staging hotfix to master
2016-12-07 14:15:16 -08:00
Vinay Rao
bbad6dfa7a Merge pull request #1501 from SmartThingsCommunity/staging
Rolling down staging hotfix to master
2016-11-28 10:35:24 -08:00
8 changed files with 564 additions and 261 deletions

View File

@@ -22,9 +22,10 @@ metadata {
capability "Sensor" capability "Sensor"
capability "Health Check" capability "Health Check"
fingerprint mfr:"0063", prod:"4457", deviceJoinName: "Z-Wave Wall Dimmer" fingerprint mfr:"0063", prod:"4457", deviceJoinName: "GE In-Wall Smart Dimmer "
fingerprint mfr:"0063", prod:"4944", deviceJoinName: "Z-Wave Wall Dimmer" fingerprint mfr:"0063", prod:"4944", deviceJoinName: "GE In-Wall Smart Dimmer "
fingerprint mfr:"0063", prod:"5044", deviceJoinName: "Z-Wave Plug-In Dimmer" fingerprint mfr:"0063", prod:"5044", deviceJoinName: "GE Plug-In Smart Dimmer "
fingerprint mfr:"0063", prod:"4944", model:"3034", deviceJoinName: "GE In-Wall Smart Fan Control"
} }
simulator { simulator {

View File

@@ -86,7 +86,7 @@ def parse(String description) {
def bodyString = msg.body def bodyString = msg.body
if (bodyString) { if (bodyString) {
unschedule("setOffline") unschedule("setOffline")
def body = new XmlSlurper().parseText(bodyString) def body = new XmlSlurper().parseText(bodyString.replaceAll("[^\\x20-\\x7e]", ""))
if (body?.property?.TimeSyncRequest?.text()) { if (body?.property?.TimeSyncRequest?.text()) {
log.trace "Got TimeSyncRequest" log.trace "Got TimeSyncRequest"

View File

@@ -78,7 +78,7 @@ def parse(String description) {
def bodyString = msg.body def bodyString = msg.body
if (bodyString) { if (bodyString) {
unschedule("setOffline") unschedule("setOffline")
def body = new XmlSlurper().parseText(bodyString) def body = new XmlSlurper().parseText(bodyString.replaceAll("[^\\x20-\\x7e]", ""))
if (body?.property?.TimeSyncRequest?.text()) { if (body?.property?.TimeSyncRequest?.text()) {
log.trace "Got TimeSyncRequest" log.trace "Got TimeSyncRequest"
result << timeSyncResponse() result << timeSyncResponse()

View File

@@ -84,7 +84,7 @@ def parse(String description) {
def bodyString = msg.body def bodyString = msg.body
if (bodyString) { if (bodyString) {
unschedule("setOffline") unschedule("setOffline")
def body = new XmlSlurper().parseText(bodyString) def body = new XmlSlurper().parseText(bodyString.replaceAll("[^\\x20-\\x7e]", ""))
if (body?.property?.TimeSyncRequest?.text()) { if (body?.property?.TimeSyncRequest?.text()) {
log.trace "Got TimeSyncRequest" log.trace "Got TimeSyncRequest"
result << timeSyncResponse() result << timeSyncResponse()
@@ -208,7 +208,7 @@ def subscribe(ip, port) {
def existingIp = getDataValue("ip") def existingIp = getDataValue("ip")
def existingPort = getDataValue("port") def existingPort = getDataValue("port")
if (ip && ip != existingIp) { if (ip && ip != existingIp) {
log.debug "Updating ip from $existingIp to $ip" log.debug "Updating ip from $existingIp to $ip"
updateDataValue("ip", ip) updateDataValue("ip", ip)
def ipvalue = convertHexToIP(getDataValue("ip")) def ipvalue = convertHexToIP(getDataValue("ip"))
sendEvent(name: "currentIP", value: ipvalue, descriptionText: "IP changed to ${ipvalue}") sendEvent(name: "currentIP", value: ipvalue, descriptionText: "IP changed to ${ipvalue}")
@@ -291,4 +291,4 @@ User-Agent: CyberGarage-HTTP/1.0
</u:GetBinaryState> </u:GetBinaryState>
</s:Body> </s:Body>
</s:Envelope>""", physicalgraph.device.Protocol.LAN) </s:Envelope>""", physicalgraph.device.Protocol.LAN)
} }

View File

@@ -24,6 +24,10 @@ metadata {
fingerprint inClusters: "0x26", deviceJoinName: "Z-Wave Dimmer" fingerprint inClusters: "0x26", deviceJoinName: "Z-Wave Dimmer"
fingerprint mfr:"001D", prod:"1902", deviceJoinName: "Z-Wave Dimmer" fingerprint mfr:"001D", prod:"1902", deviceJoinName: "Z-Wave Dimmer"
fingerprint mfr:"001D", prod:"1B03", model:"0334", deviceJoinName: "Leviton Universal Dimmer" fingerprint mfr:"001D", prod:"1B03", model:"0334", deviceJoinName: "Leviton Universal Dimmer"
fingerprint mfr:"011A", prod:"0102", model:"0201", deviceJoinName: "Enerwave In-Wall Dimmer"
fingerprint mfr:"001D", prod:"1001", model:"0334", deviceJoinName: "Leviton 3-Speed Fan Controller"
fingerprint mfr:"001D", prod:"0602", model:"0334", deviceJoinName: "Leviton Magnetic Low Voltage Dimmer"
fingerprint mfr:"001D", prod:"0401", model:"0334", deviceJoinName: "Leviton 600W Incandescent Dimmer"
} }
simulator { simulator {

View File

@@ -28,6 +28,7 @@ metadata {
fingerprint mfr: "0060", prod: "0001", model: "0002", deviceJoinName: "Everspring Motion Sensor" // Everspring SP814 fingerprint mfr: "0060", prod: "0001", model: "0002", deviceJoinName: "Everspring Motion Sensor" // Everspring SP814
fingerprint mfr: "0060", prod: "0001", model: "0003", deviceJoinName: "Everspring Motion Sensor" // Everspring HSP02 fingerprint mfr: "0060", prod: "0001", model: "0003", deviceJoinName: "Everspring Motion Sensor" // Everspring HSP02
fingerprint mfr: "011A", prod: "0601", model: "0901", deviceJoinName: "Enerwave Motion Sensor" // Enerwave ZWN-BPC fingerprint mfr: "011A", prod: "0601", model: "0901", deviceJoinName: "Enerwave Motion Sensor" // Enerwave ZWN-BPC
fingerprint mfr: "0063", prod: "4953", model: "3133", deviceJoinName: "GE Smart Motion Sensor"
} }
simulator { simulator {

View File

@@ -25,6 +25,9 @@ metadata {
fingerprint mfr:"0063", prod:"4F50", model:"3031", deviceJoinName: "GE Plug-in Outdoor Switch" fingerprint mfr:"0063", prod:"4F50", model:"3031", deviceJoinName: "GE Plug-in Outdoor Switch"
fingerprint mfr:"001D", prod:"1D04", model:"0334", deviceJoinName: "Leviton Outlet" fingerprint mfr:"001D", prod:"1D04", model:"0334", deviceJoinName: "Leviton Outlet"
fingerprint mfr:"001D", prod:"1C02", model:"0334", deviceJoinName: "Leviton Switch" fingerprint mfr:"001D", prod:"1C02", model:"0334", deviceJoinName: "Leviton Switch"
fingerprint mfr:"001D", prod:"0301", model:"0334", deviceJoinName: "Leviton 15A Switch"
fingerprint mfr:"011A", prod:"0101", model:"0102", deviceJoinName: "Enerwave On/Off Switch"
fingerprint mfr:"011A", prod:"0101", model:"0603", deviceJoinName: "Enerwave Duplex Receptacle"
} }
// simulator metadata // simulator metadata

View File

@@ -1,253 +1,547 @@
/** /**
* Gideon * Gideon
* *
* Copyright 2016 Nicola Russo * Copyright 2016 Nicola Russo
* *
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * 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: * in compliance with the License. You may obtain a copy of the License at:
* *
* http://www.apache.org/licenses/LICENSE-2.0 * 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 * 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 * 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. * for the specific language governing permissions and limitations under the License.
* *
*/ */
definition( definition(
name: "Gideon", name: "Gideon",
namespace: "gideon.api", namespace: "gideon.api",
author: "Braindrain Solutions", author: "Braindrain Solutions ltd",
description: "Gideon AI Smart app allows you to connect and control all of your SmartThings devices through the Gideon AI app, making your SmartThings devices even smarter.", description: "Gideon Smart Home SmartApp allows you to connect and control all of your SmartThings devices through the Gideon app, making your SmartThings devices even smarter.",
category: "Family", category: "Family",
iconUrl: "http://s33.postimg.org/t77u7y7v3/logo.png", iconUrl: "http://s33.postimg.org/t77u7y7v3/logo.png",
iconX2Url: "http://s33.postimg.org/t77u7y7v3/logo.png", iconX2Url: "http://s33.postimg.org/t77u7y7v3/logo.png",
iconX3Url: "http://s33.postimg.org/t77u7y7v3/logo.png", iconX3Url: "http://s33.postimg.org/t77u7y7v3/logo.png",
oauth: [displayName: "Gideon AI API", displayLink: "gideon.ai"]) oauth: [displayName: "Gideon Smart Home API app", displayLink: "gideon.ai"])
preferences { preferences {
section("Control these switches...") { section("Control these contact sensors...") {
input "switches", "capability.switch", multiple:true input "contact", "capability.contactSensor", multiple:true, required:false
} }
section("Control these motion sensors...") { section("Control these switches...") {
input "motions", "capability.motionSensor", multiple:true input "switches", "capability.switch", multiple:true, required:false
} }
section("Control these presence sensors...") { section("Control these smoke alarms...") {
input "presence_sensors", "capability.presenceSensor", multiple:true input "smoke_alarms", "capability.smokeDetector", multiple:true, required:false
} }
section("Control these outlets...") { section("Control these window shades...") {
input "outlets", "capability.switch", multiple:true input "shades", "capability.windowShade", multiple:true, required:false
} }
section("Control these locks...") { section("Control these garage doors...") {
input "locks", "capability.lock", multiple:true input "garage", "capability.garageDoorControl", multiple:true, required:false
} }
section("Control these locks...") { section("Control these water sensors...") {
input "temperature_sensors", "capability.temperatureMeasurement" input "water_sensors", "capability.waterSensor", multiple:true, required:false
} }
} section("Control these motion sensors...") {
input "motions", "capability.motionSensor", multiple:true, required:false
def installed() { }
log.debug "Installed with settings: ${settings}" section("Control these presence sensors...") {
input "presence_sensors", "capability.presenceSensor", multiple:true, required:false
initialize() }
} /** section("Control these outlets...") {
input "outlets", "capability.switch", multiple:true, required:false
def updated() { }
log.debug "Updated with settings: ${settings}" */
section("Control these power meters...") {
unsubscribe() input "meters", "capability.powerMeter", multiple:true, required:false
initialize() }
} section("Control these locks...") {
input "locks", "capability.lock", multiple:true, required:false
def initialize() { }
// TODO: subscribe to attributes, devices, locations, etc. section("Control these temperature sensors...") {
subscribe(outlet, "energy", outletHandler) input "temperature_sensors", "capability.temperatureMeasurement", multiple:true, required:false
subscribe(outlet, "switch", outletHandler) }
} section("Control these batteries...") {
input "batteries", "capability.battery", multiple:true, required:false
// TODO: implement event handlers }
def outletHandler(evt) { }
log.debug "$outlet.currentEnergy"
//TODO call G API def installed() {
} log.debug "Installed with settings: ${settings}"
initialize()
private device(it, type) { }
it ? [id: it.id, label: it.label, type: type] : null
} def updated() {
log.debug "Updated with settings: ${settings}"
//API Mapping
mappings { unsubscribe()
path("/getalldevices") { initialize()
action: [ }
GET: "getAllDevices"
] def initialize() {
} }
path("/doorlocks/:id/:command") {
action: [ private device(it, type) {
GET: "updateDoorLock" it ? [id: it.id, label: it.label, type: type] : null
] }
}
path("/doorlocks/:id") { //API Mapping
action: [ mappings {
GET: "getDoorLockStatus" path("/getalldevices") {
] action: [
} GET: "getAllDevices"
path("/tempsensors/:id") { ]
action: [ }
GET: "getTempSensorsStatus" path("/doorlocks/lock/:id") {
] action: [
} GET: "lockDoorLock"
path("/presences/:id") { ]
action: [ }
GET: "getPresenceStatus" path("/doorlocks/unlock/:id") {
] action: [
} GET: "unlockDoorLock"
path("/motions/:id") { ]
action: [ }
GET: "getMotionStatus" path("/doorlocks/:id") {
] action: [
} GET: "getDoorLockStatus"
path("/outlets/:id") { ]
action: [ }
GET: "getOutletStatus" path("/contacts/:id") {
] action: [
} GET: "getContactStatus"
path("/outlets/:id/:command") { ]
action: [ }
GET: "updateOutlet" path("/smoke/:id") {
] action: [
} GET: "getSmokeStatus"
path("/switches/:command") { ]
action: [ }
PUT: "updateSwitch" path("/shades/open/:id") {
] action: [
} GET: "openShade"
} ]
}
//API Methods path("/shades/preset/:id") {
def getAllDevices() { action: [
def locks_list = locks.collect{device(it,"Lock")} GET: "presetShade"
def presences_list = presence_sensors.collect{device(it,"Presence")} ]
def motions_list = motions.collect{device(it,"Motion")} }
def outlets_list = outlets.collect{device(it,"Outlet")} path("/shades/close/:id") {
def switches_list = switches.collect{device(it,"Switch")} action: [
def temp_list = temperature_sensors.collect{device(it,"Temperature")} GET: "closeShade"
return [Locks: locks_list, Presences: presences_list, Motions: motions_list, Outlets: outlets_list, Switches: switches_list, Temperatures: temp_list] ]
} }
path("/shades/:id") {
//LOCKS action: [
def getDoorLockStatus() { GET: "getShadeStatus"
def device = locks.find { it.id == params.id } ]
if (!device) { }
httpError(404, "Device not found") path("/garage/open/:id") {
} else { action: [
return [Device_state: device.currentValue('lock')] GET: "openGarage"
} ]
} }
path("/garage/close/:id") {
def updateDoorLock() { action: [
def command = params.command GET: "closeGarage"
def device = locks.find { it.id == params.id } ]
if (command){ }
if (!device) { path("/garage/:id") {
httpError(404, "Device not found") action: [
} else { GET: "getGarageStatus"
if(command == "toggle") ]
{ }
if(device.currentValue('lock') == "locked") path("/watersensors/:id") {
device.unlock(); action: [
else GET: "getWaterSensorStatus"
device.lock(); ]
}
return [Device_id: params.id, result_action: "200"] path("/tempsensors/:id") {
} action: [
} GET: "getTempSensorsStatus"
} ]
} }
path("/meters/:id") {
//PRESENCE action: [
def getPresenceStatus() { GET: "getMeterStatus"
]
def device = presence_sensors.find { it.id == params.id } }
if (!device) { path("/batteries/:id") {
httpError(404, "Device not found") action: [
} else { GET: "getBatteryStatus"
return [Device_state: device.currentValue('presence')] ]
} }
} path("/presences/:id") {
action: [
//MOTION GET: "getPresenceStatus"
def getMotionStatus() { ]
}
def device = motions.find { it.id == params.id } path("/motions/:id") {
if (!device) { action: [
httpError(404, "Device not found") GET: "getMotionStatus"
} else { ]
return [Device_state: device.currentValue('motion')] }
} /** path("/outlets/:id") {
} action: [
GET: "getOutletStatus"
//OUTLET ]
def getOutletStatus() { }
path("/outlets/turnon/:id") {
def device = outlets.find { it.id == params.id } action: [
if (!device) { GET: "turnOnOutlet"
httpError(404, "Device not found") ]
} else { }
return [Device_state: device.currentSwitch, Current_watt: device.currentValue("energy")] path("/outlets/turnoff/:id") {
} action: [
} GET: "turnOffOutlet"
]
def updateOutlet() { }
*/
def command = params.command path("/switches/turnon/:id") {
def device = outlets.find { it.id == params.id } action: [
if (command){ GET: "turnOnSwitch"
if (!device) { ]
httpError(404, "Device not found") }
} else { path("/switches/turnoff/:id") {
if(command == "toggle") action: [
{ GET: "turnOffSwitch"
if(device.currentSwitch == "on") ]
device.off(); }
else path("/switches/:id") {
device.on(); action: [
GET: "getSwitchStatus"
return [Device_id: params.id, result_action: "200"] ]
} }
} }
}
} //API Methods
def getAllDevices() {
//SWITCH def locks_list = locks.collect{device(it,"Lock")}
def updateSwitch() { def contact_list = contact.collect{device(it,"Contact Sensor")}
def command = params.command def smokes_list = smoke_alarms.collect{device(it,"Smoke Alarm")}
def device = switches.find { it.id == params.id } def shades_list = shades.collect{device(it,"Window Shade")}
if (command){ def garage_list = garage.collect{device(it,"Garage Door")}
if (!device) { def water_sensors_list = water_sensors.collect{device(it,"Water Sensor")}
httpError(404, "Device not found") def presences_list = presence_sensors.collect{device(it,"Presence")}
} else { def motions_list = motions.collect{device(it,"Motion")}
if(command == "toggle") /** def outlets_list = outlets.collect{device(it,"Outlet")} */
{ def switches_list = switches.collect{device(it,"Switch")}
if(device.currentSwitch == "on") def temp_list = temperature_sensors.collect{device(it,"Temperature")}
device.off(); def meters_list = meters.collect{device(it,"Power Meters")}
else def battery_list = batteries.collect{device(it,"Batteries")}
device.on(); return smokes_list + contact_list + water_sensors_list + shades_list + garage_list + locks_list + presences_list + motions_list + switches_list + temp_list + meters_list + battery_list
}
return [Device_id: params.id, result_action: "200"]
} //contact sensors
} def getContactStatus() {
} def device = contact.find { it.id == params.id }
} if (!device) {
httpError(404, "Device not found")
//TEMPERATURE } else {
def getTempSensorsStatus() { def args = getTempSensorsStatus(device.id)
return [Device_state: device.currentValue('contact')] + args
def device = temperature_sensors.find { it.id == params.id } }
if (!device) { }
httpError(404, "Device not found")
} else { //smoke detectors
return [Device_state: device.currentValue('temperature')] def getSmokeStatus() {
} def device = smoke_alarms.find { it.id == params.id }
} if (!device) {
httpError(404, "Device not found")
} else {
def bat = getBatteryStatus(device.id)
return [Device_state: device.currentValue('smoke')] + bat
}
}
//garage
def getGarageStatus() {
def device = garage.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
return [Device_state: device.currentValue('door')]
}
}
def openGarage() {
def device = garage.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
device.open();
return [Device_id: params.id, result_action: "200"]
}
}
def closeGarage() {
def device = garage.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
device.close();
return [Device_id: params.id, result_action: "200"]
}
}
//shades
def getShadeStatus() {
def device = shades.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
return [Device_state: device.currentValue('windowShade')]
}
}
def openShade() {
def device = shades.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
device.open();
return [Device_id: params.id, result_action: "200"]
}
}
def presetShade() {
def device = shades.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
device.presetPosition();
return [Device_id: params.id, result_action: "200"]
}
}
def closeShade() {
def device = shades.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
device.close();
return [Device_id: params.id, result_action: "200"]
}
}
//water sensor
def getWaterSensorStatus() {
def device = water_sensors.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
def bat = getBatteryStatus(device.id)
return [Device_state: device.currentValue('water')] + bat
}
}
//batteries
def getBatteryStatus() {
def device = batteries.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
return [Device_state: device.latestValue("battery")]
}
}
def getBatteryStatus(id) {
def device = batteries.find { it.id == id }
if (!device) {
return []
} else {
return [battery_state: device.latestValue("battery")]
}
}
//LOCKS
def getDoorLockStatus() {
def device = locks.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
def bat = getBatteryStatus(device.id)
return [Device_state: device.currentValue('lock')] + bat
}
}
def lockDoorLock() {
def device = locks.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
device.lock();
return [Device_id: params.id, result_action: "200"]
}
}
def unlockDoorLock() {
def device = locks.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
device.unlock();
return [Device_id: params.id, result_action: "200"]
}
}
//PRESENCE
def getPresenceStatus() {
def device = presence_sensors.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
def bat = getBatteryStatus(device.id)
return [Device_state: device.currentValue('presence')] + bat
}
}
//MOTION
def getMotionStatus() {
def device = motions.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
def args = getTempSensorsStatus(device.id)
return [Device_state: device.currentValue('motion')] + args
}
}
//OUTLET
/**
def getOutletStatus() {
def device = outlets.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
def watt = getMeterStatus(device.id)
return [Device_state: device.currentSwitch] + watt
}
}
*/
def getMeterStatus() {
def device = meters.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
return [Device_id: device.id, Device_type: device.type, Current_watt: device.currentValue("power")]
}
}
def getMeterStatus(id) {
def device = meters.find { it.id == id }
if (!device) {
return []
} else {
return [Current_watt: device.currentValue("power")]
}
}
/**
def turnOnOutlet() {
def device = outlets.find { it.id == params.id }
if (command){
if (!device) {
httpError(404, "Device not found")
} else {
device.on();
return [Device_id: params.id, result_action: "200"]
}
}
}
def turnOffOutlet() {
def device = outlets.find { it.id == params.id }
if (command){
if (!device) {
httpError(404, "Device not found")
} else {
device.off();
return [Device_id: params.id, result_action: "200"]
}
}
}
*/
//SWITCH
def getSwitchStatus() {
def device = switches.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
return [Device_state: device.currentValue('switch')]
}
}
def turnOnSwitch() {
def device = switches.find { it.id == params.id }
if (command){
if (!device) {
httpError(404, "Device not found")
} else {
device.on();
return [Device_id: params.id, result_action: "200"]
}
}
}
def turnOffSwitch() {
def device = switches.find { it.id == params.id }
if (command){
if (!device) {
httpError(404, "Device not found")
} else {
device.on();
return [Device_id: params.id, result_action: "200"]
}
}
}
//TEMPERATURE
def getTempSensorsStatus() {
def device = temperature_sensors.find { it.id == params.id }
if (!device) {
httpError(404, "Device not found")
} else {
def bat = getBatteryStatus(device.id)
return [Device_state: device.currentValue('temperature')] + bat
}
}
def getTempSensorsStatus(id) {
def device = temperature_sensors.find { it.id == id }
if (!device) {
return []
} else {
def bat = getBatteryStatus(device.id)
return [temperature: device.currentValue('temperature')] + bat
}
}