mirror of
https://github.com/mtan93/SmartThingsPublic.git
synced 2026-03-22 21:03:51 +00:00
Compare commits
15 Commits
MSA-2042-1
...
PROD_2017.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f752a01906 | ||
|
|
505ec4ff0f | ||
|
|
fe0f555f10 | ||
|
|
42353044e6 | ||
|
|
78f06a0b9d | ||
|
|
7f13dd356d | ||
|
|
4042bbbf98 | ||
|
|
20407441d9 | ||
|
|
52925d6d99 | ||
|
|
e6c17131af | ||
|
|
cc70865fbf | ||
|
|
e53d9c910c | ||
|
|
c13014936b | ||
|
|
ea3abb26c0 | ||
|
|
c4c2a3ffd7 |
18
build.gradle
18
build.gradle
@@ -9,7 +9,7 @@ apply plugin: 'smartthings-slack'
|
|||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath "com.smartthings.deployment:executable-deployment-scripts:1.0.11"
|
classpath "com.smartthings.deployment:executable-deployment-scripts:1.0.12"
|
||||||
}
|
}
|
||||||
repositories {
|
repositories {
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
@@ -19,7 +19,7 @@ buildscript {
|
|||||||
username smartThingsArtifactoryUserName
|
username smartThingsArtifactoryUserName
|
||||||
password smartThingsArtifactoryPassword
|
password smartThingsArtifactoryPassword
|
||||||
}
|
}
|
||||||
url "https://artifactory.smartthings.com/libs-release-local"
|
url "https://smartthings.jfrog.io/smartthings/libs-release-local"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -32,7 +32,7 @@ repositories {
|
|||||||
username smartThingsArtifactoryUserName
|
username smartThingsArtifactoryUserName
|
||||||
password smartThingsArtifactoryPassword
|
password smartThingsArtifactoryPassword
|
||||||
}
|
}
|
||||||
url "https://artifactory.smartthings.com/libs-release-local"
|
url "https://smartthings.jfrog.io/smartthings/libs-release-local"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,10 +51,10 @@ sourceSets {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
devicetypesCompile 'org.codehaus.groovy:groovy-all:2.4.7'
|
devicetypesCompile 'org.codehaus.groovy:groovy-all:2.4.7'
|
||||||
devicetypesCompile 'smartthings:appengine-z-wave:0.1.2'
|
devicetypesCompile 'smartthings:appengine-z-wave:0.1.3'
|
||||||
devicetypesCompile 'smartthings:appengine-zigbee:0.1.11'
|
devicetypesCompile 'smartthings:appengine-zigbee:0.1.12'
|
||||||
smartappsCompile 'org.codehaus.groovy:groovy-all:2.4.7'
|
smartappsCompile 'org.codehaus.groovy:groovy-all:2.4.7'
|
||||||
smartappsCompile 'smartthings:appengine-common:0.1.8'
|
smartappsCompile 'smartthings:appengine-common:0.1.9'
|
||||||
smartappsCompile 'org.codehaus.groovy.modules.http-builder:http-builder:0.7.1'
|
smartappsCompile 'org.codehaus.groovy.modules.http-builder:http-builder:0.7.1'
|
||||||
smartappsCompile 'org.grails:grails-web:2.3.11'
|
smartappsCompile 'org.grails:grails-web:2.3.11'
|
||||||
smartappsCompile 'org.json:json:20140107'
|
smartappsCompile 'org.json:json:20140107'
|
||||||
@@ -74,19 +74,19 @@ slackSendMessage {
|
|||||||
String username
|
String username
|
||||||
switch (branch) {
|
switch (branch) {
|
||||||
case 'master':
|
case 'master':
|
||||||
username = 'Hickory'
|
username = 'DEV'
|
||||||
iconUrl = wolverine
|
iconUrl = wolverine
|
||||||
color = '#35D0F2'
|
color = '#35D0F2'
|
||||||
messageText = 'Began deployment of _SmartThingsPublic[master]_ branch to the _Dev_ environments.'
|
messageText = 'Began deployment of _SmartThingsPublic[master]_ branch to the _Dev_ environments.'
|
||||||
break
|
break
|
||||||
case 'staging':
|
case 'staging':
|
||||||
username = 'Dickory'
|
username = 'STG'
|
||||||
iconUrl = beach
|
iconUrl = beach
|
||||||
color = '#FFDE20'
|
color = '#FFDE20'
|
||||||
messageText = 'Began deployment of _SmartThingsPublic[staging]_ branch to the _Staging_ environments.'
|
messageText = 'Began deployment of _SmartThingsPublic[staging]_ branch to the _Staging_ environments.'
|
||||||
break
|
break
|
||||||
case 'production':
|
case 'production':
|
||||||
username = 'Dock'
|
username = 'PRD'
|
||||||
iconUrl = drinks
|
iconUrl = drinks
|
||||||
color = '#FF1D23'
|
color = '#FF1D23'
|
||||||
messageText = 'Began deployment of _SmartThingsPublic[production]_ branch to the _Prod_ environments.'
|
messageText = 'Began deployment of _SmartThingsPublic[production]_ branch to the _Prod_ environments.'
|
||||||
|
|||||||
@@ -300,21 +300,15 @@ def setColor(value) {
|
|||||||
value.hex = "#${hex(value.red)}${hex(value.green)}${hex(value.blue)}"
|
value.hex = "#${hex(value.red)}${hex(value.green)}${hex(value.blue)}"
|
||||||
}
|
}
|
||||||
|
|
||||||
if(value.hue) {
|
sendEvent(name: "hue", value: value.hue, displayed: false)
|
||||||
sendEvent(name: "hue", value: value.hue, displayed: false)
|
sendEvent(name: "saturation", value: value.saturation, displayed: false)
|
||||||
}
|
sendEvent(name: "color", value: value.hex, displayed: false)
|
||||||
if(value.saturation) {
|
if (value.level) {
|
||||||
sendEvent(name: "saturation", value: value.saturation, displayed: false)
|
sendEvent(name: "level", value: value.level)
|
||||||
}
|
}
|
||||||
if(value.hex?.trim()) {
|
if (value.switch) {
|
||||||
sendEvent(name: "color", value: value.hex, displayed: false)
|
sendEvent(name: "switch", value: value.switch)
|
||||||
}
|
}
|
||||||
if (value.level) {
|
|
||||||
sendEvent(name: "level", value: value.level)
|
|
||||||
}
|
|
||||||
if (value.switch?.trim()) {
|
|
||||||
sendEvent(name: "switch", value: value.switch)
|
|
||||||
}
|
|
||||||
|
|
||||||
sendRGB(value.rh, value.gh, value.bh)
|
sendRGB(value.rh, value.gh, value.bh)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ metadata {
|
|||||||
|
|
||||||
// tile definitions
|
// tile definitions
|
||||||
tiles(scale: 2) {
|
tiles(scale: 2) {
|
||||||
multiAttributeTile(name:"valve", type: "generic", width: 6, height: 4, canChangeIcon: true){
|
multiAttributeTile(name:"contact", type: "generic", width: 6, height: 4, canChangeIcon: true){
|
||||||
tileAttribute ("device.valve", key: "PRIMARY_CONTROL") {
|
tileAttribute ("device.contact", key: "PRIMARY_CONTROL") {
|
||||||
attributeState "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing"
|
attributeState "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing"
|
||||||
attributeState "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff", nextState:"opening"
|
attributeState "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff", nextState:"opening"
|
||||||
attributeState "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC"
|
attributeState "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC"
|
||||||
@@ -48,8 +48,8 @@ metadata {
|
|||||||
state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
|
state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
|
||||||
}
|
}
|
||||||
|
|
||||||
main "valve"
|
main "contact"
|
||||||
details(["valve","refresh"])
|
details(["contact","refresh"])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ metadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tiles(scale: 2) {
|
tiles(scale: 2) {
|
||||||
multiAttributeTile(name:"valve", type: "generic", width: 6, height: 4, canChangeIcon: true){
|
multiAttributeTile(name:"contact", type: "generic", width: 6, height: 4, canChangeIcon: true){
|
||||||
tileAttribute ("device.valve", key: "PRIMARY_CONTROL") {
|
tileAttribute ("device.contact", key: "PRIMARY_CONTROL") {
|
||||||
attributeState "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing"
|
attributeState "open", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing"
|
||||||
attributeState "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff", nextState:"opening"
|
attributeState "closed", label: '${name}', action: "valve.open", icon: "st.valves.water.closed", backgroundColor: "#ffffff", nextState:"opening"
|
||||||
attributeState "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing"
|
attributeState "opening", label: '${name}', action: "valve.close", icon: "st.valves.water.open", backgroundColor: "#00A0DC", nextState:"closing"
|
||||||
@@ -58,8 +58,8 @@ metadata {
|
|||||||
state "default", label:"", action:"refresh.refresh", icon:"st.secondary.refresh"
|
state "default", label:"", action:"refresh.refresh", icon:"st.secondary.refresh"
|
||||||
}
|
}
|
||||||
|
|
||||||
main(["valve"])
|
main(["contact"])
|
||||||
details(["valve", "battery", "refresh"])
|
details(["contact", "battery", "refresh"])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -195,7 +195,10 @@ def registerDeviceChange() {
|
|||||||
state.deviceSubscriptionMap.put(deviceId, [subscriptionEndpt])
|
state.deviceSubscriptionMap.put(deviceId, [subscriptionEndpt])
|
||||||
log.info "Added subscription URL: ${subscriptionEndpt} for ${myDevice.displayName}"
|
log.info "Added subscription URL: ${subscriptionEndpt} for ${myDevice.displayName}"
|
||||||
} else if (!state.deviceSubscriptionMap[deviceId].contains(subscriptionEndpt)) {
|
} else if (!state.deviceSubscriptionMap[deviceId].contains(subscriptionEndpt)) {
|
||||||
state.deviceSubscriptionMap[deviceId] << subscriptionEndpt
|
// state.deviceSubscriptionMap[deviceId] << subscriptionEndpt
|
||||||
|
// For now, we will only have one subscription endpoint per device
|
||||||
|
state.deviceSubscriptionMap.remove(deviceId)
|
||||||
|
state.deviceSubscriptionMap.put(deviceId, [subscriptionEndpt])
|
||||||
log.info "Added subscription URL: ${subscriptionEndpt} for ${myDevice.displayName}"
|
log.info "Added subscription URL: ${subscriptionEndpt} for ${myDevice.displayName}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,97 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright 2015 SmartThings
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
* Left It Open
|
|
||||||
*
|
|
||||||
* Author: SmartThings
|
|
||||||
* Date: 2013-05-09
|
|
||||||
*/
|
|
||||||
definition(
|
|
||||||
name: "Left It Open (Set switch)",
|
|
||||||
namespace: "smartthings",
|
|
||||||
author: "SmartThings",
|
|
||||||
description: "Turns on a switch if you have left a door or window open longer that a specified amount of time. Turns if off when closed",
|
|
||||||
category: "Convenience",
|
|
||||||
iconUrl: "https://s3.amazonaws.com/smartapp-icons/ModeMagic/bon-voyage.png",
|
|
||||||
iconX2Url: "https://s3.amazonaws.com/smartapp-icons/ModeMagic/bon-voyage%402x.png"
|
|
||||||
)
|
|
||||||
|
|
||||||
preferences {
|
|
||||||
|
|
||||||
section("Monitor this door or window") {
|
|
||||||
input "contact", "capability.contactSensor"
|
|
||||||
}
|
|
||||||
section("And notify me if it's open for more than this many minutes (default 10)") {
|
|
||||||
input "openThreshold", "number", description: "Number of minutes", required: false
|
|
||||||
}
|
|
||||||
section("Turn on/off a switch... (usually a simulated one)") {
|
|
||||||
input "switch1", "capability.switch"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def installed() {
|
|
||||||
log.trace "installed()"
|
|
||||||
subscribe()
|
|
||||||
}
|
|
||||||
|
|
||||||
def updated() {
|
|
||||||
log.trace "updated()"
|
|
||||||
unsubscribe()
|
|
||||||
subscribe()
|
|
||||||
}
|
|
||||||
|
|
||||||
def subscribe() {
|
|
||||||
subscribe(contact, "contact.open", doorOpen)
|
|
||||||
subscribe(contact, "contact.closed", doorClosed)
|
|
||||||
}
|
|
||||||
|
|
||||||
def doorOpen(evt)
|
|
||||||
{
|
|
||||||
log.trace "doorOpen($evt.name: $evt.value)"
|
|
||||||
def t0 = now()
|
|
||||||
def delay = (openThreshold != null && openThreshold != "") ? openThreshold * 60 : 600
|
|
||||||
runIn(delay, doorOpenTooLong, [overwrite: false])
|
|
||||||
log.debug "scheduled doorOpenTooLong in ${now() - t0} msec"
|
|
||||||
}
|
|
||||||
|
|
||||||
def doorClosed(evt)
|
|
||||||
{
|
|
||||||
log.trace "doorClosed($evt.name: $evt.value)"
|
|
||||||
switch1.off()
|
|
||||||
}
|
|
||||||
|
|
||||||
def doorOpenTooLong() {
|
|
||||||
def contactState = contact.currentState("contact")
|
|
||||||
def freq = (frequency != null && frequency != "") ? frequency * 60 : 600
|
|
||||||
|
|
||||||
if (contactState.value == "open") {
|
|
||||||
def elapsed = now() - contactState.rawDateCreated.time
|
|
||||||
def threshold = ((openThreshold != null && openThreshold != "") ? openThreshold * 60000 : 60000) - 1000
|
|
||||||
if (elapsed >= threshold) {
|
|
||||||
log.debug "Contact has stayed open long enough since last check ($elapsed ms): calling sendMessage()"
|
|
||||||
sendMessage()
|
|
||||||
runIn(freq, doorOpenTooLong, [overwrite: false])
|
|
||||||
} else {
|
|
||||||
log.debug "Contact has not stayed open long enough since last check ($elapsed ms): doing nothing"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.warn "doorOpenTooLong() called but contact is closed: doing nothing"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void sendMessage()
|
|
||||||
{
|
|
||||||
def minutes = (openThreshold != null && openThreshold != "") ? openThreshold : 10
|
|
||||||
def msg = "${contact.displayName} has been left open for ${minutes} minutes."
|
|
||||||
log.info msg
|
|
||||||
switch1.on()
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user