Compare commits

..

1 Commits

Author SHA1 Message Date
Vinay Rao
abc5683ed3 Merge pull request #1988 from SmartThingsCommunity/staging
Rolling up staging to production
2017-05-09 13:46:13 -05:00
4 changed files with 48 additions and 47 deletions

View File

@@ -103,7 +103,7 @@ metadata {
} }
valueTile("illuminance", "device.illuminance", inactiveLabel: false, width: 2, height: 2) { valueTile("illuminance", "device.illuminance", inactiveLabel: false, width: 2, height: 2) {
state "illuminance", label:'${currentValue} lux', unit:"" state "illuminance", label:'${currentValue} ${unit}', unit:"lux"
} }
valueTile("ultravioletIndex", "device.ultravioletIndex", inactiveLabel: false, width: 2, height: 2) { valueTile("ultravioletIndex", "device.ultravioletIndex", inactiveLabel: false, width: 2, height: 2) {

View File

@@ -86,7 +86,7 @@ metadata {
state "humidity", label:'${currentValue}% humidity', unit:"" state "humidity", label:'${currentValue}% humidity', unit:""
} }
valueTile("illuminance", "device.illuminance", inactiveLabel: false, width: 2, height: 2) { valueTile("illuminance", "device.illuminance", inactiveLabel: false, width: 2, height: 2) {
state "luminosity", label:'${currentValue} lux', unit:"" state "luminosity", label:'${currentValue} ${unit}', unit:"lux"
} }
valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat", width: 2, height: 2) {
state "battery", label:'${currentValue}% battery', unit:"" state "battery", label:'${currentValue}% battery', unit:""
@@ -283,3 +283,4 @@ private secure(physicalgraph.zwave.Command cmd) {
private secureSequence(commands, delay=200) { private secureSequence(commands, delay=200) {
delayBetween(commands.collect{ secure(it) }, delay) delayBetween(commands.collect{ secure(it) }, delay)
} }

View File

@@ -79,7 +79,7 @@ metadata {
state "humidity", label:'${currentValue}% humidity', unit:"" state "humidity", label:'${currentValue}% humidity', unit:""
} }
valueTile("illuminance", "device.illuminance", inactiveLabel: false, width: 2, height: 2) { valueTile("illuminance", "device.illuminance", inactiveLabel: false, width: 2, height: 2) {
state "luminosity", label:'${currentValue} lux', unit:"" state "luminosity", label:'${currentValue} ${unit}', unit:"lux"
} }
valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat", width: 2, height: 2) { valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat", width: 2, height: 2) {
state "battery", label:'${currentValue}% battery', unit:"" state "battery", label:'${currentValue}% battery', unit:""

View File

@@ -15,66 +15,66 @@ definition(
) )
preferences { preferences {
section("Light switches to turn off") { section("Light switches to turn off") {
input "switches", "capability.switch", title: "Choose light switches", multiple: true input "switches", "capability.switch", title: "Choose light switches", multiple: true
} }
section("Turn off when there is no motion and presence") { section("Turn off when there is no motion and presence") {
input "motionSensor", "capability.motionSensor", title: "Choose motion sensor" input "motionSensor", "capability.motionSensor", title: "Choose motion sensor"
input "presenceSensors", "capability.presenceSensor", title: "Choose presence sensors", multiple: true input "presenceSensors", "capability.presenceSensor", title: "Choose presence sensors", multiple: true
} }
section("Delay before turning off") { section("Delay before turning off") {
input "delayMins", "number", title: "Minutes of inactivity?" input "delayMins", "number", title: "Minutes of inactivity?"
} }
} }
def installed() { def installed() {
subscribe(motionSensor, "motion", motionHandler) subscribe(motionSensor, "motion", motionHandler)
subscribe(presenceSensors, "presence", presenceHandler) subscribe(presenceSensors, "presence", presenceHandler)
} }
def updated() { def updated() {
unsubscribe() unsubscribe()
subscribe(motionSensor, "motion", motionHandler) subscribe(motionSensor, "motion", motionHandler)
subscribe(presenceSensors, "presence", presenceHandler) subscribe(presenceSensors, "presence", presenceHandler)
} }
def motionHandler(evt) { def motionHandler(evt) {
log.debug "handler $evt.name: $evt.value" log.debug "handler $evt.name: $evt.value"
if (evt.value == "inactive") { if (evt.value == "inactive") {
runIn(delayMins * 60, scheduleCheck, [overwrite: true]) runIn(delayMins * 60, scheduleCheck, [overwrite: false])
} }
} }
def presenceHandler(evt) { def presenceHandler(evt) {
log.debug "handler $evt.name: $evt.value" log.debug "handler $evt.name: $evt.value"
if (evt.value == "not present") { if (evt.value == "not present") {
runIn(delayMins * 60, scheduleCheck, [overwrite: true]) runIn(delayMins * 60, scheduleCheck, [overwrite: false])
} }
} }
def isActivePresence() { def isActivePresence() {
// check all the presence sensors, make sure none are present // check all the presence sensors, make sure none are present
def noPresence = presenceSensors.find{it.currentPresence == "present"} == null def noPresence = presenceSensors.find{it.currentPresence == "present"} == null
!noPresence !noPresence
} }
def scheduleCheck() { def scheduleCheck() {
log.debug "scheduled check" log.debug "scheduled check"
def motionState = motionSensor.currentState("motion") def motionState = motionSensor.currentState("motion")
if (motionState.value == "inactive") { if (motionState.value == "inactive") {
def elapsed = now() - motionState.rawDateCreated.time def elapsed = now() - motionState.rawDateCreated.time
def threshold = 1000 * 60 * delayMins - 1000 def threshold = 1000 * 60 * delayMins - 1000
if (elapsed >= threshold) { if (elapsed >= threshold) {
if (!isActivePresence()) { if (!isActivePresence()) {
log.debug "Motion has stayed inactive since last check ($elapsed ms) and no presence: turning lights off" log.debug "Motion has stayed inactive since last check ($elapsed ms) and no presence: turning lights off"
switches.off() switches.off()
} else { } else {
log.debug "Presence is active: do nothing" log.debug "Presence is active: do nothing"
}
} else {
log.debug "Motion has not stayed inactive long enough since last check ($elapsed ms): do nothing"
} }
} else {
log.debug "Motion has not stayed inactive long enough since last check ($elapsed ms): do nothing"
}
} else { } else {
log.debug "Motion is active: do nothing" log.debug "Motion is active: do nothing"
} }
} }