Created
November 5, 2019 03:48
-
-
Save cramforce/5b90fd80e4336225a7e28db22c867d9a to your computer and use it in GitHub Desktop.
Simple SmartThings Thermostat
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
definition( | |
name: "Outdoor Thermostat", | |
namespace: "cramforce", | |
author: "Malte", | |
description: "Simple SmartThings Thermostat", | |
category: "Convenience", | |
iconUrl: "https://s3.images-iherb.com/sns/sns01567/u/3.jpg", | |
iconX2Url: "https://s3.images-iherb.com/sns/sns01567/u/3.jpg" | |
) | |
preferences { | |
section("Heater") { | |
input "heater", "capability.switch", title: "Heater", required: true | |
} | |
section("Thermometer") { | |
input "temperature", "capability.temperatureMeasurement", title: "Thermometer", required: true | |
input "temperatureConfigure", "capability.configuration", title: "Thermometer for configuration", required: true | |
} | |
section("Controller") { | |
input "controller", "capability.switch", title: "Controlling switch", required: true | |
} | |
section("Temperature") { | |
input "targetTemp", "number", title: "Target Temperature", defaultValue: 80, required: true | |
} | |
} | |
def installed() { | |
subscribe(temperature, "temperature", tempChanged) | |
subscribe(controller, "switch", tempChanged) | |
runEvery1Minute(minute) | |
} | |
def updated() { | |
unsubscribe() | |
unschedule() | |
installed() | |
tempChanged() | |
minute() | |
} | |
def minute() { | |
if (controller.currentValue("switch") != "on") { | |
return; | |
} | |
// This triggers a new measurement because otherwise we only get a valu every 8 minutes | |
log.debug "Configure thermostat" | |
temperatureConfigure.configure(); | |
} | |
def tempChanged(evt) { | |
if (controller.currentValue("switch") != "on") { | |
log.debug "Controller switch off" | |
if (heater.currentValue("switch") == "on") { | |
heater.off(); | |
} | |
return; | |
} | |
def temp = temperature.currentValue("temperature"); | |
log.debug "Temp changed: $temp" | |
if (temp < targetTemp) { | |
log.debug "Turning on heater: $temp < $targetTemp" | |
sendNotificationEvent("$app.label: Turning on heater: $temp < $targetTemp"); | |
heater.on(); | |
} else { | |
log.debug "Turning off heater: $temp >= $targetTemp" | |
sendNotificationEvent("$app.label: Turning off heater: $temp >= $targetTemp"); | |
heater.off(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment