Files
SmartThingsPublic/smartapps/dianoga/thermostat-auto-off.src/thermostat-auto-off.groovy
2015-08-04 15:49:03 -07:00

83 lines
2.0 KiB
Groovy

/**
* HVAC Auto Off
*
* Author: dianoga7@3dgo.net
* Date: 2013-07-21
*/
// Automatically generated. Make future change here.
definition(
name: "Thermostat Auto Off",
namespace: "dianoga",
author: "dianoga7@3dgo.net",
description: "Automatically turn off thermostat when windows/doors open. Turn it back on when everything is closed up.",
category: "Green Living",
iconUrl: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png",
iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience%402x.png",
oauth: true
)
preferences {
section("Control") {
input("thermostat", "capability.thermostat", title: "Thermostat")
}
section("Open/Close") {
input("sensors", "capability.contactSensor", title: "Sensors", multiple: true)
input("delay", "number", title: "Delay (seconds)")
}
}
def installed() {
log.debug "Installed with settings: ${settings}"
initialize()
}
def updated() {
log.debug "Updated with settings: ${settings}"
unsubscribe()
unschedule()
initialize()
}
def initialize() {
state.changed = false
subscribe(sensors, 'contact', "sensorChange")
}
def sensorChange(evt) {
log.debug "Desc: $evt.value , $state"
if(evt.value == 'open' && !state.changed) {
unschedule()
runIn(delay, 'turnOff')
} else if(evt.value == 'closed' && state.changed) {
// All closed?
def isOpen = false
for(sensor in sensors) {
if(sensor.id != evt.deviceId && sensor.currentValue('contact') == 'open') {
isOpen = true
}
}
if(!isOpen) {
unschedule()
runIn(delay, 'restore')
}
}
}
def turnOff() {
log.debug "Turning off thermostat due to contact open"
state.thermostatMode = thermostat.currentValue("thermostatMode")
thermostat.off()
state.changed = true
log.debug "State: $state"
}
def restore() {
log.debug "Setting thermostat to $state.thermostatMode"
thermostat.setThermostatMode(state.thermostatMode)
state.changed = false
}