Skip to content

Instantly share code, notes, and snippets.

@cramforce
Created November 5, 2019 03:48
Show Gist options
  • Select an option

  • Save cramforce/5b90fd80e4336225a7e28db22c867d9a to your computer and use it in GitHub Desktop.

Select an option

Save cramforce/5b90fd80e4336225a7e28db22c867d9a to your computer and use it in GitHub Desktop.

Revisions

  1. cramforce created this gist Nov 5, 2019.
    69 changes: 69 additions & 0 deletions simple-thermostat.groovy
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,69 @@
    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();
    }
    }