mirror of
https://github.com/mtan93/SmartThingsPublic.git
synced 2026-03-22 21:03:51 +00:00
Compare commits
18 Commits
MSA-1252-3
...
MSA-1278-2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
19d44589db | ||
|
|
56eef9cf22 | ||
|
|
a5da182bf4 | ||
|
|
32f8d2d944 | ||
|
|
e1de599668 | ||
|
|
0e01cbed06 | ||
|
|
bf476940e9 | ||
|
|
a219f37035 | ||
|
|
8821c68e9c | ||
|
|
27c05f4e5b | ||
|
|
7571c1b980 | ||
|
|
bb65c4ce14 | ||
|
|
69ae9973da | ||
|
|
36c0af82fe | ||
|
|
eba1f16ee1 | ||
|
|
f397691fdb | ||
|
|
9a5be2c5db | ||
|
|
d9f224fa6e |
@@ -94,11 +94,11 @@ def parse(String description) {
|
|||||||
def cmd = zwave.parse(description, [0x31: 1, 0x32: 1, 0x60: 3])
|
def cmd = zwave.parse(description, [0x31: 1, 0x32: 1, 0x60: 3])
|
||||||
if (cmd) {
|
if (cmd) {
|
||||||
result = createEvent(zwaveEvent(cmd))
|
result = createEvent(zwaveEvent(cmd))
|
||||||
|
log.debug "Parse returned ${result?.descriptionText}"
|
||||||
|
storeGraphData(result.name, result.value)
|
||||||
|
} else {
|
||||||
|
log.debug "zwave.parse returned null command. Cannot create event"
|
||||||
}
|
}
|
||||||
log.debug "Parse returned ${result?.descriptionText}"
|
|
||||||
|
|
||||||
storeGraphData(result.name, result.value)
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,16 +12,6 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose: Arrival Sensor HA DTH File
|
|
||||||
*
|
|
||||||
* Filename: Arrival-Sensor-HA.src/Arrival-Sensor-HA.groovy
|
|
||||||
*
|
|
||||||
* Change History:
|
|
||||||
* 1. 20160115 TW - Update/Edit to support i18n translations
|
|
||||||
* 2. 20160121 TW - Update to V4 battery calcs, added pref's page title translations
|
|
||||||
*/
|
|
||||||
|
|
||||||
metadata {
|
metadata {
|
||||||
definition (name: "Arrival Sensor HA", namespace: "smartthings", author: "SmartThings") {
|
definition (name: "Arrival Sensor HA", namespace: "smartthings", author: "SmartThings") {
|
||||||
capability "Tone"
|
capability "Tone"
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#==============================================================================
|
|
||||||
# Copyright 2016 SmartThings
|
# Copyright 2016 SmartThings
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -12,15 +11,6 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#==============================================================================
|
|
||||||
# Purpose: Arrival Sensor HA i18n Translation File
|
|
||||||
#
|
|
||||||
# Filename: Arrival-Sensor-HA.src/i18n/messages.properties
|
|
||||||
#
|
|
||||||
# Change History:
|
|
||||||
# 1. 20160115 TW Initial release with informal Korean translation.
|
|
||||||
# 2. 20160121 TW Added def preference section titles.
|
|
||||||
#==============================================================================
|
|
||||||
# Korean (ko)
|
# Korean (ko)
|
||||||
# Device Preferences
|
# Device Preferences
|
||||||
'''Give your device a name'''.ko=기기 이름 설정
|
'''Give your device a name'''.ko=기기 이름 설정
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* GE Link Bulb
|
* GE Link Bulb
|
||||||
*
|
*
|
||||||
* Copyright 2014 SmartThings
|
* Copyright 2016 SmartThings
|
||||||
*
|
*
|
||||||
* 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:
|
||||||
@@ -53,6 +53,8 @@ metadata {
|
|||||||
capability "Polling"
|
capability "Polling"
|
||||||
|
|
||||||
fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0008,1000", outClusters: "0019", manufacturer: "GE_Appliances", model: "ZLL Light", deviceJoinName: "GE Link Bulb"
|
fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0008,1000", outClusters: "0019", manufacturer: "GE_Appliances", model: "ZLL Light", deviceJoinName: "GE Link Bulb"
|
||||||
|
fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0008,1000", outClusters: "0019", manufacturer: "GE", model: "SoftWhite", deviceJoinName: "GE Link Soft White Bulb"
|
||||||
|
fingerprint profileId: "0104", inClusters: "0000,0003,0004,0005,0006,0008,1000", outClusters: "0019", manufacturer: "GE", model: "Daylight", deviceJoinName: "GE Link Daylight Bulb"
|
||||||
}
|
}
|
||||||
|
|
||||||
// UI tile definitions
|
// UI tile definitions
|
||||||
|
|||||||
@@ -37,9 +37,6 @@ metadata {
|
|||||||
tileAttribute ("device.level", key: "SLIDER_CONTROL") {
|
tileAttribute ("device.level", key: "SLIDER_CONTROL") {
|
||||||
attributeState "level", action:"switch level.setLevel", range:"(0..100)"
|
attributeState "level", action:"switch level.setLevel", range:"(0..100)"
|
||||||
}
|
}
|
||||||
tileAttribute ("device.level", key: "SECONDARY_CONTROL") {
|
|
||||||
attributeState "level", label: 'Level ${currentValue}%'
|
|
||||||
}
|
|
||||||
tileAttribute ("device.color", key: "COLOR_CONTROL") {
|
tileAttribute ("device.color", key: "COLOR_CONTROL") {
|
||||||
attributeState "color", action:"setAdjustedColor"
|
attributeState "color", action:"setAdjustedColor"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,9 +38,6 @@ metadata {
|
|||||||
tileAttribute ("device.level", key: "SLIDER_CONTROL") {
|
tileAttribute ("device.level", key: "SLIDER_CONTROL") {
|
||||||
attributeState "level", action:"switch level.setLevel", range:"(0..100)"
|
attributeState "level", action:"switch level.setLevel", range:"(0..100)"
|
||||||
}
|
}
|
||||||
tileAttribute ("device.level", key: "SECONDARY_CONTROL") {
|
|
||||||
attributeState "level", label: 'Level ${currentValue}%'
|
|
||||||
}
|
|
||||||
tileAttribute ("device.color", key: "COLOR_CONTROL") {
|
tileAttribute ("device.color", key: "COLOR_CONTROL") {
|
||||||
attributeState "color", action:"setAdjustedColor"
|
attributeState "color", action:"setAdjustedColor"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,9 +33,6 @@ metadata {
|
|||||||
tileAttribute ("device.level", key: "SLIDER_CONTROL") {
|
tileAttribute ("device.level", key: "SLIDER_CONTROL") {
|
||||||
attributeState "level", action:"switch level.setLevel", range:"(0..100)"
|
attributeState "level", action:"switch level.setLevel", range:"(0..100)"
|
||||||
}
|
}
|
||||||
tileAttribute ("device.level", key: "SECONDARY_CONTROL") {
|
|
||||||
attributeState "level", label: 'Level ${currentValue}%'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
controlTile("levelSliderControl", "device.level", "slider", height: 1, width: 2, inactiveLabel: false, range:"(0..100)") {
|
controlTile("levelSliderControl", "device.level", "slider", height: 1, width: 2, inactiveLabel: false, range:"(0..100)") {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#==============================================================================
|
|
||||||
# Copyright 2016 SmartThings
|
# Copyright 2016 SmartThings
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -12,15 +11,6 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#==============================================================================
|
|
||||||
# Purpose: Mobile Presence i18n Translation File
|
|
||||||
#
|
|
||||||
# Filename: mobile-presence.src/i18n/messages.properties
|
|
||||||
#
|
|
||||||
# Change History:
|
|
||||||
# 1. 20160205 TW Initial release with informal Korean translation.
|
|
||||||
# 2. 20160224 TW Updated with formal Korean translation.
|
|
||||||
#==============================================================================
|
|
||||||
# Korean (ko)
|
# Korean (ko)
|
||||||
# Device Preferences
|
# Device Preferences
|
||||||
'''Give your device a name'''.ko=기기 이름 설정
|
'''Give your device a name'''.ko=기기 이름 설정
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
===============================================================================
|
|
||||||
* Copyright 2016 SmartThings
|
* Copyright 2016 SmartThings
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -13,14 +12,6 @@
|
|||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
* License for the specific language governing permissions and limitations
|
* License for the specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
===============================================================================
|
|
||||||
* Purpose: Mobile Presence DTH File
|
|
||||||
*
|
|
||||||
* Filename: mobile-presence.src/mobile-presence.groovy
|
|
||||||
*
|
|
||||||
* Change History:
|
|
||||||
* 1. 20160205 TW - Update/Edit to support i18n translations
|
|
||||||
===============================================================================
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
metadata {
|
metadata {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#==============================================================================
|
|
||||||
# Copyright 2016 SmartThings
|
# Copyright 2016 SmartThings
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -12,14 +11,6 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#==============================================================================
|
|
||||||
# Purpose: SmartPower Outlet i18n Translation File
|
|
||||||
#
|
|
||||||
# Filename: SmartPower-Outlet.src/i18n/messages.properties
|
|
||||||
#
|
|
||||||
# Change History:
|
|
||||||
# 1. 20160116 TW Initial release with informal Korean translation.
|
|
||||||
#==============================================================================
|
|
||||||
# Korean (ko)
|
# Korean (ko)
|
||||||
# Device Preferences
|
# Device Preferences
|
||||||
'''Give your device a name'''.ko=기기 이름 설정
|
'''Give your device a name'''.ko=기기 이름 설정
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
===============================================================================
|
|
||||||
* Copyright 2016 SmartThings
|
* Copyright 2016 SmartThings
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -13,15 +12,8 @@
|
|||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
* License for the specific language governing permissions and limitations
|
* License for the specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
===============================================================================
|
|
||||||
* Purpose: SmartPower Outlet DTH File
|
|
||||||
*
|
|
||||||
* Filename: SmartPower-Outlet.src/SmartPower-Outlet.groovy
|
|
||||||
*
|
|
||||||
* Change History:
|
|
||||||
* 1. 20160117 TW - Update/Edit to support i18n translations
|
|
||||||
===============================================================================
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
metadata {
|
metadata {
|
||||||
// Automatically generated. Make future change here.
|
// Automatically generated. Make future change here.
|
||||||
definition (name: "SmartPower Outlet", namespace: "smartthings", author: "SmartThings") {
|
definition (name: "SmartPower Outlet", namespace: "smartthings", author: "SmartThings") {
|
||||||
@@ -137,6 +129,7 @@ def refresh() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def configure() {
|
def configure() {
|
||||||
|
sendEvent(name: "checkInterval", value: 1200, displayed: false)
|
||||||
zigbee.onOffConfig() + powerConfig() + refresh()
|
zigbee.onOffConfig() + powerConfig() + refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#==============================================================================
|
|
||||||
# Copyright 2016 SmartThings
|
# Copyright 2016 SmartThings
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -12,14 +11,6 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#==============================================================================
|
|
||||||
# Purpose: SmartSense Moisture Sensor i18n Translation File
|
|
||||||
#
|
|
||||||
# Filename: SmartSense-Moisture-Sensor.src/i18n/messages.properties
|
|
||||||
#
|
|
||||||
# Change History:
|
|
||||||
# 1. 20160116 TW Initial release with formal Korean translation.
|
|
||||||
#==============================================================================
|
|
||||||
# Korean (ko)
|
# Korean (ko)
|
||||||
# Device Preferences
|
# Device Preferences
|
||||||
'''Dry'''.ko=건조
|
'''Dry'''.ko=건조
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
===============================================================================
|
|
||||||
* Copyright 2016 SmartThings
|
* Copyright 2016 SmartThings
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -13,15 +12,6 @@
|
|||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
* License for the specific language governing permissions and limitations
|
* License for the specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
===============================================================================
|
|
||||||
* Purpose: SmartSense Moisture Sensor DTH File
|
|
||||||
*
|
|
||||||
* Filename: SmartSense-Moisture-Sensor.src/SmartSense-Moisture-Sensor.groovy
|
|
||||||
*
|
|
||||||
* Change History:
|
|
||||||
* 1. 20160116 TW - Update/Edit to support i18n translations
|
|
||||||
* 2. 20160125 TW = Incorporated new battery mapping from TM
|
|
||||||
===============================================================================
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
metadata {
|
metadata {
|
||||||
@@ -321,6 +311,8 @@ def refresh() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def configure() {
|
def configure() {
|
||||||
|
sendEvent(name: "checkInterval", value: 7200, displayed: false)
|
||||||
|
|
||||||
String zigbeeEui = swapEndianHex(device.hub.zigbeeEui)
|
String zigbeeEui = swapEndianHex(device.hub.zigbeeEui)
|
||||||
log.debug "Configuring Reporting, IAS CIE, and Bindings."
|
log.debug "Configuring Reporting, IAS CIE, and Bindings."
|
||||||
def configCmds = [
|
def configCmds = [
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#==============================================================================
|
|
||||||
# Copyright 2016 SmartThings
|
# Copyright 2016 SmartThings
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -12,15 +11,6 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#==============================================================================
|
|
||||||
# Purpose: SmartSense Motion Sensor i18n Translation File
|
|
||||||
#
|
|
||||||
# Filename: SmartSense-Motion-Sensor.src/i18n/messages.properties
|
|
||||||
#
|
|
||||||
# Change History:
|
|
||||||
# 1. 20160116 TW Initial release with formal Korean translation.
|
|
||||||
# 2. 20160224 TW Updated formal Korean translations from Mike Stoller.
|
|
||||||
#==============================================================================
|
|
||||||
# Korean (ko)
|
# Korean (ko)
|
||||||
# Device Preferences
|
# Device Preferences
|
||||||
'''battery'''.ko=배터리
|
'''battery'''.ko=배터리
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
===============================================================================
|
|
||||||
* Copyright 2016 SmartThings
|
* Copyright 2016 SmartThings
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -13,15 +12,6 @@
|
|||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
* License for the specific language governing permissions and limitations
|
* License for the specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
===============================================================================
|
|
||||||
* Purpose: SmartSense Motion Sensor DTH File
|
|
||||||
*
|
|
||||||
* Filename: SmartSense-Motion-Sensor.src/SmartSense-Motion-Sensor.groovy
|
|
||||||
*
|
|
||||||
* Change History:
|
|
||||||
* 1. 20160116 TW - Update/Edit to support i18n translations
|
|
||||||
* 2. 20160125 TW = Incorporated new battery mapping from TM
|
|
||||||
===============================================================================
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
metadata {
|
metadata {
|
||||||
@@ -333,6 +323,8 @@ def refresh() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def configure() {
|
def configure() {
|
||||||
|
sendEvent(name: "checkInterval", value: 7200, displayed: false)
|
||||||
|
|
||||||
String zigbeeEui = swapEndianHex(device.hub.zigbeeEui)
|
String zigbeeEui = swapEndianHex(device.hub.zigbeeEui)
|
||||||
log.debug "Configuring Reporting, IAS CIE, and Bindings."
|
log.debug "Configuring Reporting, IAS CIE, and Bindings."
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#==============================================================================
|
|
||||||
# Copyright 2016 SmartThings
|
# Copyright 2016 SmartThings
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -12,14 +11,6 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
#==============================================================================
|
|
||||||
# Purpose: SmartSense Multi Sensor i18n Translation File
|
|
||||||
#
|
|
||||||
# Filename: SmartSense-Multi-Sensor.src/i18n/messages.properties
|
|
||||||
#
|
|
||||||
# Change History:
|
|
||||||
# 1. 20160117 TW Initial release with informal Korean translation.
|
|
||||||
#==============================================================================
|
|
||||||
# Korean (ko)
|
# Korean (ko)
|
||||||
# Device Preferences
|
# Device Preferences
|
||||||
'''Yes'''.ko=예
|
'''Yes'''.ko=예
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
===============================================================================
|
|
||||||
* Copyright 2016 SmartThings
|
* Copyright 2016 SmartThings
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
@@ -13,15 +12,6 @@
|
|||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
* License for the specific language governing permissions and limitations
|
* License for the specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
===============================================================================
|
|
||||||
* Purpose: SmartSense Multi Sensor DTH File
|
|
||||||
*
|
|
||||||
* Filename: SmartSense-Multi-Sensor.src/SmartSense-Multi-Sensor.groovy
|
|
||||||
*
|
|
||||||
* Change History:
|
|
||||||
* 1. 20160117 TW - Update/Edit to support i18n translations
|
|
||||||
* 2. 20160125 TW = Incorporated new battery mapping from TM
|
|
||||||
===============================================================================
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
metadata {
|
metadata {
|
||||||
@@ -451,6 +441,8 @@ def refresh() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def configure() {
|
def configure() {
|
||||||
|
sendEvent(name: "checkInterval", value: 7200, displayed: false)
|
||||||
|
|
||||||
String zigbeeEui = swapEndianHex(device.hub.zigbeeEui)
|
String zigbeeEui = swapEndianHex(device.hub.zigbeeEui)
|
||||||
log.debug "Configuring Reporting"
|
log.debug "Configuring Reporting"
|
||||||
|
|
||||||
|
|||||||
@@ -300,6 +300,7 @@ def getTemperature(value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def configure() {
|
def configure() {
|
||||||
|
sendEvent(name: "checkInterval", value: 7200, displayed: false)
|
||||||
|
|
||||||
String zigbeeEui = swapEndianHex(device.hub.zigbeeEui)
|
String zigbeeEui = swapEndianHex(device.hub.zigbeeEui)
|
||||||
log.debug "Configuring Reporting, IAS CIE, and Bindings."
|
log.debug "Configuring Reporting, IAS CIE, and Bindings."
|
||||||
|
|||||||
@@ -252,6 +252,7 @@ def refresh()
|
|||||||
}
|
}
|
||||||
|
|
||||||
def configure() {
|
def configure() {
|
||||||
|
sendEvent(name: "checkInterval", value: 7200, displayed: false)
|
||||||
|
|
||||||
log.debug "Configuring Reporting and Bindings."
|
log.debug "Configuring Reporting and Bindings."
|
||||||
def configCmds = [
|
def configCmds = [
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ def installed() {
|
|||||||
sendEvent(name: "multilineText", value: "Line 1 YES\nLine 2 YES\nLine 3 NO")
|
sendEvent(name: "multilineText", value: "Line 1 YES\nLine 2 YES\nLine 3 NO")
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse() {
|
def parse(String description) {
|
||||||
// This is a simulated device. No incoming data to parse.
|
// This is a simulated device. No incoming data to parse.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
345
smartapps/prempoint-com/prempoint.src/prempoint.groovy
Normal file
345
smartapps/prempoint-com/prempoint.src/prempoint.groovy
Normal file
@@ -0,0 +1,345 @@
|
|||||||
|
/**
|
||||||
|
* SmartThings service for Prempoint
|
||||||
|
*
|
||||||
|
* Author: Prempoint Inc. (c) 2016
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
definition(
|
||||||
|
name: "Prempoint",
|
||||||
|
namespace: "prempoint.com",
|
||||||
|
author: "Prempoint Inc.",
|
||||||
|
description: "SmartThings service for Prempoint",
|
||||||
|
category: "Connections",
|
||||||
|
iconUrl: "http://www.prempoint.com/images/social_app_emblem_50x50.png",
|
||||||
|
iconX2Url: "http://www.prempoint.com/images/social_app_emblem_100x100.png",
|
||||||
|
iconX3Url: "http://www.prempoint.com/images/social_app_emblem_150x150.png",
|
||||||
|
oauth: [displayName: "Prempoint", displayLink: "http://www.prempoint.com/"])
|
||||||
|
|
||||||
|
preferences {
|
||||||
|
section("Allow Prempoint to Control & Access These Things...") {
|
||||||
|
input "switches", "capability.switch", title: "Which Switches?", multiple: true, required: false
|
||||||
|
input "locks", "capability.lock", title: "Which Locks?", multiple: true, required: false
|
||||||
|
input "garagedoors", "capability.garageDoorControl", title: "Which Garage Doors?", multiple: true, required: false
|
||||||
|
//input "doors", "capability.doorControl", title: "Which Doors?", multiple: true, required: false
|
||||||
|
input "cameras", "capability.imageCapture", title: "Which Cameras?", multiple: true, required: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mappings {
|
||||||
|
path("/list") {
|
||||||
|
action: [
|
||||||
|
GET: "listDevices"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/switches") {
|
||||||
|
action: [
|
||||||
|
GET: "listSwitches"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/switches/:id") {
|
||||||
|
action: [
|
||||||
|
GET: "showSwitch"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/switches/:id/:command") {
|
||||||
|
action: [
|
||||||
|
GET: "updateSwitch"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/switches/:id/:command/:level") {
|
||||||
|
action: [
|
||||||
|
GET: "updateSwitch"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/locks") {
|
||||||
|
action: [
|
||||||
|
GET: "listLocks"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/locks/:id") {
|
||||||
|
action: [
|
||||||
|
GET: "showLock"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/locks/:id/:command") {
|
||||||
|
action: [
|
||||||
|
GET: "updateLock"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/doors/:id") {
|
||||||
|
action: [
|
||||||
|
GET: "showDoor"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/doors/:id/:command") {
|
||||||
|
action: [
|
||||||
|
GET: "updateDoor"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/garagedoors/:id") {
|
||||||
|
action: [
|
||||||
|
GET: "showGarageDoor"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/garagedoors/:id/:command") {
|
||||||
|
action: [
|
||||||
|
GET: "updateGarageDoor"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/cameras/:id") {
|
||||||
|
action: [
|
||||||
|
GET: "showCamera"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/cameras/:id/:command") {
|
||||||
|
action: [
|
||||||
|
GET: "updateCamera"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def installed() {}
|
||||||
|
|
||||||
|
def updated() {}
|
||||||
|
|
||||||
|
def listDevices() {
|
||||||
|
log.debug "entering listDevices"
|
||||||
|
//return listSwitches() + listLocks() + listGarageDoors() + listDoors() + listCameras()
|
||||||
|
return listSwitches() + listLocks() + listGarageDoors() + listCameras()
|
||||||
|
}
|
||||||
|
|
||||||
|
//switches
|
||||||
|
def listSwitches() {
|
||||||
|
log.debug "entering listSwitches"
|
||||||
|
switches.collect{showDevice(it,"switch")}
|
||||||
|
}
|
||||||
|
|
||||||
|
def showSwitch() {
|
||||||
|
log.debug "entering showSwitches"
|
||||||
|
show(switches, "switch")
|
||||||
|
}
|
||||||
|
|
||||||
|
def updateSwitch() {
|
||||||
|
log.debug "entering updateSwitches"
|
||||||
|
update(switches, "switch")
|
||||||
|
}
|
||||||
|
|
||||||
|
//locks
|
||||||
|
def listLocks() {
|
||||||
|
log.debug "entering listLocks"
|
||||||
|
locks.collect{showDevice(it,"lock")}
|
||||||
|
}
|
||||||
|
|
||||||
|
def showLock() {
|
||||||
|
log.debug "entering showLock"
|
||||||
|
show(locks, "lock")
|
||||||
|
}
|
||||||
|
|
||||||
|
def updateLock() {
|
||||||
|
log.debug "entering updateLock"
|
||||||
|
update(locks, "lock")
|
||||||
|
}
|
||||||
|
|
||||||
|
//doors
|
||||||
|
def listDoors() {
|
||||||
|
log.debug "entering listDoors"
|
||||||
|
locks.collect{showDevice(it,"door")}
|
||||||
|
}
|
||||||
|
|
||||||
|
def showDoor() {
|
||||||
|
log.debug "entering showDoors"
|
||||||
|
show(doors, "door")
|
||||||
|
}
|
||||||
|
|
||||||
|
def updateDoor() {
|
||||||
|
log.debug "entering updateDoor"
|
||||||
|
update(doors, "door")
|
||||||
|
}
|
||||||
|
|
||||||
|
//garagedoors
|
||||||
|
def listGarageDoors() {
|
||||||
|
log.debug "entering listGarageDoors"
|
||||||
|
locks.collect{showDevice(it,"garagedoor")}
|
||||||
|
}
|
||||||
|
|
||||||
|
def showGarageDoor() {
|
||||||
|
log.debug "entering showGarageDoors"
|
||||||
|
show(garagedoors, "garagedoor")
|
||||||
|
}
|
||||||
|
|
||||||
|
def updateGarageDoor() {
|
||||||
|
log.debug "entering updateGarageDoor"
|
||||||
|
update(gargedoors, "garagedoor")
|
||||||
|
}
|
||||||
|
|
||||||
|
//cameras
|
||||||
|
def listCameras() {
|
||||||
|
log.debug "entering listCameras"
|
||||||
|
cameras.collect{showDevice(it,"image")}
|
||||||
|
}
|
||||||
|
|
||||||
|
def showCamera() {
|
||||||
|
log.debug "entering showCameras"
|
||||||
|
show(cameras, "camera")
|
||||||
|
}
|
||||||
|
|
||||||
|
def updateCamera() {
|
||||||
|
log.debug "entering updateCamera"
|
||||||
|
update(cameras, "camera")
|
||||||
|
}
|
||||||
|
|
||||||
|
def deviceHandler(evt) {}
|
||||||
|
|
||||||
|
private update(devices, type) {
|
||||||
|
def rc = null
|
||||||
|
|
||||||
|
//def command = request.JSON?.command
|
||||||
|
def command = params.command
|
||||||
|
|
||||||
|
log.debug "update, request: params: ${params}, devices: $devices.id type=$type command=$command"
|
||||||
|
|
||||||
|
// Process the command.
|
||||||
|
if (command)
|
||||||
|
{
|
||||||
|
def dev = devices.find { it.id == params.id }
|
||||||
|
if (!dev) {
|
||||||
|
httpError(404, "Device not found: $params.id")
|
||||||
|
} else if (type == "switch") {
|
||||||
|
switch(command) {
|
||||||
|
case "on":
|
||||||
|
rc = dev.on()
|
||||||
|
break
|
||||||
|
case "off":
|
||||||
|
rc = dev.off()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
httpError(400, "Device command=$command is not a valid for device=$it.id $dev")
|
||||||
|
}
|
||||||
|
} else if (type == "lock") {
|
||||||
|
switch(command) {
|
||||||
|
case "lock":
|
||||||
|
rc = dev.lock()
|
||||||
|
break
|
||||||
|
case "unlock":
|
||||||
|
rc = dev.unlock()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
httpError(400, "Device command=$command is not a valid for device:=$it.id $dev")
|
||||||
|
}
|
||||||
|
} else if (type == "door") {
|
||||||
|
switch(command) {
|
||||||
|
case "open":
|
||||||
|
rc = dev.open()
|
||||||
|
break
|
||||||
|
case "close":
|
||||||
|
rc = dev.close()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
httpError(400, "Device command=$command is not a valid for device=$it.id $dev")
|
||||||
|
}
|
||||||
|
} else if (type == "garagedoor") {
|
||||||
|
switch(command) {
|
||||||
|
case "open":
|
||||||
|
rc = dev.open()
|
||||||
|
break
|
||||||
|
case "close":
|
||||||
|
rc = dev.close()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
httpError(400, "Device command=$command is not a valid for device=$it.id $dev")
|
||||||
|
}
|
||||||
|
} else if (type == "camera") {
|
||||||
|
switch(command) {
|
||||||
|
case "take":
|
||||||
|
rc = dev.take()
|
||||||
|
log.debug "Device command=$command device=$it.id $dev current image=$it.currentImage"
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
httpError(400, "Device command=$command is not a valid for device=$it.id $dev")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug "executed device=$it.id $dev command=$command rc=$rc"
|
||||||
|
|
||||||
|
// Check that the device is a switch that is currently on, supports 'setLevel"
|
||||||
|
// and that a level was specified.
|
||||||
|
int level = params.level ? params.level as int : -1;
|
||||||
|
if ((type == "switch") && (dev.currentValue('switch') == "on") && hasLevel(dev) && (level != -1)) {
|
||||||
|
log.debug "device about to setLevel=$level"
|
||||||
|
dev.setLevel(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show the device info if necessary.
|
||||||
|
if (rc == null) {
|
||||||
|
rc = showDevice(dev, type)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc
|
||||||
|
}
|
||||||
|
|
||||||
|
private show(devices, type) {
|
||||||
|
def dev = devices.find { it.id == params.id }
|
||||||
|
if (!dev) {
|
||||||
|
httpError(404, "Device not found")
|
||||||
|
} else {
|
||||||
|
// Show the device info.
|
||||||
|
showDevice(dev, type)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private showDevice(it, type) {
|
||||||
|
def props = null
|
||||||
|
|
||||||
|
// Get the current state for the device type.
|
||||||
|
def state = [it.currentState(type)]
|
||||||
|
|
||||||
|
// Check that whether the a switch device with level support is located and update the returned device type.
|
||||||
|
def devType = type
|
||||||
|
|
||||||
|
if (type == "switch" && hasLevel(it)) {
|
||||||
|
// Assign "switchWithLevel" to device type.
|
||||||
|
devType = "switchWithLevel"
|
||||||
|
// Add the level state.
|
||||||
|
def levelState = it.currentState("level")
|
||||||
|
if (levelState) {
|
||||||
|
state.add(levelState)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug "device label=$it.label type=$devType"
|
||||||
|
|
||||||
|
// Assign the device item properties if appropriate.
|
||||||
|
if (it) {
|
||||||
|
props = [id: it.id, label: it.label, type: devType, state: state]
|
||||||
|
// Add the hub information to the device properties
|
||||||
|
// if appropriate.
|
||||||
|
if (it.hub) {
|
||||||
|
props.put("location", it.hub.hub.location)
|
||||||
|
}
|
||||||
|
if (it.currentImage) {
|
||||||
|
props.put("currentImage", it.currentImage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return props
|
||||||
|
}
|
||||||
|
|
||||||
|
private hasLevel(device) {
|
||||||
|
// Default return value.
|
||||||
|
def rc = false;
|
||||||
|
|
||||||
|
// Get the device supported commands.
|
||||||
|
def supportedCommands = device.supportedCommands
|
||||||
|
|
||||||
|
// Check to see if the "setLevel" was found and assign
|
||||||
|
// the appropriate return value.
|
||||||
|
if (supportedCommands) {
|
||||||
|
// Find the "setLevel" command.
|
||||||
|
rc = supportedCommands.toString().indexOf("setLevel") != -1
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug "hasLevel device label=$device.label supportedCommands=$supportedCommands rc=$rc"
|
||||||
|
|
||||||
|
return rc
|
||||||
|
}
|
||||||
@@ -131,19 +131,69 @@ def update() {
|
|||||||
def type = params.deviceType
|
def type = params.deviceType
|
||||||
def data = request.JSON
|
def data = request.JSON
|
||||||
def devices = settings[type]
|
def devices = settings[type]
|
||||||
|
def device = settings[type]?.find { it.id == params.id }
|
||||||
def command = data.command
|
def command = data.command
|
||||||
|
|
||||||
log.debug "[PROD] update, params: ${params}, request: ${data}, devices: ${devices*.id}"
|
log.debug "[PROD] update, params: ${params}, request: ${data}, devices: ${devices*.id}"
|
||||||
if (command) {
|
|
||||||
def device = devices?.find { it.id == params.id }
|
if (!device) {
|
||||||
if (!device) {
|
httpError(404, "Device not found")
|
||||||
httpError(404, "Device not found")
|
}
|
||||||
} else {
|
|
||||||
device."$command"()
|
if (validateCommand(device, type, command)) {
|
||||||
}
|
device."$command"()
|
||||||
|
} else {
|
||||||
|
httpError(403, "Access denied. This command is not supported by current capability.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validating the command passed by the user based on capability.
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
def validateCommand(device, deviceType, command) {
|
||||||
|
def capabilityCommands = getDeviceCapabilityCommands(device.capabilities)
|
||||||
|
def currentDeviceCapability = getCapabilityName(deviceType)
|
||||||
|
if (capabilityCommands[currentDeviceCapability]) {
|
||||||
|
return command in capabilityCommands[currentDeviceCapability] ? true : false
|
||||||
|
} else {
|
||||||
|
// Handling other device types here, which don't accept commands
|
||||||
|
httpError(400, "Bad request.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Need to get the attribute name to do the lookup. Only
|
||||||
|
* doing it for the device types which accept commands
|
||||||
|
* @return attribute name of the device type
|
||||||
|
*/
|
||||||
|
def getCapabilityName(type) {
|
||||||
|
switch(type) {
|
||||||
|
case "switches":
|
||||||
|
return "Switch"
|
||||||
|
case "alarms":
|
||||||
|
return "Alarm"
|
||||||
|
case "locks":
|
||||||
|
return "Lock"
|
||||||
|
default:
|
||||||
|
return type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructing the map over here of
|
||||||
|
* supported commands by device capability
|
||||||
|
* @return a map of device capability -> supported commands
|
||||||
|
*/
|
||||||
|
def getDeviceCapabilityCommands(deviceCapabilities) {
|
||||||
|
def map = [:]
|
||||||
|
deviceCapabilities.collect {
|
||||||
|
map[it.name] = it.commands.collect{ it.name.toString() }
|
||||||
|
}
|
||||||
|
return map
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def show() {
|
def show() {
|
||||||
def type = params.deviceType
|
def type = params.deviceType
|
||||||
def devices = settings[type]
|
def devices = settings[type]
|
||||||
|
|||||||
Reference in New Issue
Block a user