Checking in all the SmartThings apps; both official and third-party.
[smartapps.git] / official / thermostat-auto-off.groovy
diff --git a/official/thermostat-auto-off.groovy b/official/thermostat-auto-off.groovy
new file mode 100755 (executable)
index 0000000..fd06c6d
--- /dev/null
@@ -0,0 +1,83 @@
+/**
+ *  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
+}
\ No newline at end of file