diff --git a/smartapps/pasci/motion-switch-smarttimeframe.src/motion-switch-smarttimeframe.groovy b/smartapps/pasci/motion-switch-smarttimeframe.src/motion-switch-smarttimeframe.groovy index 460ef83..5e16d04 100644 --- a/smartapps/pasci/motion-switch-smarttimeframe.src/motion-switch-smarttimeframe.groovy +++ b/smartapps/pasci/motion-switch-smarttimeframe.src/motion-switch-smarttimeframe.groovy @@ -1,8 +1,9 @@ +//================================================================================== /** * Motion-Switch-Sched SmartApp * * Copyright 2017 PASCI Ciro Ippolito 2017 - * + *********************************************************************************** * 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: * @@ -13,6 +14,7 @@ * for the specific language governing permissions and limitations under the License. * */ + //================================================================================== definition( name: "Motion Switch SmartTimeframe", namespace: "PASCI", @@ -26,6 +28,7 @@ definition( //iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png", //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 { section("When MOTION is detected") { input "themotion", "capability.motionSensor", required: true, title: "WHERE" @@ -41,30 +44,36 @@ preferences { input "TOTime", "time", title: "To", required: true } } - +//================================================================================== def installed() { log.debug "Installed with settings: ${settings}" initialize() } - +//================================================================================== def updated() { log.debug "Updated with settings: ${settings}" unsubscribe() initialize() } - +//================================================================================== def initialize() { log.debug "Installata at: " + now() schedule(FROMTime, handlerFROMTIME) schedule(TOTime, handlerTOTime) - subscribe(themotion, "motion", motionDetectedHandler) + subscribe(themotion, "motion.active", handler_Motion___Active) + subscribe(themotion, "motion.inactive", handler_motion_inactive) } // HANDLERS +//================================================================================== def handlerFROMTIME() { - log.debug "TURN ON at ${new Date()}" + log.debug "FROM TIME at ${new Date()}" OUTLE.on() } +//================================================================================== def handlerTOTime() { + log.debug "TO TIME at ${new Date()}" + checkMotion(); + /* def motionState = themotion.currentState("motion") log.debug "state of motion sensor is: " + motionState.value log.debug "TURN OFF at ${new Date()}" @@ -74,20 +83,43 @@ def handlerTOTime() { }else{ OUTLE.off() log.debug "state of motion sensor is INACTIVE" - } + } + */ } -def motionDetectedHandler(evt) { - log.debug "motionDetectedHandler called: $evt" - log.debug "INACTIVE"; - def between = timeOfDayIsBetween(FROMTime, TOTime, new Date(), location.timeZone) +//================================================================================== +def handler_Motion___Active(evt) { + log.debug("MOT Active") + OUTLE.on() +} +//================================================================================== +def handler_motion_inactive(evt) { + log.debug("MOT Inactive") + def between = timeOfDayIsBetween(FROMTime, TOTime, new Date(), location.timeZone) if (between) { + log.debug("It dasan't mattar Christopha") OUTLE.on() } else { - if (evt.value == "active"){ - log.debug "ACTIVE"; - OUTLE.on() - }else{ - OUTLE.off() - } + runIn(60 * minutes, checkMotion) } } +//================================================================================== +def checkMotion() { + log.debug "In checkMotion scheduled method" + // get the current state object for the motion sensor + def motionState = themotion.currentState("motion") + if (motionState.value == "inactive") { + def elapsed = now() - motionState.date.time // time elapsed between now and when the motion reported inactive + def threshold = 1000 * 60 * minutes // elapsed time is in milliseconds + if (elapsed >= threshold) { + log.debug "Motion has stayed inactive long enough since last check ($elapsed ms): turning switch off" + OUTLE.off() + } else { + log.debug "Motion has not stayed inactive long enough since last check ($elapsed ms): doing nothing" + } + } else { + // Motion active; just log it and do nothing + log.debug "Motion is active, do nothing and wait for inactive" + } +} +//================================================================================== +//================================================================================== \ No newline at end of file