Skip to content

Instantly share code, notes, and snippets.

@cramforce
Created November 5, 2019 03:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cramforce/5b90fd80e4336225a7e28db22c867d9a to your computer and use it in GitHub Desktop.
Save cramforce/5b90fd80e4336225a7e28db22c867d9a to your computer and use it in GitHub Desktop.
Simple SmartThings Thermostat
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