/** * Turn on before Sunset * * 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. * */ definition( name: "Turn on before Sunset", namespace: "exmaples", author: "SmartThings", description: "Turn on lights a number of minutes before sunset, based on your location's geofence", category: "My Apps", iconUrl: "https://s3.amazonaws.com/smartapp-icons/ModeMagic/rise-and-shine.png", iconX2Url: "https://s3.amazonaws.com/smartapp-icons/ModeMagic/rise-and-shine@2x.png", iconX3Url: "https://s3.amazonaws.com/smartapp-icons/ModeMagic/rise-and-shine@2x.png") preferences { section("Lights") { input "switches", "capability.switch", title: "Which lights to turn on?" input "offset", "number", title: "Turn on this many minutes before sunset" } } def installed() { initialize() } def updated() { unsubscribe() initialize() } def initialize() { subscribe(location, "sunsetTime", sunsetTimeHandler) //schedule it to run today too scheduleTurnOn(location.currentValue("sunsetTime")) } def sunsetTimeHandler(evt) { //when I find out the sunset time, schedule the lights to turn on with an offset scheduleTurnOn(evt.value) } def scheduleTurnOn(sunsetString) { //get the Date value for the string //def sunsetTime = Date.parse("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", sunsetString) //calculate the offset def timeBeforeSunset = new Date() log.debug "Scheduling for: $timeBeforeSunset" //schedule this to run one time runOnce(timeBeforeSunset, turnOn) } def turnOn() { log.debug "turning on lights" switches.on() }