mirror of
https://github.com/mtan93/SmartThingsPublic.git
synced 2026-03-20 21:03:46 +00:00
Compare commits
18 Commits
MSA-1383-1
...
PROD_2016.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eed1ced71b | ||
|
|
d080833d5c | ||
|
|
e998528e8e | ||
|
|
d85566bb98 | ||
|
|
e1a5b4dd27 | ||
|
|
a2baa37901 | ||
|
|
922ab45343 | ||
|
|
962774996e | ||
|
|
d79594cbcb | ||
|
|
bf8fe4cad7 | ||
|
|
65752ce378 | ||
|
|
95f08aeb3d | ||
|
|
cd7bc1b262 | ||
|
|
be7f6a76a9 | ||
|
|
10e5b7e9d7 | ||
|
|
90e6dc91eb | ||
|
|
3ee8f86aa3 | ||
|
|
d1a910f11f |
@@ -28,7 +28,6 @@ metadata {
|
|||||||
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x98"
|
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x98"
|
||||||
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x86,0x72,0x98", outClusters: "0x5A,0x82"
|
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x86,0x72,0x98", outClusters: "0x5A,0x82"
|
||||||
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x80,0x71,0x85,0x70,0x72,0x86,0x30,0x31,0x84,0x59,0x73,0x5A,0x8F,0x98,0x7A", outClusters:"0x20" // Philio multi+
|
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x80,0x71,0x85,0x70,0x72,0x86,0x30,0x31,0x84,0x59,0x73,0x5A,0x8F,0x98,0x7A", outClusters:"0x20" // Philio multi+
|
||||||
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x72,0x5A,0x80,0x73,0x84,0x85,0x59,0x71,0x70,0x7A,0x98" // Vision door/window
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// simulator metadata
|
// simulator metadata
|
||||||
@@ -83,12 +82,12 @@ def updated() {
|
|||||||
cmds = [
|
cmds = [
|
||||||
command(zwave.manufacturerSpecificV2.manufacturerSpecificGet()),
|
command(zwave.manufacturerSpecificV2.manufacturerSpecificGet()),
|
||||||
"delay 1200",
|
"delay 1200",
|
||||||
zwave.wakeUpV1.wakeUpNoMoreInformation()
|
zwave.wakeUpV1.wakeUpNoMoreInformation().format()
|
||||||
]
|
]
|
||||||
} else if (!state.lastbat) {
|
} else if (!state.lastbat) {
|
||||||
cmds = []
|
cmds = []
|
||||||
} else {
|
} else {
|
||||||
cmds = [zwave.wakeUpV1.wakeUpNoMoreInformation()]
|
cmds = [zwave.wakeUpV1.wakeUpNoMoreInformation().format()]
|
||||||
}
|
}
|
||||||
response(cmds)
|
response(cmds)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,178 +0,0 @@
|
|||||||
/**
|
|
||||||
* Timer Light
|
|
||||||
*
|
|
||||||
* Copyright 2016 Kevin Hill
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
import groovy.time.*
|
|
||||||
|
|
||||||
definition(
|
|
||||||
name: "Timer Light",
|
|
||||||
namespace: "gr8gitsby",
|
|
||||||
author: "Kevin Hill",
|
|
||||||
description: "This puts outside lights on a timer",
|
|
||||||
category: "Convenience",
|
|
||||||
iconUrl: "https://source.unsplash.com/category/nature/60x60",
|
|
||||||
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 {
|
|
||||||
// Use a light swtich
|
|
||||||
section("Light Switch") {
|
|
||||||
// Capabilities link: http://docs.smartthings.com/en/latest/capabilities-reference.html
|
|
||||||
// Input data types: http://docs.smartthings.com/en/latest/device-type-developers-guide/device-preferences.html?highlight=input#supported-input-types
|
|
||||||
input "theSwitch", "capability.switch", title: "Pick your light switch"
|
|
||||||
input "confirmationSwitch", "capability.switch", title: "Pick the notification switch"
|
|
||||||
input "minutes", "number", title: "Enter the number of minutes you'd like the lights on"
|
|
||||||
input "person", "capability.presenceSensor", title: "When who arrives?"
|
|
||||||
|
|
||||||
// When arrival is detected, if it is dark, turn on the outside lights
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def installed() {
|
|
||||||
log.debug "Installed with settings: ${settings}"
|
|
||||||
subscribe(theSwitch, "switch", switchHandler)
|
|
||||||
subscribe(confirmationSwitch, "switch", confirmationSwitchHandler)
|
|
||||||
initialize()
|
|
||||||
}
|
|
||||||
|
|
||||||
def updated() {
|
|
||||||
log.debug "Updated with settings: ${settings}"
|
|
||||||
unsubscribe()
|
|
||||||
initialize()
|
|
||||||
}
|
|
||||||
|
|
||||||
def initialize() {
|
|
||||||
// This method sets up the app
|
|
||||||
subscribe(person, "presence", presenceChange)
|
|
||||||
state.Flashes = 4
|
|
||||||
initialSunPosition()
|
|
||||||
}
|
|
||||||
|
|
||||||
def presenceChange(evt){
|
|
||||||
log.debug("presenceChange")
|
|
||||||
// if someone arrives at night the lights will turn on
|
|
||||||
if("present" == evt.value){
|
|
||||||
timerLight()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function to set lights on timer for person arriving
|
|
||||||
def timerLight() {
|
|
||||||
log.debug(state.sunPosition)
|
|
||||||
if(state.sunPosition == "down"){
|
|
||||||
light.on()
|
|
||||||
runIn(60 * minutes, turnOff)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def turnOff(){
|
|
||||||
// This method turns off the ligt
|
|
||||||
theSwitch.off()
|
|
||||||
confirmationSwitch.off()
|
|
||||||
}
|
|
||||||
|
|
||||||
def initialSunPosition() {
|
|
||||||
// This method determines if sun is down at time of initializtion and run sunsetHandler() if so
|
|
||||||
|
|
||||||
def s = getSunriseAndSunset(zipCode: "98052")
|
|
||||||
def now = new Date()
|
|
||||||
def riseTime = s.sunrise
|
|
||||||
def setTime = s.sunset
|
|
||||||
|
|
||||||
if(setTime.before(now)) {
|
|
||||||
sunsetHandler()
|
|
||||||
log.info "Sun is already down, run sunsetHandler"
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ if (riseTime.after(now)) {
|
|
||||||
sunriseHandler()
|
|
||||||
log.info "Sun is up, run sunriseHandler"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def sunriseHandler() {
|
|
||||||
// method to set the sun position when the sun rises
|
|
||||||
state.sunPosition = "up"
|
|
||||||
}
|
|
||||||
|
|
||||||
def sunsetHandler() {
|
|
||||||
// method to set the sun position when the sunsets
|
|
||||||
state.sunPosition = "down"
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
def switchHandler(evt) {
|
|
||||||
log.debug("switch Handler Fired")
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
def confirmationSwitchHandler(evt) {
|
|
||||||
state.Flashes = state.Flashes - 1
|
|
||||||
log.debug("Flashes: ${state.Flashes}")
|
|
||||||
log.debug("Event State: ${evt.value}")
|
|
||||||
if(evt.value == "on" && state.Flashes > 0) {
|
|
||||||
runIn(2, turnOffConfirmationSwitch)
|
|
||||||
} else if(evt.value == "off" && state.Flashes > 0) {
|
|
||||||
runIn(2, turnOnConfirmationSwitch)
|
|
||||||
}
|
|
||||||
|
|
||||||
if(state.Flashes == 0){
|
|
||||||
state.Flashes = 4
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def turnOnConfirmationSwitch(){
|
|
||||||
confirmationSwitch.on()
|
|
||||||
}
|
|
||||||
|
|
||||||
def turnOffConfirmationSwitch(){
|
|
||||||
confirmationSwitch.off()
|
|
||||||
}
|
|
||||||
|
|
||||||
def switchHandler(evt){
|
|
||||||
log.debug("light Event handler fired")
|
|
||||||
// use Event rather than DeviceState because we may be changing DeviceState to only store changed values
|
|
||||||
def recentStates = theSwitch.eventsSince(new Date(now() - 4000), [all:true, max: 10]).findAll{it.name == "switch"}
|
|
||||||
log.debug "${recentStates?.size()} STATES FOUND, LAST AT ${recentStates ? recentStates[0].dateCreated : ''}"
|
|
||||||
//sendPush("Attempting to check light presses")
|
|
||||||
|
|
||||||
if (evt.value == "on") {
|
|
||||||
log.debug("==== ON ====")
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug(recentStates.size())
|
|
||||||
//if (evt.isPhysical()) {
|
|
||||||
|
|
||||||
if (recentStates.size() >= 2) {
|
|
||||||
|
|
||||||
log.debug "Outside light timer mode engaged"
|
|
||||||
def switchattr = confirmationSwitch.currentValue("switch")
|
|
||||||
log.debug "confirmationSwitch: $switchattr"
|
|
||||||
|
|
||||||
confirmationSwitch.on()
|
|
||||||
|
|
||||||
//alternativeSwitch.off()
|
|
||||||
//def message = "${location.name} executed ${settings.onPhrase} because ${evt.title} was tapped twice."
|
|
||||||
runIn(60 * minutes, turnOff)
|
|
||||||
} else {
|
|
||||||
log.trace "Skipping digital on/off event"
|
|
||||||
}
|
|
||||||
|
|
||||||
//log.debug("switch is on, turn off in $minutes")
|
|
||||||
//runIn(60*minutes, turnOff)
|
|
||||||
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
@@ -689,7 +689,7 @@ def parse(childDevice, description) {
|
|||||||
log.warn "Parsing Body failed - trying again..."
|
log.warn "Parsing Body failed - trying again..."
|
||||||
poll()
|
poll()
|
||||||
}
|
}
|
||||||
if (body instanceof java.util.HashMap) {
|
if (body instanceof java.util.Map) {
|
||||||
//poll response
|
//poll response
|
||||||
def bulbs = getChildDevices()
|
def bulbs = getChildDevices()
|
||||||
for (bulb in body) {
|
for (bulb in body) {
|
||||||
|
|||||||
@@ -823,8 +823,8 @@ def deviceHandler(evt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def sendToHarmony(evt, String callbackUrl) {
|
def sendToHarmony(evt, String callbackUrl) {
|
||||||
def callback = new URI(callbackUrl)
|
def callback = new URI(callbackUrl)
|
||||||
if(isIP(callback.host)){
|
if (callback.port != -1) {
|
||||||
def host = callback.port != -1 ? "${callback.host}:${callback.port}" : callback.host
|
def host = callback.port != -1 ? "${callback.host}:${callback.port}" : callback.host
|
||||||
def path = callback.query ? "${callback.path}?${callback.query}".toString() : callback.path
|
def path = callback.query ? "${callback.path}?${callback.query}".toString() : callback.path
|
||||||
sendHubCommand(new physicalgraph.device.HubAction(
|
sendHubCommand(new physicalgraph.device.HubAction(
|
||||||
@@ -852,25 +852,6 @@ def sendToHarmony(evt, String callbackUrl) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isIP(String str) {
|
|
||||||
try {
|
|
||||||
String[] parts = str.split("\\.");
|
|
||||||
if (parts.length != 4) return false;
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
|
||||||
int p
|
|
||||||
try {
|
|
||||||
p = Integer.parseInt(parts[i]);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (p > 255 || p < 0) return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def listHubs() {
|
def listHubs() {
|
||||||
location.hubs?.findAll { it.type.toString() == "PHYSICAL" }?.collect { hubItem(it) }
|
location.hubs?.findAll { it.type.toString() == "PHYSICAL" }?.collect { hubItem(it) }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user