From 72964032bddfe02498370f2d05cfb12cef128972 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 24 May 2020 15:31:11 -0400 Subject: [PATCH 01/63] Just testing that GitHub integration works --- .../virtual-thermostat-device.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index afdf1b8..7d8e597 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -1,7 +1,7 @@ metadata { definition (name: "Virtual Thermostat Device", namespace: "piratemedia/smartthings", - author: "Eliot S.", + author: "Eliot S. + Steffen N.", mnmn: "SmartThings", vid: "generic-thermostat-1", executeCommandsLocally: true, From e450e1a78d5616c44fb84ed63a9ff5a216580d23 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Sun, 24 May 2020 16:40:41 -0400 Subject: [PATCH 02/63] Update virtual-thermostat-with-device.groovy --- .../virtual-thermostat-with-device.groovy | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 877bb06..b8be8dc 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -14,7 +14,7 @@ preferences { input "sensors", "capability.temperatureMeasurement", title: "Sensor", multiple: true } section("Select the heater outlet(s)... "){ - input "outlets", "capability.switch", title: "Outlets", multiple: true + input "heating_outlets", "capability.switch", title: "Heating Outlets", multiple: true } section("Only heat when contact(s) arent open (optional, leave blank to not require contact sensor)..."){ input "motion", "capability.contactSensor", title: "Contact", required: false, multiple: true @@ -127,9 +127,9 @@ def handleChange() { //set heater outlet if(shouldHeatingBeOn(thermostat)) { - outlets.on() + heating_outlets.on() } else { - outlets.off() + heating_outlets.off() } } From 1834a8c3c475852a2f43e022e5dccf94d22a56b5 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Sun, 24 May 2020 16:52:04 -0400 Subject: [PATCH 03/63] Update virtual-thermostat-with-device.groovy --- .../virtual-thermostat-with-device.groovy | 3 +++ 1 file changed, 3 insertions(+) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index b8be8dc..dd9072f 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -16,6 +16,9 @@ preferences { section("Select the heater outlet(s)... "){ input "heating_outlets", "capability.switch", title: "Heating Outlets", multiple: true } + section("Select the cooling outlet(s)... "){ + input "cooling_outlets", "capability.switch", title: "Cooling Outlets", multiple: true + } section("Only heat when contact(s) arent open (optional, leave blank to not require contact sensor)..."){ input "motion", "capability.contactSensor", title: "Contact", required: false, multiple: true } From 5169b8203f142a2f2188198df209dc69689988d8 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Sun, 24 May 2020 18:41:28 -0400 Subject: [PATCH 04/63] Update virtual-thermostat-with-device.groovy First attempt at adding cooling devices --- .../virtual-thermostat-with-device.groovy | 99 +++++++++++++++++-- 1 file changed, 89 insertions(+), 10 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index dd9072f..b605201 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -23,8 +23,11 @@ preferences { input "motion", "capability.contactSensor", title: "Contact", required: false, multiple: true } section("Never go below this temperature: (optional)"){ - input "emergencySetpoint", "decimal", title: "Emergency Temp", required: false + input "emergencyHeatingSetpoint", "decimal", title: "Emergency Min Temp", required: false } + section("Never go above this temperature: (optional)"){ + input "emergencyCoolingSetpoint", "decimal", title: "Emergency Max Temp", required: false + } section("Temperature Threshold (Don't allow heating to go above or bellow this amount from set temperature)") { input "threshold", "decimal", title: "Temperature Threshold", required: false, defaultValue: 1.0 } @@ -52,7 +55,7 @@ def createDevice() { def shouldHeatingBeOn(thermostat) { //if temperature is bellow emergency setpoint - if(emergencySetpoint && emergencySetpoint > getAverageTemperature()) { + if(emergencyHeatingSetpoint && emergencyHeatingSetpoint > getAverageTemperature()) { return true; } @@ -78,9 +81,37 @@ def shouldHeatingBeOn(thermostat) { return true; } +def shouldCoolingBeOn(thermostat) { + //if temperature is above emergency setpoint + if(emergencyCoolingSetpoint && emergencyCoolingSetpoint < getAverageTemperature()) { + return true; + } + + //if thermostat isnt set to heat + if(thermostat.currentValue('thermostatMode') != "cool") { + return false; + } + + //if any of the contact sensors are open + if(motion) { + for(m in motion) { + if(m.currentValue('contact') == "open") { + return false; + } + } + } + + //average temperature across all temperateure sensors is above set point + if (getAverageTemperature() - thermostat.currentValue("thermostatSetpoint") <= threshold) { + return false; + } + + return true; +} + def getHeatingStatus(thermostat) { //if temperature is bellow emergency setpoint - if(emergencySetpoint > getAverageTemperature()) { + if(emergencyHeatingSetpoint > getAverageTemperature()) { return 'heating'; } @@ -106,6 +137,34 @@ def getHeatingStatus(thermostat) { return 'heat'; } +def getCoolingStatus(thermostat) { + //if temperature is above emergency setpoint + if(emergencyCoolingSetpoint > getAverageTemperature()) { + return 'cooling'; + } + + //if thermostat isnt set to cool + if(thermostat.currentValue('thermostatMode') != "cool") { + return 'idle'; + } + + //if any of the contact sensors are open + if(motion) { + for(m in motion) { + if(m.currentValue('contact') == "open") { + return 'pending cool'; + } + } + } + + //average temperature across all temperateure sensors is above set point + if (getAverageTemperature() - thermostat.currentValue("thermostatSetpoint") <= threshold) { + return 'idle'; + } + + return 'cool'; +} + def getAverageTemperature() { def total = 0; def count = 0; @@ -122,20 +181,40 @@ def getAverageTemperature() { } def handleChange() { - def thermostat = getThermostat() + def thermostat = getThermostat() - //update device + //update device thermostat.setHeatingStatus(getHeatingStatus(thermostat)) + thermostat.setCoolingStatus(getCoolingStatus(thermostat)) thermostat.setVirtualTemperature(getAverageTemperature()) + + if(thermostat.currentValue('thermostatMode') == "off") { + heating_outlets.off() + cooling_outlets.off() + } + + if(thermostat.currentValue('thermostatMode') == "heat") { + //set heater outlet + if(shouldHeatingBeOn(thermostat)) { + heating_outlets.on() + cooling_outlets.off() + } else { + heating_outlets.off() + } + } - //set heater outlet - if(shouldHeatingBeOn(thermostat)) { - heating_outlets.on() - } else { - heating_outlets.off() + if(thermostat.currentValue('thermostatMode') == "cool") { + //set cooler outlet + if(shouldCoolingBeOn(thermostat)) { + cooling_outlets.on() + heating_outlets.off() + } else { + cooling_outlets.off() + } } } + def getThermostat() { def child = getChildDevices().find { d -> d.deviceNetworkId.startsWith("pmvt" + state.deviceID) From b7df74eaf1bd228d83537913631855dae27a5d30 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Sun, 24 May 2020 20:42:08 -0400 Subject: [PATCH 05/63] Added cool and auto mode to the display --- .../virtual-thermostat-device.groovy | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 7d8e597..997e43b 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -18,7 +18,9 @@ metadata { command "poll" command "offbtn" + command "coolbtn" command "heatbtn" + command "autobtn" command "levelUpDown" command "levelUp" command "levelDown" @@ -50,13 +52,17 @@ metadata { tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") { attributeState("idle", backgroundColor: "#44B621") attributeState("heating", backgroundColor: "#FFA81E") + attributeState("cooling", backgroundColor: "#1eceff") attributeState("off", backgroundColor: "#ddcccc") attributeState("pending heat", backgroundColor: "#e60000") + attributeState("pending cool", backgroundColor: "#0022e6") } tileAttribute("device.thermostatMode", key: "THERMOSTAT_MODE") { attributeState("off", label:'Off') attributeState("heat", label:'Heat') + attributeState("cool", label:'Cool') + attributeState("auto", label:'Auto') } tileAttribute("device.thermostatSetpoint", key: "HEATING_SETPOINT") { @@ -71,7 +77,9 @@ metadata { standardTile("thermostatMode", "device.thermostatMode", width:2, height:2, decoration: "flat") { state("off", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/off_icon.png") - state("heat", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_icon.png") + state("heat", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_heat.png") + state("cool", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_cool.png") + state("auto", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_auto.png") state("Updating", label:"", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/cmd_working.png") } @@ -80,10 +88,20 @@ metadata { } standardTile("heatBtn", "device.canHeat", width:1, height:1, decoration: "flat") { - state("Heat", action: "heatbtn", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_icon.png") + state("Heat", action: "heatbtn", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_heat.png") state "false", label: '' } - + + standardTile("coolBtn", "device.canCool", width:1, height:1, decoration: "flat") { + state("Cool", action: "coolbtn", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_cool.png") + state "false", label: '' + } + + standardTile("autoBtn", "device.canAuto", width:1, height:1, decoration: "flat") { + state("Auto", action: "autobtn", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_auto.png") + state "false", label: '' + } + standardTile("refresh", "device.refresh", width:2, height:2, decoration: "flat") { state "Refresh", action:"refresh.refresh", icon:"st.secondary.refresh" } @@ -113,10 +131,12 @@ metadata { details( ["temperature", "thermostatMode", "heatingSetpointDown", "heatingSetpoint", "heatingSetpointUp", - "heatSliderControl", "offBtn", "heatBtn", "refresh"] ) + "heatSliderControl", "offBtn", "coolBtn", "heatBtn", "autoBtn", "refresh"] ) } } +def thermostatModes = ['cool', 'heat', 'auto', 'off'] + def shouldReportInCentigrade() { try { def ts = getTemperatureScale(); @@ -144,7 +164,7 @@ private initialize() { setVirtualTemperature(defaultTemp()) setHeatingStatus("off") setThermostatMode("off") - sendEvent(name:"supportedThermostatModes", value: ['heat', 'off'], displayed: false) + sendEvent(name:"supportedThermostatModes", value: thermostatModes, displayed: false) sendEvent(name:"supportedThermostatFanModes", values: [], displayed: false) state.tempScale = "C" @@ -228,7 +248,7 @@ def parse(data) { def refresh() { log.trace "Executing refresh" - sendEvent(name: "supportedThermostatModes", value: ['heat', 'off'], displayed: false) + sendEvent(name: "supportedThermostatModes", value: thermostatModes, displayed: false) sendEvent(name: "supportedThermostatFanModes", values: [], displayed: false) } @@ -255,10 +275,18 @@ def offbtn() { setThermostatMode("off") } +def coolbtn() { + setThermostatMode("cool") +} + def heatbtn() { setThermostatMode("heat") } +def autobtn() { + setThermostatMode("auto") +} + def setThermostatMode(mode) { if(device.currentValue("thermostatMode") != mode) { sendEvent(name: "thermostatMode", value: mode) @@ -269,9 +297,12 @@ def levelUpDown() { } def changeMode() { - def val = device.currentValue("thermostatMode") == "off" ? "heat" : "off" - setThermostatMode(val) - return val + def currentMode = device.currentValue("thermostatMode") + def currentModeIdx = thermostatModes.indexOf(currentMode) + def newModeIdx = (currentModeIdx + 1) % thermostatModes.size() + def newMode = thermostatModes[newModeIdx] + setThermostatMode(newMode) + return newMode } def setVirtualTemperature(temp) { From 95aae4e07d1292c8f19fad509d3daa6d8a1ee5d8 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Sun, 24 May 2020 21:11:32 -0400 Subject: [PATCH 06/63] Added auto mode to the app --- .../virtual-thermostat-with-device.groovy | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index b605201..cc03b44 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -188,29 +188,40 @@ def handleChange() { thermostat.setCoolingStatus(getCoolingStatus(thermostat)) thermostat.setVirtualTemperature(getAverageTemperature()) - if(thermostat.currentValue('thermostatMode') == "off") { - heating_outlets.off() - cooling_outlets.off() - } - - if(thermostat.currentValue('thermostatMode') == "heat") { - //set heater outlet - if(shouldHeatingBeOn(thermostat)) { - heating_outlets.on() + switch (thermostat.currentValue('thermostatMode')){ + case "heat": cooling_outlets.off() - } else { + if(shouldHeatingBeOn(thermostat)) { + heating_outlets.on() + } else { + heating_outlets.off() + } + break + case "cool": heating_outlets.off() - } - } - - if(thermostat.currentValue('thermostatMode') == "cool") { - //set cooler outlet - if(shouldCoolingBeOn(thermostat)) { - cooling_outlets.on() + if(shouldCoolingBeOn(thermostat)) { + cooling_outlets.on() + } else { + cooling_outlets.off() + } + break + case "auto": + if(shouldCoolingBeOn(thermostat)) { + cooling_outlets.on() + heating_outlets.off() + } else if(shouldHeatingBeOn(thermostat)) { + heating_outlets.on() + cooling_outlets.off() + } else { + heating_outlets.off() + cooling_outlets.off() + } + break + case "off": + default: heating_outlets.off() - } else { cooling_outlets.off() - } + break } } From b0b33c6c60acfecd314fa60c182062916149ef8b Mon Sep 17 00:00:00 2001 From: steffennissen Date: Sun, 24 May 2020 21:24:51 -0400 Subject: [PATCH 07/63] Refactoring and enhancements to cool/auto mode --- .../virtual-thermostat-with-device.groovy | 50 ++++++++++++------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index cc03b44..6b22209 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -19,7 +19,7 @@ preferences { section("Select the cooling outlet(s)... "){ input "cooling_outlets", "capability.switch", title: "Cooling Outlets", multiple: true } - section("Only heat when contact(s) arent open (optional, leave blank to not require contact sensor)..."){ + section("Only heat/cool when contact(s) arent open (optional, leave blank to not require contact sensor)..."){ input "motion", "capability.contactSensor", title: "Contact", required: false, multiple: true } section("Never go below this temperature: (optional)"){ @@ -28,7 +28,7 @@ preferences { section("Never go above this temperature: (optional)"){ input "emergencyCoolingSetpoint", "decimal", title: "Emergency Max Temp", required: false } - section("Temperature Threshold (Don't allow heating to go above or bellow this amount from set temperature)") { + section("Temperature Threshold (Don't allow heating/cooling to go above or bellow this amount from set temperature)") { input "threshold", "decimal", title: "Temperature Threshold", required: false, defaultValue: 1.0 } } @@ -60,7 +60,7 @@ def shouldHeatingBeOn(thermostat) { } //if thermostat isnt set to heat - if(thermostat.currentValue('thermostatMode') != "heat") { + if(thermostat.currentValue('thermostatMode') != "heat" && thermostat.currentValue('thermostatMode') != "auto") { return false; } @@ -87,8 +87,8 @@ def shouldCoolingBeOn(thermostat) { return true; } - //if thermostat isnt set to heat - if(thermostat.currentValue('thermostatMode') != "cool") { + //if thermostat isnt set to cool + if(thermostat.currentValue('thermostatMode') != "cool" && thermostat.currentValue('thermostatMode') != "auto") { return false; } @@ -180,6 +180,24 @@ def getAverageTemperature() { return total / count } +def cool() { + log.debug "cooling outlets on" + cooling_outlets.on() + heating_outlets.off() +} + +def heat() { + log.debug "heating outlets on" + cooling_outlets.off() + heating_outlets.on() +} + +def off() { + log.debug "all outlets off" + cooling_outlets.off() + heating_outlets.off() +} + def handleChange() { def thermostat = getThermostat() @@ -190,37 +208,31 @@ def handleChange() { switch (thermostat.currentValue('thermostatMode')){ case "heat": - cooling_outlets.off() if(shouldHeatingBeOn(thermostat)) { - heating_outlets.on() + heat() } else { - heating_outlets.off() + off() } break case "cool": - heating_outlets.off() if(shouldCoolingBeOn(thermostat)) { - cooling_outlets.on() + cool() } else { - cooling_outlets.off() + off() } break case "auto": if(shouldCoolingBeOn(thermostat)) { - cooling_outlets.on() - heating_outlets.off() + cool() } else if(shouldHeatingBeOn(thermostat)) { - heating_outlets.on() - cooling_outlets.off() + heat() } else { - heating_outlets.off() - cooling_outlets.off() + off() } break case "off": default: - heating_outlets.off() - cooling_outlets.off() + off() break } } From 6ab24ab006bb206c5675294acdee812bfc47e99d Mon Sep 17 00:00:00 2001 From: steffennissen Date: Sun, 24 May 2020 22:08:11 -0400 Subject: [PATCH 08/63] minor changes --- .../virtual-thermostat-device.groovy | 1 + .../virtual-thermostat-with-device.groovy | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 997e43b..acbbfd6 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -288,6 +288,7 @@ def autobtn() { } def setThermostatMode(mode) { + log.trace "setting thermostat mode $mode" if(device.currentValue("thermostatMode") != mode) { sendEvent(name: "thermostatMode", value: mode) } diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 6b22209..053aa8a 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -278,13 +278,11 @@ def updated() thermostat.setVirtualTemperature(getAverageTemperature()) } -def temperatureHandler(evt) -{ +def temperatureHandler(evt) { handleChange() } -def motionHandler(evt) -{ +def motionHandler(evt) { handleChange() } From 9235854f9189bc922e65f451198463e984300ea5 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 24 May 2020 22:38:32 -0400 Subject: [PATCH 09/63] fixed a few bugs and rearranged the UI --- .../virtual-thermostat-device.groovy | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index acbbfd6..9b05867 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -59,10 +59,10 @@ metadata { } tileAttribute("device.thermostatMode", key: "THERMOSTAT_MODE") { - attributeState("off", label:'Off') - attributeState("heat", label:'Heat') attributeState("cool", label:'Cool') + attributeState("heat", label:'Heat') attributeState("auto", label:'Auto') + attributeState("off", label:'Off') } tileAttribute("device.thermostatSetpoint", key: "HEATING_SETPOINT") { @@ -80,7 +80,7 @@ metadata { state("heat", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_heat.png") state("cool", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_cool.png") state("auto", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_auto.png") - state("Updating", label:"", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/cmd_working.png") + state("updating", label:"", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/cmd_working.png") } standardTile("offBtn", "device.off", width:1, height:1, decoration: "flat") { @@ -129,13 +129,16 @@ metadata { main("temp2") - details( ["temperature", "thermostatMode", + details( ["temperature", "thermostatMode", + "coolBtn", "heatBtn", "autoBtn", "offBtn", "heatingSetpointDown", "heatingSetpoint", "heatingSetpointUp", - "heatSliderControl", "offBtn", "coolBtn", "heatBtn", "autoBtn", "refresh"] ) + "heatSliderControl", "refresh"] ) } } -def thermostatModes = ['cool', 'heat', 'auto', 'off'] +def thermostatModes() { + ['cool', 'heat', 'auto', 'off'] +} def shouldReportInCentigrade() { try { @@ -164,7 +167,7 @@ private initialize() { setVirtualTemperature(defaultTemp()) setHeatingStatus("off") setThermostatMode("off") - sendEvent(name:"supportedThermostatModes", value: thermostatModes, displayed: false) + sendEvent(name:"supportedThermostatModes", value: thermostatModes(), displayed: false) sendEvent(name:"supportedThermostatFanModes", values: [], displayed: false) state.tempScale = "C" @@ -248,7 +251,7 @@ def parse(data) { def refresh() { log.trace "Executing refresh" - sendEvent(name: "supportedThermostatModes", value: thermostatModes, displayed: false) + sendEvent(name: "supportedThermostatModes", value: thermostatModes(), displayed: false) sendEvent(name: "supportedThermostatFanModes", values: [], displayed: false) } @@ -298,10 +301,9 @@ def levelUpDown() { } def changeMode() { - def currentMode = device.currentValue("thermostatMode") - def currentModeIdx = thermostatModes.indexOf(currentMode) - def newModeIdx = (currentModeIdx + 1) % thermostatModes.size() - def newMode = thermostatModes[newModeIdx] + def modes = thermostatModes() + def newModeIdx = (modes.indexOf(device.currentValue("thermostatMode")) + 1) % modes.size() + def newMode = modes[newModeIdx] setThermostatMode(newMode) return newMode } From 68b6936b3310ac19a193e313ec93cd39ad647f13 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 24 May 2020 23:02:02 -0400 Subject: [PATCH 10/63] remove unneeded elements --- .../virtual-thermostat-device.groovy | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 9b05867..bc50e14 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -131,8 +131,9 @@ metadata { details( ["temperature", "thermostatMode", "coolBtn", "heatBtn", "autoBtn", "offBtn", - "heatingSetpointDown", "heatingSetpoint", "heatingSetpointUp", - "heatSliderControl", "refresh"] ) + //"heatingSetpointDown", "heatingSetpoint", "heatingSetpointUp", + //"heatSliderControl", "refresh" + ] ) } } From 56136adca0fc7ae6a7d5139b6904feb02bef52f2 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 08:11:21 -0400 Subject: [PATCH 11/63] Did a manual merge of changes from https://github.com/racarmichael/SmartThings-VirtualThermostat-WithDTH, let's see how it works out --- .../virtual-thermostat-device.groovy | 72 +++++++++++++++++-- .../virtual-thermostat-with-device.groovy | 12 ++-- 2 files changed, 74 insertions(+), 10 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index bc50e14..7446b3b 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -10,6 +10,7 @@ metadata { capability "Thermostat" capability "Thermostat Mode" capability "Thermostat Heating Setpoint" + capability "Thermostat Cooling Setpoint" capability "Thermostat Operating State" capability "Configuration" capability "Refresh" @@ -26,6 +27,8 @@ metadata { command "levelDown" command "heatingSetpointUp" command "heatingSetpointDown" + command "coolingSetpointUp" + command "coolingSetpointDown" command "changeMode" command "setVirtualTemperature", ["number"] command "setHeatingStatus", ["string"] @@ -68,6 +71,10 @@ metadata { tileAttribute("device.thermostatSetpoint", key: "HEATING_SETPOINT") { attributeState("default", label:'${currentValue}') } + + tileAttribute("device.thermostatSetpoint", key: "COOLING_SETPOINT") { + attributeState("default", label:'${currentValue}') + } } valueTile("temp2", "device.temperature", width: 2, height: 2, decoration: "flat") { @@ -127,12 +134,35 @@ metadata { state "", label: '' } + valueTile("coolingSetpoint", "device.thermostatSetpoint", width: 1, height: 1) { + state("coolingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", + backgroundColors: [ [value: 0, color: "#FFFFFF"], [value: 7, color: "#0022FF"], [value: 15, color: "#0022FF"] ]) + state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") + } + + standardTile("coolingSetpointUp", "device.thermostatSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + state "default", label: '', action:"coolingSetpointUp", icon:"https://raw.githubusercontent.com/racarmichael/SmartThings-VirtualThermostat-WithDTH/master/images/cool_arrow_up.png" + state "", label: '' + } + + standardTile("coolingSetpointDown", "device.thermostatSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + state "default", label:'', action:"coolingSetpointDown", icon:"https://raw.githubusercontent.com/racarmichael/SmartThings-VirtualThermostat-WithDTH/master/images/cool_arrow_down.png" + state "", label: '' + } + + controlTile("coolSliderControl", "device.thermostatSetpoint", "slider", height: 1, width: 4, range: getRange(), inactiveLabel: false) { + state "default", action:"setCoolingSetpoint", backgroundColor:"#0022ff" + state "", label: '' + } + main("temp2") details( ["temperature", "thermostatMode", - "coolBtn", "heatBtn", "autoBtn", "offBtn", - //"heatingSetpointDown", "heatingSetpoint", "heatingSetpointUp", - //"heatSliderControl", "refresh" + "coolBtn", "heatBtn", "autoBtn", "offBtn", + "heatingSetpointDown", "heatingSetpoint", "heatingSetpointUp", + "heatSliderControl", "refresh", + "coolingSetpointDown", "coolingSetpoint", "coolingSetpointUp","coolBtn", + "coolSliderControl" ] ) } } @@ -165,8 +195,10 @@ private initialize() { log.trace "Executing 'initialize'" setHeatingSetpoint(defaultTemp()) + setCoolingSetpoint(defaultTemp()) setVirtualTemperature(defaultTemp()) setHeatingStatus("off") + setCoolingStatus("off") setThermostatMode("off") sendEvent(name:"supportedThermostatModes", value: thermostatModes(), displayed: false) sendEvent(name:"supportedThermostatFanModes", values: [], displayed: false) @@ -234,6 +266,28 @@ def heatingSetpointDown() { setHeatingSetpoint(hsp - 1.0) } +def setCoolingSetpoint(temp) { + def ctsp = device.currentValue("thermostatSetpoint"); + def ccsp = device.currentValue("coolingSetpoint"); + + if(ctsp != temp || ccsp != temp) { + sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString(), displayed: false) + sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) + } +} + +def coolingSetpointUp() { + def csp = device.currentValue("thermostatSetpoint") + if(csp + 1.0 > highRange()) return; + setCoolingSetpoint(csp + 1.0) +} + +def coolingSetpointDown() { + def csp = device.currentValue("thermostatSetpoint") + if(csp - 1.0 < lowRange()) return; + setCoolingSetpoint(csp - 1.0) +} + def levelUp() { def hsp = device.currentValue("thermostatSetpoint") if(hsp + 1.0 > highRange()) return; @@ -272,6 +326,10 @@ def getHeatingSetpoint() { return device.currentValue("heatingSetpoint") } +def getCoolingSetpoint() { + return device.currentValue("coolingSetpoint") +} + def poll() { } @@ -317,4 +375,10 @@ def setHeatingStatus(string) { if(device.currentValue("thermostatOperatingState") != string) { sendEvent(name:"thermostatOperatingState", value: string) } -} \ No newline at end of file +} + +def setCoolingStatus(string) { + if(device.currentValue("thermostatOperatingState") != string) { + sendEvent(name:"thermostatOperatingState", value: string) + } +} diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 053aa8a..9f804b2 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -54,7 +54,7 @@ def createDevice() { } def shouldHeatingBeOn(thermostat) { - //if temperature is bellow emergency setpoint + //if temperature is below emergency setpoint if(emergencyHeatingSetpoint && emergencyHeatingSetpoint > getAverageTemperature()) { return true; } @@ -73,7 +73,7 @@ def shouldHeatingBeOn(thermostat) { } } - //average temperature across all temperateure sensors is above set point + //average temperature across all temperature sensors is above set point if (thermostat.currentValue("heatingSetpoint") - getAverageTemperature() <= threshold) { return false; } @@ -101,8 +101,8 @@ def shouldCoolingBeOn(thermostat) { } } - //average temperature across all temperateure sensors is above set point - if (getAverageTemperature() - thermostat.currentValue("thermostatSetpoint") <= threshold) { + //average temperature across all temperature sensors is below set point + if (getAverageTemperature() - thermostat.currentValue("coolingSetpoint") <= threshold) { return false; } @@ -157,7 +157,7 @@ def getCoolingStatus(thermostat) { } } - //average temperature across all temperateure sensors is above set point + //average temperature across all temperature sensors is above set point if (getAverageTemperature() - thermostat.currentValue("thermostatSetpoint") <= threshold) { return 'idle'; } @@ -261,7 +261,7 @@ def updated() thermostat = createDevice() } - //subscribe to temperatuire changes + //subscribe to temperature changes subscribe(sensors, "temperature", temperatureHandler) //subscribe to contact sensor changes From fe7269891ae11b37cd4a218d32e8409ac2263fa7 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 08:51:20 -0400 Subject: [PATCH 12/63] heating status and cooling status doesn't really work together, this won't fix it, but will help me debug a bit --- .../virtual-thermostat-with-device.groovy | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 9f804b2..196ff11 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -202,8 +202,6 @@ def handleChange() { def thermostat = getThermostat() //update device - thermostat.setHeatingStatus(getHeatingStatus(thermostat)) - thermostat.setCoolingStatus(getCoolingStatus(thermostat)) thermostat.setVirtualTemperature(getAverageTemperature()) switch (thermostat.currentValue('thermostatMode')){ @@ -213,6 +211,7 @@ def handleChange() { } else { off() } + thermostat.setHeatingStatus(getHeatingStatus(thermostat)) break case "cool": if(shouldCoolingBeOn(thermostat)) { @@ -220,6 +219,7 @@ def handleChange() { } else { off() } + thermostat.setCoolingStatus(getCoolingStatus(thermostat)) break case "auto": if(shouldCoolingBeOn(thermostat)) { @@ -229,6 +229,8 @@ def handleChange() { } else { off() } + thermostat.setHeatingStatus(getHeatingStatus(thermostat)) + thermostat.setCoolingStatus(getCoolingStatus(thermostat)) break case "off": default: From 25b6455d8d5af7508eafb671df20ac731fdc11a1 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 08:51:51 -0400 Subject: [PATCH 13/63] heating status and cooling status doesn't really work together, this won't fix it, but will help me debug a bit --- .../virtual-thermostat-with-device.groovy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 196ff11..628c7bf 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -235,6 +235,8 @@ def handleChange() { case "off": default: off() + thermostat.setHeatingStatus(getHeatingStatus(thermostat)) + thermostat.setCoolingStatus(getCoolingStatus(thermostat)) break } } From 6ccfa2faa745de1e490d51abff4d15150b7ecf4a Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 09:45:28 -0400 Subject: [PATCH 14/63] more fixes to the thermostatOperatingState --- .../virtual-thermostat-device.groovy | 22 +++++++------------ .../virtual-thermostat-with-device.groovy | 9 +++----- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 7446b3b..bc6ca64 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -53,12 +53,13 @@ metadata { } tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") { + // valid values are thermostatOperatingState — ["heating", "idle", "pending cool", "vent economizer", "cooling", "pending heat", "fan only"] + // https://graph.api.smartthings.com/ide/doc/capabilities attributeState("idle", backgroundColor: "#44B621") - attributeState("heating", backgroundColor: "#FFA81E") - attributeState("cooling", backgroundColor: "#1eceff") - attributeState("off", backgroundColor: "#ddcccc") - attributeState("pending heat", backgroundColor: "#e60000") - attributeState("pending cool", backgroundColor: "#0022e6") + attributeState("heating", backgroundColor: "#d4852a") + attributeState("cooling", backgroundColor: "#2a8ad4") + attributeState("pending heat", backgroundColor: "#ffd19c") + attributeState("pending cool", backgroundColor: "#85b3d6") } tileAttribute("device.thermostatMode", key: "THERMOSTAT_MODE") { @@ -197,8 +198,7 @@ private initialize() { setHeatingSetpoint(defaultTemp()) setCoolingSetpoint(defaultTemp()) setVirtualTemperature(defaultTemp()) - setHeatingStatus("off") - setCoolingStatus("off") + setThermostatOperatingState("idle") setThermostatMode("off") sendEvent(name:"supportedThermostatModes", value: thermostatModes(), displayed: false) sendEvent(name:"supportedThermostatFanModes", values: [], displayed: false) @@ -371,14 +371,8 @@ def setVirtualTemperature(temp) { sendEvent(name:"temperature", value: temp, unit: unitString(), displayed: true) } -def setHeatingStatus(string) { +def setThermostatOperatingState(string) { if(device.currentValue("thermostatOperatingState") != string) { sendEvent(name:"thermostatOperatingState", value: string) } } - -def setCoolingStatus(string) { - if(device.currentValue("thermostatOperatingState") != string) { - sendEvent(name:"thermostatOperatingState", value: string) - } -} diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 628c7bf..2c80b4e 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -184,18 +184,21 @@ def cool() { log.debug "cooling outlets on" cooling_outlets.on() heating_outlets.off() + thermostat.setThermostatOperatingState('cool') } def heat() { log.debug "heating outlets on" cooling_outlets.off() heating_outlets.on() + thermostat.setThermostatOperatingState('heat') } def off() { log.debug "all outlets off" cooling_outlets.off() heating_outlets.off() + thermostat.setThermostatOperatingState('idle') } def handleChange() { @@ -211,7 +214,6 @@ def handleChange() { } else { off() } - thermostat.setHeatingStatus(getHeatingStatus(thermostat)) break case "cool": if(shouldCoolingBeOn(thermostat)) { @@ -219,7 +221,6 @@ def handleChange() { } else { off() } - thermostat.setCoolingStatus(getCoolingStatus(thermostat)) break case "auto": if(shouldCoolingBeOn(thermostat)) { @@ -229,14 +230,10 @@ def handleChange() { } else { off() } - thermostat.setHeatingStatus(getHeatingStatus(thermostat)) - thermostat.setCoolingStatus(getCoolingStatus(thermostat)) break case "off": default: off() - thermostat.setHeatingStatus(getHeatingStatus(thermostat)) - thermostat.setCoolingStatus(getCoolingStatus(thermostat)) break } } From b3e0ee7a385f6a454621849c66003034891bb1d7 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 12:23:28 -0400 Subject: [PATCH 15/63] better support for cooling/heating set point --- .../virtual-thermostat-device.groovy | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index bc6ca64..cda0ab7 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -47,12 +47,11 @@ metadata { } tileAttribute("device.thermostatSetpoint", key: "VALUE_CONTROL") { - attributeState("default", action: "levelUpDown") attributeState("VALUE_UP", action: "levelUp") attributeState("VALUE_DOWN", action: "levelDown") } - tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") { + tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") {iuj // valid values are thermostatOperatingState — ["heating", "idle", "pending cool", "vent economizer", "cooling", "pending heat", "fan only"] // https://graph.api.smartthings.com/ide/doc/capabilities attributeState("idle", backgroundColor: "#44B621") @@ -69,11 +68,11 @@ metadata { attributeState("off", label:'Off') } - tileAttribute("device.thermostatSetpoint", key: "HEATING_SETPOINT") { + tileAttribute("device.heatingSetpoint", key: "HEATING_SETPOINT") { attributeState("default", label:'${currentValue}') } - tileAttribute("device.thermostatSetpoint", key: "COOLING_SETPOINT") { + tileAttribute("device.coolingSetpoint", key: "COOLING_SETPOINT") { attributeState("default", label:'${currentValue}') } } @@ -251,6 +250,7 @@ def setHeatingSetpoint(temp) { if(ctsp != temp || chsp != temp) { sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString(), displayed: false) sendEvent(name:"heatingSetpoint", value: temp, unit: unitString()) + sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) } } @@ -273,6 +273,7 @@ def setCoolingSetpoint(temp) { if(ctsp != temp || ccsp != temp) { sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString(), displayed: false) sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) + sendEvent(name:"heatingSetpoint", value: temp, unit: unitString()) } } From 782f3f95bfe330bde590f514b896e665c7354f54 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 12:35:59 -0400 Subject: [PATCH 16/63] layout changes --- .../virtual-thermostat-device.groovy | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index cda0ab7..4a825f5 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -82,7 +82,7 @@ metadata { backgroundColors: getTempColors(), canChangeIcon: true) } - standardTile("thermostatMode", "device.thermostatMode", width:2, height:2, decoration: "flat") { + standardTile("thermostatMode", "device.thermostatMode", width:2, height:1, decoration: "flat") { state("off", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/off_icon.png") state("heat", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_heat.png") state("cool", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_cool.png") @@ -160,9 +160,9 @@ metadata { details( ["temperature", "thermostatMode", "coolBtn", "heatBtn", "autoBtn", "offBtn", "heatingSetpointDown", "heatingSetpoint", "heatingSetpointUp", - "heatSliderControl", "refresh", - "coolingSetpointDown", "coolingSetpoint", "coolingSetpointUp","coolBtn", - "coolSliderControl" + //"heatSliderControl", "refresh", + "coolingSetpointDown", "coolingSetpoint", "coolingSetpointUp", + //"coolSliderControl" ] ) } } From b226fc71ee332bde12f6a111e093ad420263eb17 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 12:36:42 -0400 Subject: [PATCH 17/63] fix to state + set points --- .../virtual-thermostat-with-device.groovy | 63 ++----------------- 1 file changed, 5 insertions(+), 58 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 2c80b4e..2cbad36 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -109,62 +109,6 @@ def shouldCoolingBeOn(thermostat) { return true; } -def getHeatingStatus(thermostat) { - //if temperature is bellow emergency setpoint - if(emergencyHeatingSetpoint > getAverageTemperature()) { - return 'heating'; - } - - //if thermostat isnt set to heat - if(thermostat.currentValue('thermostatMode') != "heat") { - return 'idle'; - } - - //if any of the contact sensors are open - if(motion) { - for(m in motion) { - if(m.currentValue('contact') == "open") { - return 'pending heat'; - } - } - } - - //average temperature across all temperateure sensors is above set point - if (thermostat.currentValue("thermostatSetpoint") - getAverageTemperature() <= threshold) { - return 'idle'; - } - - return 'heat'; -} - -def getCoolingStatus(thermostat) { - //if temperature is above emergency setpoint - if(emergencyCoolingSetpoint > getAverageTemperature()) { - return 'cooling'; - } - - //if thermostat isnt set to cool - if(thermostat.currentValue('thermostatMode') != "cool") { - return 'idle'; - } - - //if any of the contact sensors are open - if(motion) { - for(m in motion) { - if(m.currentValue('contact') == "open") { - return 'pending cool'; - } - } - } - - //average temperature across all temperature sensors is above set point - if (getAverageTemperature() - thermostat.currentValue("thermostatSetpoint") <= threshold) { - return 'idle'; - } - - return 'cool'; -} - def getAverageTemperature() { def total = 0; def count = 0; @@ -184,14 +128,14 @@ def cool() { log.debug "cooling outlets on" cooling_outlets.on() heating_outlets.off() - thermostat.setThermostatOperatingState('cool') + thermostat.setThermostatOperatingState('cooling') } def heat() { log.debug "heating outlets on" cooling_outlets.off() heating_outlets.on() - thermostat.setThermostatOperatingState('heat') + thermostat.setThermostatOperatingState('heating') } def off() { @@ -272,6 +216,9 @@ def updated() //subscribe to virtual device changes subscribe(thermostat, "thermostatSetpoint", thermostatTemperatureHandler) + subscribe(thermostat, "heatingSetpoint", thermostatTemperatureHandler) + subscribe(thermostat, "coolingSetpoint", thermostatTemperatureHandler) + subscribe(thermostat, "thermostatMode", thermostatModeHandler) //reset some values From 23419777ce031483342a92d8b721ffecef38dede Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 15:27:18 -0400 Subject: [PATCH 18/63] added images --- images/auto_off.png | Bin 0 -> 96590 bytes images/auto_on.png | Bin 0 -> 123680 bytes images/cool_off.png | Bin 0 -> 76208 bytes images/cool_on.png | Bin 0 -> 73372 bytes images/heat_off.png | Bin 0 -> 49966 bytes images/heat_on.png | Bin 0 -> 35376 bytes images/unit_off.png | Bin 0 -> 30299 bytes images/unit_on.png | Bin 0 -> 31813 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/auto_off.png create mode 100644 images/auto_on.png create mode 100644 images/cool_off.png create mode 100644 images/cool_on.png create mode 100644 images/heat_off.png create mode 100644 images/heat_on.png create mode 100644 images/unit_off.png create mode 100644 images/unit_on.png diff --git a/images/auto_off.png b/images/auto_off.png new file mode 100644 index 0000000000000000000000000000000000000000..4583819626b51f73b7ffb47733679a282276af17 GIT binary patch literal 96590 zcmeFZby!=?);Em16{i#_6e$+my+{kiODRQy6evZ4I|)up3$$p9OM!CZ?gXdB-66OX zcSuO`ruRALdCzyQ=l$pV`y|)So;|bH%$MMnh-t16!K&Ke){%x?SCPzMVufEx=dBmxTyj>!ty#lrFy z#=`n-g@q;i6$^{OEu+~$9#c?n_v)Fwjt&+dCQXDzh)s=!i%DT)zF64zvHsMCNnzPw zGyhNe9X9VjX>c%wB3PJTtb3Tt16%a(G%Y3_5$%YDhq?dZ#kBVK=PBm*&-34ReMdh# zXBTTPkO#Y%khqX27M7^6h@`Brn5>8}yNJZ!2?@-5=HUFR9-NRI-2a>YQ{#aDj4b9x z?Do{u6AO!!=Ff$Vm6pMXg@xPW_~Mno*`9J0U+8w?AB1@_w?Iq>G)G zHM^gSv#Y19p906<6tbA~pKJgJ``;v9P6`~aboAMufIRHjB{01d=1?SIXJ?o9cw;YX zsHX8xcFdCk$6GHiH(3C{*Vk9bS4;@x;Q$bkk&yuiivmPN1u+zYp8l?0)_#Jno}B-v z2`G2xuWcxqe{QorO zXYKY6roV;wk9U)QV=L?FZS&5~*6ZJLF=cAA@Ne1jfd7?R{?A*;8rpe+oW1{u z(b(0|OHow*@0a_}?Efp(e{kt}IATO+{fA9ahPe3ki9(JCdf9NItN&oM8 z|3?2uNV0#cxv82XW`O?YkrWq}2mG%k|H=6T-`7&ztQ}YTORO7&;L#D|6x>r=VGi%kp#o|FAG&9sh#Ij!@^R=dZwoG!VmkPjd-cZ z#1w`stlni8)EjHM^*2`^rb2RtuIYUl7APyuAP1divb0jrOxoh&_A{L zQJ?*?#P|gVAGyK9Fpl(R5uZORM3g2DDUP0jp$_(9W|> zBQj8QaJlEQLyM+{O_(wj5snHw5nd=e72baz{wst3>cM|);lK02f9J&it_%NN4*%;C z{Qq=|+-|5CgJ)Y-B)AdRP&5+eK5cB$rj9;1IQZfE{9g{&R#ZoiM~VJ#8oW3zJgr~M zEG(HSw}_c!eiM|`I(S_2?h1si*IK)%n#!7z_{XB8ONO^l+WTRAs#cUpKoDmHo_iB( z$DOsq+wuVzl#!Xag+SeH zIgUk6%?d$`^CXSwAG+Spi(`NlKdvM+tr$Rbkp%q$L|+2Y5FT!Bu(iFtJ)WF|fysBD9e@ja{>*%Mg38876 zOiWB%RJ_QgENi@&(Do#H!`KlK{`WLvWy(&4?`C>OUffd^f~jEUGVh~MfE1x3*a~rV zD8?HsCV-CfMPU0@l2f(0_5O0m4)&q#uw9GSVfniP9(EiV{2(0Ep5s|4XGlUcSn79{ zQfe?-DJ2+I<+50B+T9ahjORi0hSvAp;X+-}y@sRK^O3-zH_rKqlHC7X?>jt{*-2JC zZWs)s?czK1kW+dR>T$SiXp*ht{%^NWW}RNIS5t@>~8sr;*f}?LEp?D2T}0ExvHnG{!PO+3QpJ zu4Omv6{b_DzvAYQ7JZ_d)O9FCsRZB6XA&UEY*exO#7aK1D;~%h&oXaDyP`6G z)>fP{ZO0ahvH+|}iVZt5KC%CX41}dgIIR?(Y5G;T&`dPl4TgveuAVZzg`^;`Dqyva zlidO=4TE{{FF6feG3G?dF$QnUcHVq}X4G2li6Uq2GdSowjrS}@d?jqD?F|Jhlxz`% zd=oUQf1d3*A~Sh$T^!8@_Jdz7g0lUQ`@rKFs$cm;^l#l$1#tq&?FZ`%i(gSmhY?j? z>^rO!8lWtDCyvvZXkQR4Rv!mV>tpwf*s!TQ3?j30FRH;AvuFQGS=oahn*T9GyDgs$ zxvSa#^)lTGcuWF62Tn=D_oW9cD4%imv7d2zNcd4jz<8J{FulkL6jj)#J>9FGQUO$xsDdrh5}Zn zK8Az2uak6P zCjJ7g%6H_U#vZMlvH?wyWiiGxr>@2sB5BpxiZ94<#Pd%VG+Cu&-l!c5WXQ=5T?})| zvYz;3+|mO?IUTVnXPU+@OYTHAuG=nV2aS*ZQqnF8Ei~=kY9MY&)ObM#4QGHJ_bSAG zL)ZQMM3)VpDl!**8?E*|mKbO79>%H$Pl3-ex79;NOUm9j`gFH`(5BrR3NdMKy>2^J zVCFg+9w9iWunq|cvZwJ`+#XK9eok`$2p_`_Wp{gZPyfR?eth_YjghcFl#|J4igM_hDn`)Yvq0qhHvHI2kRHu~d z{*)mGK~tAhvYrkQEEkBAcnpydD$R6Xqf;8huz9`1ZD`?kaPY=YrC1k|RjyR?YE7e3 zGWS2@^Nwf^`Z(yKj~R5K-2cuVOK*Fi5E27(uk?0C)BnBHfTcJL7y+ z=+>&SLzch&A%3Z|dw55+3T8g9zU4RkVvR@Dn19sosX?KFq@XR8dOm3Q=m-U*Dn)hGc{3;9< zmBGTnhi(TS2WDpn2Udq;hXqxL#^^49t4{@tTGkMzL!v_~Zr$W{$C?vgF@9kjHO|Ga z&I2}*c`f*rY*Muer(Sy^U!9^W`jTrzart=m<-GWCkYnE<&}4Ev0PBr}Pl89^GS6=B z7-k7+dWc!>n~ECM>CvJ`nhSqqKTk2}xsP8JG#4Bh z9##*cJ+OnLVkWspou#yIN6Xu;7RXtxehFBy<^HKpv*VCsX-#UR6s83)H<8b5*JrEu zNq%{RnreKbu@kp(CL|*nCI6NG=~cAp+pvy%s;iY`-!*?6J>I@i%Na)HO6yemZnJSJ z^HB91z6Rrq)fXvKxBPZ4^GK>2m2@7F8n%3%TTx~3Lw!uk8J;6_L_;QCH4vQ;zMQI}+&7u+07b$y z@cFRRXqNAa{|MHR^4`)wduDJoBmJ&KP9yCnbS4zF4@H?LO))Kq-z5B0{1){G+vIxE zfrPY9#d`QTlbMP>gIz78E~rin6oUgRBh!GU`t*te{CS$1ZAK?nx77_qCSt5!? zhq8~^qlY@o&eJPhzh7x3bL)S*HTqd@4;a0j5ZGdsqjc$*2(@PERWul|Xi70DRSN?N2gSEzMh1tmgli$vl#a$2IcZv(#@j73x3QXXcfLR?X7*LfSjU zx_zpOLM*B+_-ZpAyM4}Ck{Du?4@=l{$c(}dtD=>McTWpZ8Y#}Ysv#rnufEi^z{=g1fjh?hqjlaO2x4*nBeV9zE58=c zK>Wbo2AiVF@KEb^oTx}}d>_fEG?5ib!j~y46ZfHl*E%_lCL^}uY2gERdtENKBQFac z;8Ul%u+q!GWl=g4>t!%{7Dm}!VmCtV##VKc%8W7B)I}wau$kz2s7Ug6AfgT!C>k>- zm;``Z2FWTftBDJ+*RZ(H_|Qf*M?=?1qO-2f!uPar5ys7gWI`-T)J`hAFY$4?41Z84X?XaVgnlfal9l&Jow z0UUn1HJhw!bhmphn32t1nQ`x@QF8`5lcvbk`{v1Gc(d!C7yAoRf=B_?g_f%su^OKy z#Fc!T*^)keytp>-Hd<-??s;mFZ(G*Qa8oHQH&(3Bn~obRc~ri zq9?XD$#Hl%aQFg9zx{?4j0tL()SmI9+s_1h0H-ReZ!uxn$=jSP(H(aEXr-@QfkI&y zTgwuBI?wnzWqEM1SGIw{SMv@P92F$15BXn^xKgA%_q?&CxjQOY(iyt{yy;UohqQSR zsaZqhZxg0fxeW9 z`uW1~OoTAegGZQgr=)ItV zd-h%ooLVo*OMgiTYSqaQ3Q%3w^p<`;}OY(!4H^>oiX-c7v7OT zmN8f;QT$UR8cVfS5ba^;gG;hpqWwc?>a#9Uixi0b!bQX7L&Uy7kiD+lVeK%{DZmy~ zK#@L|D1GRHYAn-2!Y`4e)3bhlvEG5$044O@Idr+voRpIUvpAyf`UdG4?- z=Xwp@7D;yv-IAgDNc#5;3X>TGtPb?+!^hz37L(Tw>-5e$I6>4bc)GlJ0VLyJtJnWT zI?};jVX1ZYm&^{YA4e#JY+nHUis$!g6W{Q;c8dkIwUP!TV|ROCnNHPeYzPwgLfcWe zE{}u5uMFIr@?Go5n?tKxta=lu@F=J-UOpkwtDmW~p`B}#N%^xjZ3VDn)KST2gA_Xl zb|}??l&bve!JmkM#`ueQ#4!|-Hs9R;qn}~*P+*mY*F}scJE$6Q)B4yPgXrgm0{ zjEEnPA_!4&|FW`FW}@{%DIyr)kTJkOjv8qZO5 zMf(Vw0Iq@{iu3&H(j}P@@Vl5_>8dKetUk6mDz*W+UKx_N=(o*7^ne!!ahc+g^ZW@L z-W4G>zC5V0W(n!b-E{{0vQv8$8x+@Ju6z=3f39K26S`&AzSRKT32fi_u->3#2T=1w zUe3k`q0Y0jt?Ng}ZE@|gwV8?xXYf!4?I$9B2w;vSY1P${$ZdJpEDX7Fj9lRnYP*;) zScK|F^$>>AkYnC{XfB*mQThtwUik%KV35StgR&f0nd-OKA2S+>B7aNtK<^<4u6EnQ zT)Nf-F702EmDL;1p>U6BbLE~f(_3>OO5XIOw+VVZ~OJl zc^X-)&dOVkUOOUIYtqUD^*E2n=RjR(+FhT#R@cR9yFqE`PcCzn))%*<5Y#S{Lxy#* zMzYCLl)iBcGady|XfWgy6*3noO?04yBem>hMDvyCXDWvP;H(nA+`}dNd5*h=3xUe5 z*BywXdsL`bfW4J=!U%RZ470AqpYVybJvFq75>9ceS1Kfp|B>7N|MY20r(2D9wy?Rr3Txx(I9BATArct zcft7nmH6te2vXopm&MRmoqXP5(QrwRQH5*2CWQFFy6$FQk^UnfPR0302Jr2{G+VB( zWW~?dkktBoKq|Xat*veQXUY3_Gs~me@CoUFUOJQ7N%WD4eLX0nk=P!)RXptm~XR`pWRVe=QC%oPjlRelua1p)Y0(>1~)z>^rCyn zBF=f&77@(vQ#3 zkQ{_sbidIr*ur(|jzWcC;FHCZ64@Sd97MQsO2{=~!I*#y4oNA0MXSdZ1|yWC!@k}i zYW1Y8CK+Dq;(NzBD|O_Emk%RX{9rc?vwb#w5O~VC-BfYHcGt-^q2#T z*oh@(((d95tdP<|*W9f5H{8g`Ysl!9L~iq^25kXEtvxkgEf4JiWmb2j?X3*P{o44f ztK?Thmb^pGgZA(6AJx(AN2EWZ1@CK54&2X$X1@d{n15jR_sXH;U{KUG1#%w}-^n>9 zURrjFUf#E4m12L=&T4wXJasEm-A9jBX<3CWymmZk_`H*N-ST!|`8y0(=~^&;$!F1} zhQZQr?I{m>h?)lP>O;qB=rWHTQCJ5x$Eu0ERnb_`{jf2q*O5*%5yoVWTNXnsp3msd z<15z6I2Zs%?_HfzdU#lmn5oiJg`;2LXDMe&$2^*sueTf;f@XyJ& z&e`CI>$q5Esq$AbT>I*zdNx$j1XTL;mF9ABWM4O}`eot$k#n$|iVR!G_=2yNVkK>J zX2Do=74V@>fy-xZ!R^~kv@wPL9rj=!@FT}AX@>SM?xU_{EvO5j%KHk%X0!do`7F_` z>50L^8%kYDU+Y1(P0%+DjaI35VY2mh&ToFocIjCY9P`mmzzV>#hVhdvXJ$wPTC=S+ z8Es~^hw(MZXU3r}^&7#Wx3G^Kx1cp|68DnKz1F+4LBatiO$Ht!ffx*+slN7XeN9z) zOLHxnDv0&y7m;*bep^gB!1eu8MR2z-E#kOI?aa+&F*w~U=1b6ds4oUlY_Bmk@r~0cS)nd0ZjAv)*y~Ufo{mhiI9*xc&1&|#I*7UEY@|?U)#9TC`eq{@Q~)@v2K~|wICp#>NKs=4 zjhwg?N_h=s!Qk2MuFUQ)q2tdMw=&CG`{*cdFOXwoNl-1$VEsb(vnTXry%wP@QD>4l z@7v>=e_Z(c?#){9w4A-Re7odPO~>U&nEEns*Oo5uGtbGWAqbQQTC^1?DXBO+%Fek# znhDE&yC}q4uiv+EvkmJ|yoW*5^xmtwNmE%tS3ZGIy!xZS=O2EP!Xkf%Dqln_(Q185 zFGh=Lt$s&f)1{DZ&1d`F1jt+nrR1}IkIQ~Es`CuC-fuq+ z2;H8O!Pl8DlA+bLG!Tp9JVRrxZ$(G22qc~T;7UY79X(_a#FS?Eo44Uo{p?707yJQ) zOcyTSg>cK7k2zw;3GZ{G&u;0H(%3STlgal7=DJ3zJx_iG~oDh`OB9b zkmhOSMK5#9T&&rh8Ex~p=InM|2Re>Ai5l^*+X=Y)*zNGLV^Y;|2kM98%C|_*rzG@24(Lri z)EmN}qfRu#)HQk)O&#XTzs9t3fE03PW~3bmUH$uk;-lTf8}^_SRmyGPhdF@#{^Y*JCm9vHPqAlz++V(1j__%-=$W^j6S8S8;cFF^FU|f}ZuAyFa2q-_>Gyz+XldRw!is}0nblFcCzxTa&{pRJPnUgkm_kl(VA`yfJJLN#T z2uUwBr~WLo;|d3FdD1v10LMeuk?U?-ZG`P@SC&f8RQBqN6Q@jk^O(UDgI5mH&l+Q! z;jydx#go8QC?Q%mNv0x|(fZ1!Q}WeAa@@~d0SrfyexJmw9uHlAl8oh3Qd#X$32}O@ zVPM|3r&RKaL*WDJ6bG(ht6~tc?hyK!>gT)wRFO zKzi0!xZr;Qo=ylFZ82*2Ut-<=)#6_1@-^|x6Id8WQx@(+eg${3y^OOMlO^^sO?DD1 zw%D6^MjR4}h_*1l%r1*i$!t?zF!t+f=<~$>`8vv0H1Zgl*K*(fG&bN|ggM6ZR~p<8)9VSl0(qU7d7YyVlL*7RCFzWhusvUVldC3k(3K{7P(;*t zH)!|M_QBoP9FX+jj>-qpznZR?fD{sZL3T+j_Yp?7gNN&V`U&y`2eW|-D>8ezOa;en z)OLH({=_XyjiSq+Y|JEuEDQJ8C`^L3l0m5u_WmCTu8T`h=cP|L_tIuK%oNIW1&}q` znKr>i8OI$8L7I@#!lz)BSBGEHzXNk|Vg+8~LzLoEaUWh1_F7PdDzv>*NqB@8TA<#6 zK$~Z&zxBs?wXI!@=ikv~T5q&kMt$?Z{-m%n`Y*f@OZQ&7$)N>*qD@b}&?z+cot`x5 z`xBPVI>A7u$c96;ucM;4RUb}Xo;4I}z2BJ)x?WFs&+ZoVuwyO$9z1rocFv(~y(gT; zmDG{kxbt!EKx1`e7*dPVV(YQG0Rz4pt=(H)v}nBJ#6BR4&zO#9R1wNow9coub^Lpb zwp>eWXmwY}@Cy^9ST_h&XnL zQ6hQ(B@)MvMD0}{N+bK2s(id-f}a`%KV!-f+!_(@w)-wtmXr@}j$uL86)*u}>+hO* z?Q6y)@JDLbO|}@?YWtGwD7K1}0;ytuEW1x!#q#6vLT1thTI_m+fqVQqilj`Ae4z1P zsnV3arJHUG(povTfk_>a%FlzIV3e0Nf-|<`$6)b6vC%3bb6I`RWRB(2Ls&%7wtlNn zFG|lIC%cMvu#-1IEGW!T&b#@eC@KaHxqoeKkCu;Iy282IcS2+!&kxx;4~W)KP#*mt zCxS{nRtS}}HPwk++kxr1HWMF^W==9Pu7!bM06Ur0ViF-v$EwSJKN(Q|@ze~;2^V>E zC={MrZ@NJ&rD7y6P?99D(fnMneBJDkk}=?VyQ;QCR3_iBSd|xa4Ns09NhJvPYx^jW@v z<~?E2)?vN}QO^fg?vo~7YiK<64bFh#=9bk>z_VIkpJgq&7dX&QE#&xA$5~7vXZ%BL zqEVr`y{GrOC=+}U8|5>yi(ve zeZQP!NYli9`!RksFz%F2Xtwb$&g$=L#&(?AY~dr{rs@xdd3GpX77Fd5oilAy0Ds`N zV~D5u%upLd2%D2puP7AU<-)$Z?c@f$8BT4lklxG{3vKb^Z)fB>@vUh7{a0!+Uh@O8 z<8Zo!nmVZ-=gXA@0boT}}nktXcc6b+UoI%u>M2n4(2{eXNhIO+Uv+ zKP&3IP7mIUDQm(S&dp-ZX*GoRHJi~~!LxH6(KWT6o;+RxoEX^a73w-}yxA9lmSpd_ zdp@!1f^w4}?A-mJoEpANa}zjg?m67h{Ge3X8%yr1$MB$8yIj>VH`<}nHxJ7-8ZF@J zlsMbX`?G0V)w%QJ=Zp1BQaY_1d=QEbl$6(2t)$zU2aM!rrho5t=;<4>#_++~DHndIl*-b}~;k zaF4p&zdD~GO+Tu9%t{ArB};$lBW)pDwna<13~q}0SiYnPJG=HTxvNSO=4}{k_&^sq z+C3^q)#l*USKy*+YBJ+*aVFVYVRY1wr1wOQ25Eo_X3!7pJn&5hZ_s*A7meUMTj@V- z2}9emZ)}T>iuXifIvAig>Uw3F5gp#JQDr~2k!|(|ZO${tAz5)qwm)Y-D2-MGx||6D zg?S)FyZBLq-YT_%&n&G@o8OJrt{*9BgU-guq{!VN=*jGOE4{lt!PN zD89w>)6ituHNJCgJ?*2D?=N8k-&jK@PQB$9l~isJx=P54B219Gyzl?Tbok(kB$<#z zo@%S3;^4-cl2UKpp>UT+Zq)^NpAlI2!cTmvq^Ur9?+VG?WgBNGQR?;#CKaXqY=4qo zN2y%T!QwAP^^(P%3Lw7)Ot3ko!fkx0e^&a0&FW#U;? z3GN+U7f4vDARY~(%U(AdMEg^>W~smjZvgGsS%3)Gvx9ld!OnzfzHmhbMK%`75;o6I z92jk4L~g`QzvFzXVF3OtlD~hCT?e}d@^mJ_2^$R?IPs5$YP=dtv%QCZup! z;IKqxL|-I*7nvqxag=jV#w#W@31Jlntl3)}dGSXgbYa4)Ny;VZivLB*%bqs3eUy64Jy~bC5%Cv^RQFZ+s9q;A(J$` zQ;VklU$>P^^?40_5b>GQ;XYd|zDrecZC@C2exga;P`p8?G!GQx^|k+(HdX}FI^>@J zmHAn@$-Osp4in#iZ;I#^&Wmanwsu~rbd21`9GYUpX-$qh)i^d0wu}+JwU3xp1gdJS z3cdIhTyTA^vY*a>=3!6YxxIL(4MhGnfvjtSH#OV;vJz+Mtj{?)IG=#5MKZi|VC3al z^A@_2_ba`mai=i9Y5NOCzL4F86b@e=Zq)(#&(vhm;kz*oMa1*rD55ETzp(imu^K*a z$qGd;`W3=H2IHT~ceV7xN6uf+Hb~{L2S8vu8NbeDAK8;?u8MVmtH1Q7Jgk7C;P(cq zlJg-cA z`Rv*;YEY_dJ;u_+$hy*{2E014&OhvB)l4&lPHL3v*mQlfXVSUn-mcKPfdR_Ei|e94 zr~G9jT~64#Z57ULrdu0Plus?6p(aa)?e~5+#GPe5SwQ!qt67@-Nl#hdrQ2z^(ckW% z+X$D+OQi?dLKXC;&nleW`Q5P#hbo(e>N~1Fc{oX&7Aglc`q)?QDz-W5Wc7pa6DEHSJbj zH+EQ|0Aa*+QN%F^((=tmAlCvJO70fDq~{pE!)tfK+J=er`#and_I+ng&{+T*z`Pk`WbO@(6sEnC&Iw7iVSp-hCaj6|9`Y+^T6xona;8 zMi&zT+YDw2M>ZtRz`v1%dNCeXT!;r|KA86QIck!Jp+5!zM4^O4R|R-ogWI>>8INfh zfO)J%8PTi0O64RYEN4PSU^=>_)cQxi1rVx*yMxKDb1+KEqU&2BHHV=2+ui7My5XSH z^>OQoB&8F;nTouqJ*nuvEpLdWDnt&?H>@AI8A#h&pHROa!(Tq<{k{YUz@PbZpx4~w);UMLkj5ho;gc*GNLS_AU%KSl9cJn zDBjLt@lAVn0n2$Q=^Dw6LV-fysmhUt5!Y*ti3hC;4PuaF8^1;DZQrZ0(3N~N|!7`_r` z%^S~=^RlDU9N=_?x6X?|eG+-A$|$b}SHHC?VDnrk&h}Z^?RSarS-G}&4KQJi!HE8_ z+l1E@CHjOi_``y>$Y+K-2YuZ_>BdU(rq$vAhvb>gbM65dLNHL<&l1~e`4zYxJgh2J z@nxi19KIu#B$dOYn+?#*-ch|UF5K(BKngR~`|MuDicjqmyWI$!O;k`W<7!+}K`7S{ z9etyQuCkZ|3H2i3a&_(-8tC^jE(1w0Q8a$KZBa%k!3{i!nNs>O)4gEIn^F+vI zt*JmaO?{$V6i76UP^G+k7(|jzYmp?0Ci{?HGg}hIbaG=dMCM}U1ESlbu|&CM`QI(?s{x)w>S%2fUT>^UEXnB;NsHn3j)PZ%~`1g*5UTU1^OSs^MXrHyE+A@H{ zC37^??z18cVm`kvB=$#-Ym_$Ceo%Bd&~~2k;>I!X9M}9JC8|?Vj2Q2L{9qmM;C>Uu z6zTZem+2D0UK4t3ZF;kGbhc|s*XciS`u3E5p)dr6dviyDy9s=l!{#?#V!0JLu5I$m zpG5Bkm9#$IgC66d8-WFBq&t^&DgoMhHhY1d{H})VC`+1!<)wZzSf-Eci%DOt3w2Lj z&_y~ZPf>5%4kUQX4QSrY6G@&cI);im_JuAnsC)@*y18bMp?_ZFKlmk0Gt!CGDDTe1lpitC0Px)d|%z zr;yekZv_Z5kYM*o{D3X`XPzI}@X;b~3BPvrCntg;J5s}w6*W`14l{trWU?=P-4vMe+VlK=lNgPjsX@CwYIVzKBv*kLoyJiy!C@a0#HrR)|zy zO8Ev=l{vB@x*#03RxgI+R*cTu1W|~`?s#6+zSFQ)}+=Z(KQ^r5o&nyDB(Q*!C&)6Kp=Y&dqAP$88JjfC+PwmEOneWhef$tU_Y4 zb7t6fy&JrIe5%a3*UbqcNk1lY4DK=U>Le{D@eQ!%!VP*KSsx7YyCx1Qn)^-H`n$V=TdqONqoA(abmX==(zZVcPXAzvtikP zC$mLbeK{q#qV;T`O*lEb4*;mTkUQFQ9`K6anOuc3li>{5?!o(H%>c`1%!P_&M-~~k z89L_u8#UBfG)Z+OqYjVnlFTkAFaOFjpheR6lZG>#J*h^-S6hC?uX+^&f1oFiIRT)D z-WHjl$Ga6!9n-6EdHK{g(`SA@1~W$tp6F{LR>3 z`?mIsr43>s4F-gf`YN>6kMu>(ALe-22BjCc=lEC|J>I8ji5>}!3;ynsvvGUh;IaHv zr>=Tp_0r^)qaQ%i7d`v!Z2Gm71B!8uaIJhO)Pp_NeIiGh0@8eFdXcJ>e=M)71jC&F zptTd4;<-;HgzrgwsjJHgIwJ4~R{C_oE;W<8#6GiGHq~OIpYc8_G6X@-4Q1iXL~;pH$r{zf z*4)x@qU+~>vQbjI;coBLa1J@NvCBQg_({Iu(ch@c(O(PvlJ}Cw{=&*K^%nbhdBog3 zMzP?sT)VyI&sbZMFNZr@(Np?ecS8u*sE~}I)CgJ{d6#6|@f+TY(T_P12PVOA)R<+* zX-mIX)RoRTB+$nHM75pjxaU|UM|p*Y26Kw+6VVT05%!D`=8a^c7Pjq)IR^QQvI9yUg*?9Ns}PwE@m4hKb#_`{-K=!<4k5qaTe)G*mnyrpm+nQ+tc zTyprNV4DA+(#>(i$xxn4uABSLG3guATL-O&7h4-v$tu5vw`bWKrA7*1HG8S4`d1)o zD9Iv0@IYGr(2F4CvjRp&jrlZnnTPKhs<94J_cowIWRua)z*Jn;Vs?jWdrSK{s;8WK z2(nBdhl*sW+L}ADY3~IsZJyDtXO{kzkt%bJ!nYeEcfIgy4NG3YL$I5><@A#kJ|T(p z`FNg+U%2_}`NcPR)0u#Fb)Spi*XJgzbnU25+5R#0gU9GQx&xhvHi8}N2?hNttm;$n zf;ZbC_%nLlJuB2@bv`Ai1s&{)D;t$LnWE+2_max8AASDl#&QUK_px!ujF5cPu)DwV zQi$v|htf1XogxYs>Y~^YEq=^;XF1XSRPJ~u=ht?T;$`s>ab}4zeT}-gU$Wwa<@=y} zf6lkQxasS($H_`utt63e&yuzLaJd~hI>w`@dN*@~GImHyo+eea{rF-nLYuEcuQ95q zQ257?uP1fV5!PAVliWC>OonF(}cST^B>DZ{NVz z#PnCoBRe|l$H$e-&|;-H`WjrJ0pv-zNWPF0$C@+?@cx=3nk}y)=rj17*JW<|gOz>% zwJ?8SCTT?>o=4r&?r3Z<-QCRCQQh}j;%Ct3Yf?^9R(hO41g4`CUFf|z()XZA=kLP? z^%=whrbdUM_2Z03h%((eBM9s%4@f8307d^Rejp)+t-3sKd+h$RZ}A2^N)TTuyW$gt z_Xw&hYqxXgwatO1!9*7CRy?{{cR>iQl-Qu)F!Z@BqMzVKf$4hdPVczOBHl#<|8wnj zgCJ?$yg2#bDAH#rY{!@8a8~7LOT2n^d@5^4eV?bIJkF(X0{Me4_~PT0DjxmFYuz)* zUmeX;=u9iPeI*o=f`p)T@08T#6o)+P>F~V>M=xJQPb%(PDd@hS!9P($?!+6m+`F@_ z@ayHD@yI){^V)`lA#~=v$=uFoe#pXGKWIKqkd^TpW}l4+ z>N4(`I~Q*78Y}d&+F>Hqg`FA3M?7DHjgHN_RYFYep#e-iS=%{<50?mR2s%TxFAl#$ zA{vznNAJi{hrG^m{uD)S%bv2Hh{J}K_;P!E2Ie~re~tc|q*)T$lEiPfa;ZBvhQB?@ zr;mOF{Oi8}g3P!|!^J{^Z8Lr~r^VIY8vA`Me!xq}Qbw|xEh>!`-lG)$dhAKBZ@*bb z@mgtET7{X%0MA5UPsFTO`Pi;+g~3nMTbkv0#&Q7l8qYY-Xkms!g6op2vfToch`PJ0 z_6)a~9-^wea7k;wdf3samo6B}cy6@pqiNmCTm%yfqyj6vZjPTA zA=Aab*3kFv1@gVrE9(j_xE}B1acKX>=J`c!s!fRi;8lFzDjsS+P^^oXOd}0^bI)xa zC-jKAGk-4n-fsH6KBv8tEK#{1B)mjgybs92aeu+an{_u0-CDTV*6swlpaBbxMQyQ8 zwkuC=8t#R}n=#OJ1`|Kovx$S?`S}nGu!V2FBbd09Z%~Q}jxIY^>Mr=qI2))42s_{) zXlM}02}CbuQ=@cfBSx!~+z5jmcm6)+b5NJQEnY~7!N;)T+X$5XRX0j45K9cWJkI?l zrsM|?B6GTomCh-cHwNe}DvpEz2=6aCNi~@a`N2M3`%B4Uhbx+kUNfc+hiWgK9r`>; zTQiszBC0PKFJ}~E(D%;#BR>Iq{TKsTJ+_#>H@#T;uCkYX>4@5{hRH zS&fHp?xD})PviqXb_4P+Tmu#+v$n%YemSRvUw26LWA@i59uPlp#XG1qPm_;THc<)q zO3}jfFt{-DKDM8J@8G%q(8JB^i`>-jy8PeY_Ma00)y-D6r$xww(9ByE7Fl%aC;F&d zTcwI{Hj-J!z{Nh(ESn7Tt+TD`^QG2qmFJu~b+zkch#;RepObFvuZ?1rphvf{yu{g| zFi7||q#NO$)y=Z(I8-S9m0_W+R+6^rUJ4=0kS3G7F&om2?bl_>@|D)`dA z%NH-yC)u>r$O_I9zZ#qRO2X$JIQ^k9v{<&=3iAtqj!$v!r3M558JZ#JF`se$&omT z@P3koCX&cIkIFy=c_=pA`^l{!#Etx(_{f$2Uk+*LpgPA_`+LLG=m*#KS+Pn5fT1Oi zLBW~_Df7mA!R@Ctn5Yvk6tl~R*>YU}wNU0|8JSarEMyJXeHg~SP)F{y%4t#X!|c6k0t!$ALE%HdGu|B60*MP zTs^|t35{fPv+}?y=@aICw=hfp-bf@}-TyQoS+YZ`q8M8z_505HJIH5;Bc%-#Aen^Fzo8X{Ir%4}+Sf$w%w-n#P`WJ1K9U>sgdohWjau`3u{|ipdKY z#~T$Hyu{IXl_&0>T?lj-$T~`)SiY9-9r^;~I88e7nP^q)E3tX;ot0}TNo64TlNU5? zEt$)~Xf>_b0K@YKco>UdU9WVJnz>A|LWmcvG#U>KwZGq zqIGadEWN&C-{oQjTUJ>ci-l2F&Uruuc72MStVV<2)`qU%Ly51YcqNxZZ=heCLENaI zgB;yV=;Pq^cPt%m>6sSG%N~vd$HI&JwuA41#O9^JZ&r(n5j!%a6ITNPT7J2J@t+%N zk_K3Mn-DZ_-7*);ith3-7{GG-Fk;n5cK^}j)zt>~E3fO>q>wov+`1VvuU4eqiuZY+ z9xgDZm@WB=#&FztWK={Saq@;i1Fn~S(f49;=@!|Za_Wq`Q<_DV`S3=?6^P<@rpI^Mx&ytVmxsiN{oAu1ap6c3s9Zlm83qvwo z6s5a25sm2Jpr-MPb;Lht+;d#z%EzsNc6OWHq47AzN*C&<+P3v8*& zHOSQUvGep>Phe#ZQ`eDEsjTsZGKGp6GH{jNpw1u_U2vr0?3J{&w=!xCitKOOJcXxK zteV_<76;HcrvGY)WvXPkUJ0xatDjstG!X;Sd$Qj=g?-Wz6?4z$HRIE)_m*%qN|Q}! zL&iK}Zgyb0{gX5z@j4=@=VKx<;(G!|$By{0qCDJ)h@( z$Lk*K-`9QWeod#V?NY2S_Z^f8m>!df$#-(a_?jxfj_jI@QRN8|w!0P2iUd8Vu|mI_ z@C{X|N@ng)`f?ugphm=}^F)ZcD(6q4LmmfLn?H0{x^MCD^2ElCgmYrc;d$2eM1to5 z;$zA-I91wzH-@Y}&+4sJZ-{uG=-(_dmzrUYir*3K+gNqESKGZ<-pMBWjZ-hwG3|0<^GWwu)% zr`4UBK8o?5-p&*Z1iTLyKzq0R%fc0~4@HIhcSO7KCzNIW@V!Y5NGpU$1Gs@kwhz2$ zax;-Zvcgo?q$>Fb3GjF7hfj`~4iGFf{E99dz{ZlW|4I>?TDhZKG^^{eK5>1Tyq6mk zm|8N^7ivrpePg9I%2vM~)1#UI1Mx{RPUt8>slkujv-=1*n-r0R?%{vx2;rl^`A~{Xvq5dFDgrZI&b$j&&~~*l?AI;pATJReD-#a zwlW&mh(>EfwNUt<_H;y*3Dc~`!J!L-;!z5jE4y}cav@HoRO_g63U#>f``rOA(PD39 zF1(>?^0GFM(1IL3)DK?}s@)*vts!-x?#2z#;PGFG2eH(?5|bNkg4#RenBmu%-)~E5 zuT9}4Ztd%)!Xe+F-oJU=n7sua989ry@tzs8jfkG4mGpnkSNyWOX7ya~?5clc&@N(8 zYJAbrw?`uzqTQFPOexE?CIKS^(R)3X$gfCq;;_OChgHF=(w0}H&~159Pj-8wMzA{W ztR?rdRKS;9*IDy_NxVJ)#A<`LLrOw+#_991t)s19AxU@K{a)m)!5U?@pOo(Jk6-q_ zv5n)#v?@P0THv}UxZ`Y_#M>3?+xA}Uis~O6LG~V=?M#j@2)`zAou->sr&V|qja}$m zGv6u}`)ld?K-VhyZHzOsI<2V0Dj6E z>i?e>Kk^sYhW}ScX`HMahRHuEX?5}nT9ZVT-BZA_3$q^f2f6YHy8=FSR48T1a9 z=Dq)ykJ$VM4W%k;6U?Y94uuJj?3*(+Ud~N|5mpf!YQz4QDg|ifAfN!r?c` z+L{2|+lGbC2s5?RJ2Y^ zS!cKx$?Fwle(hAgv?W%bH+RHMJ+M|nDr2_!(}eSx2;A{xNyYJ~#V1({bCfs_lV`dW zp2fUv)2TOMZbU)mT&uZUb}s{SBoZYh+cl((FyJ^15h`c*5t!+c7(kq)+!4vtqtS!mvA*aaOxm0?K^IIy-e%W{oWssDp7Wm3H{q|a{$pA z4(4I{7W2}xKuH@b-O;;gog0(agh^6r<+;ZHD~PM$>z_66clUQDJXbPzwt-zFb|wtl zHxCF;LIKp$&LB_JZ;5m7oNkNgELX;4bDu{7BB=5h?vz~#RSeEJ)+uUcjvutWQr$Qy zqVBU8ds6Qq*JttAM(J*#(4y-=)DP}&OAteWh2Fc1@zg1`g+&z}EG%?GI}k&sGJo?n z9G@G4)b)e`Wumg^!8(s@)@#>Fg3?N~oh~ydw{72(i7f9@bt~SS?!W{!rdxyO$KB%O zleX8H@|I3NA>|Gn61}vt4)|LTM)T^!0yMM3uTbD4lmWtTx@nj9=4i~rns%B+X2>YS znfBHKTk-r@(W@8AIHH+POm|dex?;2@v@-+xMJ_t0h=*)w)JTYhPCw$*tP&^yCmf*0 z|C+U^ay`zE5VbG!Yq=()7f^tedEdbHW?;gNS%+hnD-xwbeLhbi+ov9RrQgRV$=>4q zZTiIa{JeKP-mr|P9k>x<|G$>b;#+kg{M|t@G(`YYR0hz z_BVMyITnysbcw{xH3oT@2mh-3PXIW5X}`B~)SP6MtoQtHka-qvqfBJ_*-}V+Fx}X_ z?M}FOWBj4)n?qCWa|9ZbaqG{mMHv;hGGLbsU7@eQ&1lB)x3vTcG z6axRIPG1|3DIKiG&no#`DD%XMVj;WI*a4Cq5eU^!BCTi70pK+NZqv(Fl#? z?$;1As5J!8j?g9rt~LAnV8hZ5oJ8V3c7sfVa0`Fn!j z=J{_@qf8)KVYP9S$<2UcwpR2y4A<$o=<2M*Xn0LjCc3yPsYx$ueb-2+8ue&VX!h&i zJD+rK2hj~|*=9B)aF(z6y*c!F_**@u=I;i=^> zxBD_{!mfD74%f7ohJbT_X>`r#vx8fGE;Y+u8$B zu~=yoORn{v5G+d<@Q-23ICz_1q+U0*hd40p_}cJP6C4wa`_h)^?$7lCp{DwnvS#xw z2$=oURk(Z|q*1#yi?j*aA(%%I&u{&Md+xh?I~hfRAH%@QeB=Aao~9ROC72B@4PW#- z$DFi_eZZQq{JF2Z!}~Pz!7RQhS#oUQqBumaUnf37+8KHOP3rZ|d9lY_ugE=nb(4Y7 zCFw;@lLDp+m`=#=NrrBvgzEc`soL@S=8&Tt6vbtf^$Cx`&cznCQQdoI%!3-J*I9vW z4Nl%WdKp)Le|`|{UfO+P`W!{8cbko>+u*{RVYk;eG3{4+`39cKe9r+kFFPGx0g9&C#Q6Q1E*feOxAFlvLfoI71EsiE=;y>%zVF$reDh;yY_GdW z6!xG0sg-0Mzg^Jo*1dACsfzg*=5{wCdDuCK*!j>s5sR+m96 zSKdD~?N3hrby=5y`jFjB`CbvYlrY&V^ObrfENALHOj}7^Z+>W|7pcs*tCP5QTaxVa ztwa{WTb0p_IXei|>E_J@0f*k_j=fpDn(p}>#(hk-r+^}tu(SU2PSnMHQReLKvY-8u zKX)rx(i`txHsSjgB>PRPO6|5j?u=O?@ecphU^y%JlJ9}bBJb?!kAo{ZWid)-hvBR+ zDtbmh8APY8IV6?xeGtEqTbjpn88BqJ^4D$|mjRjN(8!gEN_1`!ozy_<44Ime{|eK+ zpECL{JY0k5LT`hAxO>7Q60z4t+})oTe4>?HFJBC~=@WC^BXb|CMW7>=ynvIeq~Prfx-EZkXmflPMZR2C0D(gnDaStId&LMw7V`c&H5+itWv zt)9JteC3uSP7qhPU4e)Aa|>WNA>=G`s%+6M%KRAD_l(rq!ydET#}IorkTm)2vsNI(C2B){edKuvS%efyDq#0sJtmx|Ac4f)~X{f`02I z&_nPb{%5`P4jLIe5^-hd*4loV0I!1?Rw!Tr1UX(1BK@FxD7#p-KYV+l$I!sY)Z2M1 zSF|so2%89O`|0lnFnJEH^&ZN);aA?5E>G0uj$joF(lzkVWnGS4cV@>`63dxextxML zy?>4fzsWv}xztMdFn2%;wLk6EzQO~BC&Ak+_|?$|hr5{Zvl>{+6Z*y1jyc@Nl3n|! zt@gV~B|Db+iwKSFO!I;qE1~yz26WJNO*08ASQ&XgE9>z6d%OY9ynRrEHuq~L8_gbm zo88J#>(}io%N;{zzvML?^7DkYoK%;YC<#XLuk)c8hd|tf)1j4NY@$K$(IwSyl6R5` zMt+n4o)N%Lw$GJ5!%NAGEsONR8&46Z9zU};>mR~yIRD$#*8Ek^q*TVF!^seQ4Xj=l z-q>Z_?G5;#*f*ksDlg+3WxH8@Awcn>H@O}_u2<^86xs5d!Ae>pg%bI5F;9k{DPIaY zPU>-=lLz2A38R=*`fGTI$c2nq{)@Vqf z1CIo@`?dRrWQh>itB@y+pnD&(p1^))okboJcaBB}hCKI}EYpPpdS~2I1>74KWO1!C zr21L;I&aQs$`zG#H|kyfXHi(S{kM!m;0$13IeV+5LdCDlvK9mav75p_&rKn@=uRfjeL@v< z7%A~Cf7Ys3fT#7Z^VvbdF%xz_V8_1>5!0r@&K#X4^1mJV*pvo`KX>9%J?2 z3hd-Q_EKXY|Bg-Axkse zcIa_dwlnKUmb5$4UFg7sMleWd97wI-G|7A%58*t`yrO&H>v%bHdM^Pb(VTjNChMc< z2eli1n;ln&B2%xmF9-T5(dm4D-CN0w!x}&9^LW+~_=&YM6)#{%wGfosj_3m=&lC-i z8Z+}E9L)^;5N?cv+v{r5GVa{*o91O8fiC*<25OKkqH7_^ILD^?Cr!|kV4v3-J?bNK$_|5x#55M@mIb9kjv55B5{+tu({TM9XC4 z8RHu=Y{`-*2WTJOmOE`RiJ5Bu8P#DuRTvC<{y6HdI#w&l<+4LWWyFPMHGFqTr^dT=Q`*hrs?HZIL6?QXHC1+H*T|Z<_Ovh^ z0s2Z{s10G*QqIYuO}92W=0Wo$XYr#2Sp2!_Mc;~_n<7WSTWF7iuG5&>q)K;|9C@B> zaQKVgW2u4U??OXAox0=@AGqhJm=aD-dk8 zcerQBpuJ2-7oLvGE~3i5lwKA3wN+W=Xt+)UYYwWb-X}hiU}M%wF!_12(IS*5|LfN4 zf07+bw@mV3*Z=A+%cdJssh19Lf@%jaY9#ODQ)$`N!QVicwTkw8u>SX-Nit{#|wp~Vb4w_JS9*!U;e#Qzq4&Z7NOs5Hn` z9(e+ik%Qi#Xjkn+k`W{Mzk2mbs`Fz4wt*Y!A+q@hj3xFmWVos!AqTlTQ-ynIBw~^k zRO-vwZqIlcj=Gz8SE5Z%w84z%a{8AlSvAniKn%Rw4(|%{sPsxdx5|#ZE+TF?-U@{W zXsJev%aN}Jb9z+ykGDyI!i87tXqY*{{qh7gt?*qnzuWx$n4iI7y_E^Ec zMYsXjaM|__9nibH^F+}*$62W$qZouZhf~o>oY3g;KHnBvn$5UDpHQa;$ip$!{Ske~ z#_}P$t!Kmun??8{5oc@NyTCI)Ro$L66Wq5CfQZtI*8EXLP?lWA9tORO`5SwSW$6Em zRyBMP!|{Qv_yN;1@aR6`Q->?!!v&IZ!j#B{b{WC-JSsa%uLe08petc^{#esSqU1T7 z;to?86ioU%?0EX~ge&;SBpF-_B3RyZe@>cB>4fuz-v}adJs0=CunUn7mGI&*Q3=ZG z31P7RHzxY3Q|GRDo&RI19?z<_ScF^MW?MY_&gX&Ampa>~NlX{$s9@3%9|fBFh;qZvQEQBx6knLx*T9elS z{_!M_JK(btl?qAZ?!z6PGVG5WaY}9v($zvi`Y!Y23S3+8H)K|$J72KKFyh)iln*SA z=6<=qjJ>Ckg&1DIoQ1thm0nkRP0FK`0bjH!m>KKp%*mt8lhn>EgJFc$G5=qNYEn=kcuHhE@F za2?faGefl8k~_5$>ASlbA!qqb1@A7Cxeo`~F_F^up7-HZU)MJ3jzTCGsJpuP+kozl zetHWngzYuWM}4MQZ?wz&Dbiv5)XSg;j@b!6X?<1^CTs468k1z89JKaOIJAu!DCFZatzoz!gkD;HJVtp3vgxUA&=^<>N($eL0ml-y6imDWrH8UF9aog5mzxds4 z=h1|r1&hpDui-K3F_0e`K#oYNqNMkO(N9_yB>&z1G_uS9o{5^tTkGH@U+{)JFcpHn z-HaG__Z5ft2R*yoxk}m>6Y?*8xa|lyB|3CFen1(0B=Kub#>#=&ZDV6h+P!&Af|{aZ z8~#lxATCZ^^g;4c%=HF3n6HIMG0lKG3a`*(?L*J{rz?#Yc~#hH+<_2-EWG8u!&2XV z>`!q&ieHX^i*k}4z!&ADP4XwNszY6mJ+vHsqHXRGeB6AYtG9gI7&x)m?O^2LE$OYY zxff`0jm+YR(tYQG)|j~jKnX8cSW9E>8NCA;6(bfi^U`pv!B`^LpsR&;^z=@tkdp_$ zg_x=EL3QBj3Eu2bQMjkazZZtn3zwP}5JbG6fG4&CRBcBCqcUxh%RBS_yC*z%$%|UF zq-q469Xz)WH^$pEVI8)VAJ-m-1Ocz8Y(ZBcmCnFHqsc>&mt)u4LMMlUvAj5*^&1Y8 zKLvQkLS3hGK59c7^g7r%+fTr`Lajz~^FQbG6=XV=7bZeCzCgrUsM^}2y|w>X!Y7z+ zC%*(hJ{>JDu*sjx&a=uAZ)mhZ>S-lyDdLL0rXgsGe0ik86fiEvN^M$Z&;?cU@^*^xH^`rB^v)m2uWxAq;=!Nppi^?hb z%$iu34q@kntmZaK<6}Y^ursIYhNJhE8y+rHO^zD95@wtqB`ObFBMjImW~@~f@1UsD z6nexQkIZP6$uh~jWI6vl%|`{IgU#=&HeSfw$d|?NepoNOpcL0%c(A*^n|XT;YS<;d zPA4m!d1iJfJ#i7ZQTA!pZ-m!{6@ZuY^Lr!r9zmY#0|H^Yb6j86UDQ?Tph(qfkQ&qC zy|FfyBJOWgL*;?w15|TWW|9PW4`khNu|1Nr-?3Hb+Bfe#r02M3_cSB9<&BkdOZ`y$I$-o~^Wtw@v zK)%rb@_#)ox!@t|ZmmmINs2jDuLH!;tNsQJ^V`^?oq70|fn)%2LA9UZCcm*o0YHdU z7Bfipn{m$3+f2jf;;NgcHUGHBO>%jzOxpjbY^OF1*=)v*Jatw*<0-8IGv>d*4ykvj zf(YdR30KgSaCQHXi}0_sAay#{W>$AaC(;gR9vq#iT5zQP&|JD)NV{744LNneO_d5r zVbmxZ{<7b8ApxP!_L%4ii@p;99YQH<1aEE4md@!34MgZK{6`TBY=?o*2uhiBzv&pB zr;w6_VYlYTaq$oKdJ$hoz1MvopbN4jUK#!v+Z(=Y_KW=8NhU8?OaA(@@BKo^#X!Y$ zi357e1^RCZab^N)K7+NzV%(@n^{V%)m7|Fxtxf&>msCa%Ib+CZQm+#R%&!$%_s|!4 zj~<@G9SEG&fJ$$?C<)@WX{Uk15Uza-Ateefxus|MVJ8pykz;4!$>N#oyxA(2$1MUb z)ZdH7uaP&)Ubsq)EC&`b1MFy<0$o#5&8W2_R)H6&M)d< zCn;8XrvHgk^H5+QsY-m}4cSn)kKZgdu@q{3r}U9K5JbXQ0EBjqs}^-e#|HCmb`hb4jEr=B(i@yIWnSKAsxW#KW2V zC8Q}=&%{q;rSa$CZrtDOWk?g3ryN)VQetUXbX0~M_LF7oMYTBVTDbv~Vt(=hoorh^ z9;P4ICE}Vdg-rB_{Z=Svo)*`e-@tY|7X3_&Sl<43)nZx?WEWos3+_e5PE35NMS?6Q@4E#xlY;>si4v1n%MfyY*`_P5}wi1eGx#hIQm)d@2U7Su*WA zfHw#QWi^m3X%dq3D}Fv9($h!Jv@v`C1MiC8O5ud6KG?&%oceMbPuvZpHD3)~%-Xg4 zB#q-K&s+02ZgoxGAi5IRW9Do&(-to7#qm~O5K?^gX82YD*7~7O*&?EA*$k-l#)&Lm z67>Af@#HYfjuxw25eUpgKz&>OIO|Rb+W^U%XArQ8mZ2G?W}`{?hv>R+{<0P*v%=iz zAK}Xmi>~qa$;FxY7JuGl^RyNP8L3np3i#rXXQ$@x>~J(S4Krd3Qzmk#PE!veCO(@H7hGtE)G)}i;vPB(Gh;Dv&UhRV#tS$-L2&tFzAMQtP} zn0%9$B|IvWM)!1Iw@hGdXaVx6fgl7C$Z*P1Bl)d)wJ|YxzktHA*!UaB*K=;6?>$t` zr1{S$2)DCRgX2dnw1EC&uY`uhCzTEl@XI}qE*rQT=ADGIhEij$|25DPX0Gu>X!p2E zPQX5wR{O`Al&D_^%h_wo+izmCeX?uo!SLAwh)n>(JinC2=-rzC8zGsR0Hv;7**FVq znlHjWotA@!b%U=8xbvRZ?$SO(zo zQ4-_!tjmlHjizd@iarc-$?Ye@i_v2LwT{7GCefO!SLnxf@ zP~8P!v9y(&S&!qb9^F_5INngTDSuh7DX-CNFhdLvgl43~X|9BAxuy$o3}ap>0` zU_g3=np=)OD(XL0=(1ML8WE?yd~ zB-62S1*JMaGML^Opx;T~n)ig|Q3s54RfctIJXlqDS#~gh-Z^+OydicS$cbz=$pm*e zv)yrY+o494p~L(N?s6g|vc)8Q7jEsZR8M_+7PHam%|ZDa>Dv;znO%0)Cv%R#RuK&U zq@ssBbA$X0%T!hF9wawxK3G&jw+i@NW|>B=B>#ks2xM78vGTPoub4yD{)af92;u)7 zd`Xbz{t~v4$>iv8F+8Itd84^xqekoG?RmbT=nzjegQ>vHv%g}xduIegKJ|E1$q9e! zMM^!0drTLB%e2E@QKFyW)q;bLink?>ytI=}-e%>UQGFfBMIeU%oW7-+Z!6UE0$HsU7wauUOyc&^pw_VK_AayxI~v4li!0C-o@WPksuN z)G1_<5R4$mrCB?4f96jp0xwib5I1Lgm|iKJ9GCr_gQ6jqX-2GL_4RNA`sJ3THP?L; zC(;vcL{VDTpM~Yqrnxiwz^sR3qajtNkvXNN(RybVGM#bG4vttM*1e@Q{M`!iJP@XYfkQ4H1b8OU~n&Pkd{gy0N!#_wyhxzP2 z97|to8J{3gWV^E^8Z#ZMV*9h%fOFE9)@_4#jU!1VgQFuqpWN=RB;GQTc6&2pl(m@p z7$zL1jTJW`MTipTwldgb1_KW8opepZmF7^MF352ZEPUyXmVoLBl4~`= z3IE2fs}xvJWRRzQbFa8DZq?>~D|$4i-X%>vi+2mG_#izoqv!()WTK{}tWl0kcMY7ztCGw(?UlL0$Xr zRF>3dK2!igGg0&cMfLhG`)VN%einf|+P7>t13Bms3JP6!q@Z(>D<%@Pv~dQSrr5T` z_^;i-;Og3UC95@eq^)X6Q!ehCIFGfZ zL=|^fu2;^!wO0aES&qLp+^lGcrF>LAzJFLm!Ia0}JHrwbFc9|HX0ZQF3FaF}-Us!4 znhg8q%HkEr&#j~feH9JpX5P2sH!Al;#hrLtBV;K-6q_h~^onPf!?SuX5j~%1u*&vZ z-s7h0lDxFSU{?*oKOsta&qooe7-;M?J7S7Ytk5VGGAbxCPgG3SAiM&;$<;IjNwlMk zv{A)6bhdm{5BsT!?9(+%m#$_vYRW$F_-Nt#Ola};7asqqvGPrxRAq~et@6!j2^;Kh zSr^em69MV!7E4n1q#zrhOVYfM#K!9Dx+Iy>(k>c)0~;oeWOiRxV?s#GTXaW=;2d=L z_Ee%r?H= z$4xJFKA4iBPMnkefz(C{%g8-hm&d=nHS{4rAjKmMgN{-JtyLpHYqnQ`hC?_1mW8c2 z(1ra!!`3)q!@PyA+Lht53Bl`icVdoR3+T6LQ0bB7{nLw~aQ0Dw*R?%##W%tl4q-0m zMys^k*eg?izVWC66W?lhaOt8uf2V89Ryhe!t(qN~<<$ z#L4e7M>PI`PaY9or2`(~We;@j24(?L)amkA=WgZsJ-*;w%?KMmJ{)DjxBliNC zkQE8@q0dipUlHlD7#b^*Z|&^HoygMwSoy8b30JT08ngQf`22~HIOZB(yKCkV^B|8f_P%wDu~#V7@I&8+xT~pE_VD*nw(4G2 zCrF38zaimkW{D|&E|+1tN%Msbi8h(3fqAqIjt&f8$eSqK###82ul8s1N9aM$KZ5>O zL}}T6>TT>d$12 zf#7JvE< zR#W%Oih2Q1cMe&a5)(%K5qxXE>i-kD4b!Je89y_zH*{SDSmi$lVr=GqJF zIdM&2DxEI5)S+@u-#lz{`SDZQ41;Ob9)l4+ncTBl9vILVa`M+7Vr5wUT(%`zjMN66 zjJv#FFp>C;_!=+^^G4au?hD0zR!B~#r)IL7)K9o>B4#D5;V?e&*7ayr8|!rRK}Wd~$!Gp&Q&6`L{# z=IEnj`~4@|Tx@{}ds44}y)0^&NO8!qfpvRJ3!z6K;^o1Rv|{q*zT}g|^s;e`Sp2T) zm-~FP)@+0BF`qNpmO&{xm{;W+sgq8to2%T?5|2#Q$bCCedk*z(j8Sz5dxr zKz!nE>WWQ1Mr|DIFm?PjbXmGhf`0AaT_nQ%-CkS%iTo><{f`-)v*)zOFKKh*i1TbA zw2s`AqhR`N%yfgI>bV1@<+ zP;hj=FI+9QNhDvkFHV-1zUsT{66w2Z48hJQDJs%BS7NQy2)d(wuRXQ-%b*-6SfE#5 zq`#}LgvaRu29DhcZYI8ycv95K83p3IjPsi}i_w5u)=EGKj5k~~+N09TNF^e*8Ydr8 zy`W_nYz^+v^Y0V!CCkVIs}9V{q@Zpw!$=8IL^h}COSZ<^Bg!FX6(=Yysl_rBYvu_R zkBB7&;hr{cKZK$DeAA2DL&boHs!@Q!RTliN?ZuP!WimJ0%u=9yp4m&vyC=pkwLNmv zUfJ78F2>G;amzaax)8-@L;bG5bVQr|KgC(W{-|>g$S2jBKK1%1ed}!{6ZCw#IodZXBWRw@RxQlBDM72~U#&0;^P9PDmT(?-Bf)jz5`xy7*O zA<63gDczDIMQ^OkJ8)9TAleEaq?`ZCGRJ(0J6~Bvf74At@Ua8eKBB;z9-a@y{t~1e zWv#0%1*QWpJQO=Lr-%7qg zcSRw`EK(_*2a;Yy=FBMNh7IP2*sNV(rj%AE|+mb4tz2STngg5gwQO-rt=_y`OxNGGVP?+ZTRK zjT-)fLL7=5*!}GalA$a+=xW{uTy6ra2&@0mIAep%aX5`~tcjBKMC{Ejcqpnfj#fO=u?J|#A1<%P> zkQ48@fW_NPbI!Iln$tHLc73sZd%ukfL`2O^M{L7tjIXY@&$5zWACKHviNWyxl+~hb zvdGUBc^wM+Q41~!$5ysv@WSzdJKS)tQRRM;gu4D>?HT0PPYZDKiF$$3h6Sm|uE(sr z>_*EF45g>we-iX8A|0k_IC$)DrKZ^{)Qm;m2XgGL#Kts7%9Cdy8E0pDAqjxU-0mHC z-BSfvW~R}Z;8}hmZ65ew=4^v)-g-f9A0laYuF&dQV%O=<@6Go z@3(PR+)wz2%`3`cLf4VEcJmk5a9TygxTW*4RW7Y$O^z-jhIy#(!l|SDlj?UM9~Bcy zSzMLW{k!S9Mn6w#b2=6L^}UL==6e;@eOG5n2?7uWdVr*17NM8+j$*|rGP-{7a!eCl z3io$ZS=K$=oOp@Wwn5O2ptI^9Or`b2rgdGpBCOUTSDW(tc3hSG|32@n0b1TqV!U;w zsm(uFH2+>ROUqL@8}Bx{1FeB4(xUmowX`u}$iMR|cTJ6(-{#h0pWlHCuK+LY|97OB zM6`1@$v1T|dv_vD9gh9Xy|eB35E-y_|2a|4_jro%V1M-u=XwvMcLmwiVo`Q5`sAUG zdQnP|`1ZXQg@^0Yvv@`n@?BSfScBDtdARqY{HxM?oc|UY#f$f)41sJEeb6-nz85bg z0CJ1#4jdMtMqL~H(`vdaQw84MS`nC&b)kd1kFjJ5niI~e57YcTD6L31U&V8HR}_RH z5iB)`MRov}+@P)D;2OvDGX)t_yeVg4X0cXmlP`x_|ETNyhQG`yvxQ7E+!^Qe`4Zgr zk%hVW{SwXx_M@oE`;af#i+t@($e}yk=)mds`Hd@d!Q|x5G|Uz{^rtOouIAUxD$nT| zQ4|CuE4HeZtn^ZSHm5+?egGhcP7k>Zx|lno;q@P_4S3r{0m)GNKZz)UynDeSoHO+E zoqUyvCs^yvDU`*h24h$Z`*#ku|IY&O2$grR@20q%p3jxP{h^YA!k%@e z{L5NG=-?3yM<|8yd2b*6B|CG$V`vv&F)poa4Mr}T^?BGdm6gmt3+=Wk47+6BwtW=u zUZFwuNOC-!vWmc**FhIchB~h?$}4!JU4gv*UNy7{Ls!ZNjPt+Xp3yj-@td-vTBQ<< zCs8w&o1hngEE2#&4Cc4Z3#cRT##6M++{R^V5QmK@F;`}q3gIQIfSEJ5hhQ(LWG`7Ey5R{?dC;@iER-^%Ad zK1#g}LG|zgB9?{WA6BfC-{pS9EqrE^<^2-qb@EOjp_^cCl`G^|McdlPBJ~b572k{F z*B!fZz4f;IqmODF7u%yAjWW?PaqaOD_P5LF)2K}{S=%%f9U|UPC~)6P%LDMw>DLOY zW^1sgMj)^%mu8$;yYjt0HFdO7Ny8a6rJ>KebCkdf0f4NeBDy$^ZaNeiIBne39)d-@ zCbwqrWf%!8b!%gaw2oJP+vF17e?3i@l(2DKg{j~SGQl3L395^kLi{{XWgG~8@PU_C z1Ig<1x-I7#s84+n^vl1XRBwT3F?Oodf8iK8R@x;Y`7v4V-w!)5N0M|BHgn2jeT|ek z&5(6r`9s&LG&DuRY(^%1vmx+_wEX0W+{CetAu>~Qy4u0=%B~z2Mk4H@TXF)r*hpWu zwW}GX?J6D-+IwW*RrW<{j#by&`}(GEk5%UVoB@s1wK>?x-%SHb7f|Owsp>Py=c}mv za{O)DJl7$`4UM{NGxe}ZClHKs}#cfxpMRZ35T}S^|_~wo2L9{T^{j< zBVPQ4gcALM$HTA(>Z0~9rv!49Rl48nrQyY`17X2FO zH=-0`-{_7MZ;l6PwIowNx^QJWG4|+$5d&OC8IX$2;4!w+VeG-&Hb+_QKMVPx)M|-{O)=BLjhM>A8dD?kN*-BwvaWksU`dQoY z@gGc>4F?mBa&JR!O&=P>v7St>|D)h|H@CT>CI9jYvEWJ_WD{E1j$5nu{_igUK^Xiq<*68!AOCdUwt6CAq2bNGw8VVecvhztZ-tmu++P zC{nhazx(Ve?`G6;*oiU6%!n(Npb`JM7-f#$*dgye?21*7=#my)e&2H@{}zP0V(eLp z&)^Vb6rFY^v}0~nMS9!G9Y19_+tjPa+krf^H+m6q^aDF{r*G<55eo|#n(?EIfA$+v zpma&wZ#K4nmyYN@Ncn!U8Mn$Buzr-P;R_b8`lg(Wo_oy5ceXVcdozAf{WdXd2D(d1 zZeZ)Aq>Gz=_*xrxtok*0CLRO_Yf$)o?SJpiIVML=EA|e`zb1P}PZbU(D#1g=Z2pEy zlyP|Fnde(-l1T!qLI#}Xw$v@NSsEgZ(^tY!F|_9pUwCI2{okTYUYCN6FBV3NT@x^_ z4>AII63krIYRYt}Oc?6tJh@P*ay++i%z-VQ58S78c)S%bNq}O5>y^KoZtt*2o|T|;cSxRh&T&lg z{$sn2en2bM(T>6x5v%ft_?GW`lyaeW7_?Sn2hq189CDcBn-A=>Chyt$NlQk{!DWm z|CS$dG1_2eJTAycgkfO*2~}|hp^Wk{+WVsVQfZoQl4;;+;qkz+M^QK0;o<%R!p0Zz zd_s}xV@E1F(d*>_e+q_IC!l-f$sUJE5&X`vd&RZ~H^4*pu7g!PIPc^S^xVQjJMN@W zIe}ctl&|efzt!`}Y-PJ{_|@+hXZym}ywcX4Q^99+LxC?D$<>cNhd%(|UD2X#VQoBy~djrow?>=(TL_hc(YaS-GSsuKFIE0^V_BAUDEuJxJzl%%JVO<}7LomNEY~CfaY}q1XFKY&76VR+c z$#z7pI~|sMk=L#dt!#>BgZ2mf47;%jmz2LT*kio%is zc|GWWj`7)Wvk6@6nK1fQTrwf2_;VaJ^AtGctWk@zZa?1OT=oY2ADYhnpXvYq|3c(k zRL)ijm7GFOV?{X@sTeuTAxX~XvyoFWmYfoXoGOQv^I^>SFy%0(a++i2yv=E2wy)Rw zbNT)Y&mSJo$K!s#-LBV->`Ng1-IbdaM+%#VSDG#b0czxypq%8}z~76RxLyzgM&Vz* znVmUvOJTqbcZ29BS*A}!IU1v2J)&;AVL~xL4|>z?&y>3={gl74>9>oh!N~yONM}ocn_WX9wG)Byt`#$>qN*miVBv zG_WM*n_I_ACij9`xA&3I7GzK8)_bO1YC-*I#+Q)`qYB}PBh~llv!1kno*tpA8aRqk zM17_P=VbMpz^4Z;3O7^;zrqO7fG{TFi9~(RpmOGYtU==|UhE*+aWJq8~eaIdki3YLWa_;o=g{*t;=8;srYk$0q_}exj!)IHG31 z?DvX@{2P9ny_eOb&%3PoBGJ|42l2<3tdFT!6;)N?UOEvkq$9)P!yW-cH{O zK0BbK3NroElEMv1G;thVVwh0by)P~9(ih5+PM)_zz=3qyCn?@?{VNs9H`>pnDC{)crLH1Y3Ju37#2}kAv|D#Dbts3UX zWk>)1E=o#e5=DS1c@{PeY5a~e$?Byr0Ba9t#LaRoS^KMe6Pzm}+}rU`&LIS^*D*#V za!sW*d@Wsfb@B-5FN$hV^=9h@eNqxmR01z5^>p#+^&+A9yH`%v=r|TQOH^4XD;pqo z^+v-@F9h3e^Ynr5P!gr2ubAK-y&6mQ?0`z3X5Vlvyb5a=cM~G>h0b)z@icwpjknU zdmC&ay5uU61x$JBe2L$t{buRa40SkdILc!MbS8|`cH>xW-XlM6!tc_s`}`}0x7C`h zksM~VO&n4aVw$nA#)|f_!%`PswFo!tcf$` zD0&n!8|fTJ(pQ7AcD%UfoRDYI^!Q1^>Wmmq&nE;B8kowaS!xIVWSYpp->AV<`*-T|BDG0d`fh_UaA3~-# zya|#Rl9{i3z*6TZ{ko*vUB9x)rA(W^C3v|AfvzS;O<*<3{2tcSbxdpr^A)|Mj;>+OQB4s6TY?dB}3~=-1jg zz6>pb#;emC=9S;>{OX$1&fz;}O3yS1Q$2ciTIP8i|Ad@{tq#hqjHu4^`wCL|k3VEc zMdB74GgftjWS7@4Y}Q8cadl-;e}CTB%LGukILaV7!4h&6A3LKl$XyZ1+$|oqX>|1| z%e8l6*1K0Uzt^Mjzw1G!)zi{UWYT%RzI{KIA-dZ462-i^G@0`nE}O7>>N_A5?Pvqn zmUxxUXzL0dkgIl*(cl&%O;Xf;B+<)N&_k98rfZS%Hs89VkE!U+83OOK8Uc=uj z*7$4C$I$Q*I4t%`}pii7qage0KO`P(AZIPq$Jwib8a{trw*PlKj&y4;VRR?BW1e-z zE|kiLVCwP~n7hfjZ3*HMYE-bcWrK0Gt)!2-tdh>2hut`O;=313krC18$-;~H>1T@{ zi8w=F3Bo+2R_Iyj&GhL0rTWIso%@jU3R~zt3}SKy)}$d%jv}fM3wXlufGeb-baCz# zlWEJo+8f8+i|2k<{qr^>|8nCrpZFv5g0a%}wdyc(n!*Mv7kyrOIY!#eopJ1|or8z& zeEwi_|M>U7NBQvDbQvy&eKUTs{E5L-yw|0Nu7r4MtNQq^9SYRBGWHgoqA;Pln?Lk8&} zp~Te@79fAnnImg96sIQbOv6WlEEP^{U=P#uV){`Anle!QFfwk==ULz0i*N<@nB!I9=?Nr+7Scq0vbgS|a6=4Ef3t@gPlnpble3cOWJBUNiyl=eEn~ znTt)w-Z43iBYUkp7!g1aCE8*%j6gqaLjMgKkcWci>^erdl^Ap7xjIK-_oeg!z0CDj z_Tg_P`&93%t3jFYYL%t)?krabF3WlM4}Bk@jz2B)RKN94^Gz5naycLk$mMl^$U6R~ zf^JL(eep&4s}bLWQ4WmJd&Aqa%{;?WhYDJaAvN(@O~T>L1`x&D?>5eRH|A1>sI#Ia zMgD^*)yjn?V25)?wjx}8Eh=3Mick7ReU3uK2}YL$-A)WJRsh}u+W;8r>Jg@nqCs;h zFKc{13YoblBB-_XwQR1`tWwwc@Czo20q0!bg-X^}_<2V(ukeIq@(1%yz!AyL7b{42 z+uKbbgFdli<|?c!Dv7PEZ7zgn?fN7F_d3RG>hx6>p4NLGCWF!|c^yA0@L|;C)Q_{N z(n?Iq(DyTTc=^~AM+&-aC*E{nx*@CSQ2p}2yvx)(=oRbx2REXi3}P$6XB)~2RK&Bq z21>Wa%?!b3l|P2hyFl%3G@FYldtw&qMr^g5M7q9R4f$|3?k4P+Fy?36s6{WxDE)K| zXZ<~9@O;z2G^b=lw)gvF-^js5bcM3-+PjX{jinANN?UMy1=BbFINMIUU0+TSkTH2f zAR1C4j?*J+k!qQ=SZ(PiEosIPiVHieGzMU1!{-}Z;X2Xv4YAgbA=D_2{&$dfQslN+ zzuON167{@-tVWdZ8>8Vds~!ytai(v28x&E@o4A@lctC^PKg?*v_gy$~dI<7L)C#A5 z)bZ9`5g7G260oe?BgTvt#hcHj&RbJ_YX^O8h8Pctss&<_qN4&(MWHh#Nyida%PP3A zUG+-Hi`81?h(_kZdraQ{MHe+OlS15ut5?*yhsDARiUgmO#P+JFPJh41fJI$k@Lc6F zjtCAbiU;|1lJMGP_D=fH-e>#v79!nk{$``;&Hq@cZc#4}>BK18HH}N`t+?`k&E1p8 zO@bM;e%r#VJ|rA#$E<9Wechr8|4L$At*v7EN(9dF$NNCz3wAD?E57Mz7pkiysMop_}zr4MLL>4 z8h6*JNw){Qtm7cnZ{c(A5yy!)l>H0G1}1^&@e)_4}^;Vk+E=nM$o8(DduOd0&Z zo4@_q@b(Ch(8ifcF#T9eTwagkTZOhGQ@s5_jq`C+2>V?3YY}f-|5DC-NyEz&J#uSh zAp3lCzpMF|b{Y8AQ}|o(5A}ja+48p@F@XfPGpm!2Urfd9xjfk|)4s%0xpco$&ATvXDbARpN*Z70=xE~dQJ>~5LU9y_8Q)~%N$H<;s?9K zQRHqp#8hke@vl>dl0um`@+W9m^Etk+wj<7Y0>sdeAQwSQOfBaIgj0#V@F%+Q?4}*U;|BgHY z7Zqjpw3dhXF9+U`TQEXtV}3b*u2$c1T0BvC)L?}>ny6PFfU$O7{A0=RZGdg?Or^8G z6G!+l@A{t56zwt4BkzR4vY`Se`=(A?cn{Dum7UAexfFxupgx-i=9Lmx*(W_DH&*eE ztbf)ue{o#U%hgw=<~&lSz6-Q;KNlX+8}z@*2@9-E2H*6d!B*QE&Av6nGo@hHs+sM< zr?1srYj)pz+{~7UcR9HlQ2^9ZA5;GHBML7-p!}YW7Kn^+Di+jROc&3!bvse$sASO6 z{R`^<^W8M;ocMTlT(%Fa{;sZz^}^xpe3tEQLg>lw#9-Tm*80f9M>%CMk3^3S99C{Q z%qCN|)0+?gT;$}zPAteUiLSZJ+cOS2Uzi0V}9&<#y6Fl8+v9OM7 zFRN@?e+>hTw^f&`$JdVw_sqwv)_9_bx?Ju10&hLIJPTk`fA1}lRz67I5XYTEv#a6G z2bx(0iL26=>oXtzLQ*EU@&li|QF@cp?A~&TE)ImZZ&12tmlw`Uk3GBnfh-l&=;G-O zgQ_CsWn-#KnXMyMIpgU1E!F+?#Jdf5bUSxg64q6m3B`*3z{T$zCf#uCv(xH5{yac) zU0;zGZ6|(-)2xf^Zxrg{Jb=1AT|9+#nNX7>PBT0kz9~y_@PE!;$-=Dqc z2Dg~W(oFY;Z#@!OOcUfJRB{4de#mutD_A*m3wV$>A~Da-DgFA{UQ`{U{z=n|QU#*a z*s)QR@n;vXak59Fdfc?hxxs|pnRKf#ZSY~3qoU_Z-6c>E!f|m=9&H8Hv)s>q#hYh; zXNMC6CTFZkDlwiemIn=bO1SX8#XGmAmRO_Yz^r`A{ht6FEDLINiP@J@4FGdBE0-(m zor*U0j^80GvByfC?I{QsH*`SaTT($3{Z>0@AvjI1(?PhwW-Q98&^APKU}8&zpR2w; zuH}3DZdj^7VLAelWVyl=Xc+5?s)D#wnZMkUj30TJVDrXTev#tLD9ojTO)F@7?OuE05uSZf6a6G3Oo9DJ{#S3q&ui)IG-kV#ZRjl&<}6KurUfz1CtUdH4 zAwx-r2pe#ph+Y+&xO|01|v+X_SJ119BMZ`zmeDUAI{nW{wOI-2z1`p?&21c&i z%g7o6v-#(UT%|>;=MeJew)xXA+ryouBkD*x*|kAV_(iN4&hW%&?c339VH>Zg(>;(K zA+i7Y3tV2)S0Yw2=SHc(ua++VI7Kz(&p+w6Z=IQD^T#iLTkw9@Kh4j9g1V>f|6;~p zUw@zA`8mXR;?nnk#~gg6G=WGlOyGF84kgqg>Tf(s?v;qc%KEvUVZXW)Af5;JUGmAI zFCh!H5GQ;$-;=|g;DF%gJ%l_c4PL7YWL@wtr)I&;r3uP-9#k&G*5>6R&vRKIhH_m* zz_!D;sGooJ?tqHC{B_ssP{ywdhXO-Oc>h>Gx!#-HrnF~5JuUoK?KW}}awvPHpxL?P z9*aG$?VFrw(Un0L@|@4{oX;bM-1m{@z+we`O1hQSKE}V0Op+(3h|Mi4pyI?KS9{j3 zugTLZ?iI98!RG7BGWJdc?7^RKz3ipZh}J*Vx5S@V`eg}%Q)VwCPAyHh%Mz)ppAe+8 zR~JF|azd3C3C+Ag3c&>HuTY;s@rs{%D1|RA=g!WCV7+FTJmh@m&Kz~yufJk<^qm07 z4EK1XOMGC26q7C7Dhwlye{BCppTA8v)_i$t?da24%*5W5#M{j>1XYbXqRPAl-+eD{ z@co^HS^b7_T)!qylyB3psFSfna`F?tBO=yt!eq(Bh$2+4%4CAR%MkkB0uNQX>nE$L{2n#3vks~%-y=U*z33#bC;02D z&C*?^wnHXmtn!3SxPM}`fn!?WbXz~XGw%En;$9qALBZ&cyTf@K=qYc*5nW z-dA>I;#ftUT#+;6yG_#@tT(}sKDDq@$6>u?(Sr+za)MROfAMOPjfIAn6Omi@E}XHyM082GXHuh;zGBuFFWQf`2_metcy1o%aG zxnuvR4ddxIk@_tNRu40MyQPmtjSN0i5cKGYBsj&mP+K>bvhK4oaA`vug+y+B-*UJx`j3 zW7-qoXlyqa9K1JBM(oAp94-X=8>ezV@|88`!jyA4a>p79r=P)XUg8Q)at=Yv*Em$)IDxH|zjG@3Llwsq3iiRh?|D zj=YaLX{pYCR7~}Rzp}oE>P*wqGwWQB4|$S$MN4c+A2T0O0**3U_lhlts7dwVnWkq3 z>K%j9+9`JB<1S2$1PTv6Ft_r_-o)BX6Q!CCGgU# z`MvqZvPeZ~U|)FU^KP|to^|iROEK&GN z$cw*G#QM}#H8AbUxO?|XnkmNjK*lpTk^e?BCgcMta3GwASht&5L^K`Es?qTkw)pEo z)z?bRyRQx(fZ+R|b&$YNd_rp7m{yBk_#bZ6i-L#k@Wgx2M5Pm4(VE6Q`olq8mgBia z8R`N%!%yu=%sbUpw`eymlihA^IRQ|YQIf~1mY!y9Gm{ItHEe0L_2J_e2bgH@2=eY} z_CC#dzE>`+{KsCV9cTn&qkZxz?2b{S@djvzLxAd8SWV-Mre&{{XEw5@aYOGc32&%} zOUyIm8eIK`UnP zX)yIEX=E{@(DUnHRf~r6Ct{lk{CDHC`MihABy%LiHu-+_OUiJaWL8Z0f+L4+w?w%r z?aCGj{DL_;9W;G&NW{gp_ZjDg8<_4DlK)#@#;BBy8Wfr7g4leRVTFI zK0th59;ZIA{}WUa^(gFZ(1dq{S`fN$W{NP+<8B0Sfq1v%!1fRW>P?KGOvPaC757D+ zQ=wrCcs-pHwUe(yO}A+dufyccssXwIQg}^w zo$BHj)YrV`b%zCW_pSh(Pk0sk;?q{a)!CKv2j^+eSB@zqldX>t%~Gk?tUfjWvy9oAeI!y02$+&9Jix*mc zU)1xfw1S!Je7BQfqhN9Cx&sg059u`RTqt_{$jA9b$Y4>GrSS`qqRd;J?dDh|raC=F z>fttf&zl+MIP2zNGkb7y)q7Qa9hGyT_fR_`T?$%~miJwfysjW0Nlj)7#%F>V)1cBi zn1=hDXyaisKAQ^h^@;`Kad??>1dW5~6$cB<^F!+ucQd?UQBNL`)${1P>772z6W-zt zmSDk;>7b@-(>&n6c=n;lSIj)oyDL1ngYb-qrEKJu5pNAHfGZhQ=8u1HGNWFn60Z2C z!aT_k@>2D|=P;dSD}ScRy2vEywV1hwGR9KIP_B46Rmxsr^{AQm(KFgj;eQ_tHr{VQ zP?jB;a!;nQJDFB96QFrzm9fK{nsy#JC7zqcCjX7=N1tt%C5`)DtPaG5*CTsCn5Cp` zl{*5Ve;ST|4Zlgxd!#n1bCmq7@jOkn=Zr%!m19lq68TwHov9Oe*KUTJTrMA!m+hQ{ zx`4X`!_<8RI2H)H|EGI*Ch%}|p?5XVOGQ5t#98?5UfUX;W|{2gZFXwKx00UKiNJ?x z)L*GRs~=Dos_)dEiZHaLrPo6c&4U)Ivny?wi7q}9;7r@0NKX9VDM-$1yH$Jx zv(|qHG21$Ju4pF+wYq;xvTVf?iiMnDU2Qw~P%Bqu7nbYS-=Tmv(eFo1PFXQ7 z=xbxG-(=;~uhgo1lDj^et*|_4g~Rr2&)h!U7X}@SZ{!?4UqE%tE2xv|M^faLfrG>7 z?a^Er)~r+B8wNNL1%0mesv~A7^y;Bqj;K?I+Tgj3fgZfDfRp>*hmLU2g*n^-yCfm| zL-1Ko_g40xOYQ>|w~?-@c?Ru<{^=v*TsZ7*MXx5{XgFR>f_mO%s;3B@G#-nr^7(P8 z6FcB!52^RCds4~doMTi{&6Wfm{KK2y+Vbmf=szukYv{}Xd~ECQpaRiHKdNey6~4DH zKUGW#kSVW(?~Eo?IwDbv;k`nfyzeS(S=H@kFcwP}<1OjRD~_{?G34l)<(c+4A!4IvT4wP7Hplx;9Y@ zm^QLr`A^1s?6>k3Nllkiw>SmCG=)oR_{|5V=%S@ULA2KUz8ILuV)agL=8ebVCtX7| zwH@c>WcSkG@-_3k86a67Gri)0Os{R`=RI07h&wJs26VecRqju_3{Yrm*Qo6+^{lc& zgIxiH;C~y>Ay|lo!L5Jfiz(GVRZf~us-mIQDqfep#B&c}p@J_Z1U06E6u-)5Y;*oe zBtHMFu9y!F+cydv?y<;r%%6K4#3L=H*9a*CeRCoBPovh!$*AE!7JeAY3w);C`djj&w)r&F8kB+Uh6`}oq$Mq=nV#;b2)E01>vzb^7aR%g6#*~Qccs_L`AJg|!Y_?qW!$-UZs|_Y z^_lo|@YD^_@T{25Y_Hh#4Al(7L{hk#Q-(M?ZRV-^HGsu#)d!He-bgCAfT@v>jc-$y zI;R%UWu{zRb~|KBI9tGK>--_|WD03Bgr=XWeRMuRe&@vnyc$av*`L2cS$t(x@#LXO zV^>~{glN(?0vBORotNrv#no_DXCb|anEogZWI%ofpw6>GGY$UPZkHZQ@;6l;bf-U{ zheiMPk{|W>{Zrl7n$`}8=UXsL9&Wl&Id;{#`ExkFAf7r{#{cZNVxlxyc9~e6*7{-Z z1+2^}${lJdm?scbQ+s*q9(Z?Es)4=u?{-%=4#*TnP5B0-ee=F#)X6Hk&+}_Y`}ocl zNnFHV)eudLP`7viEW4F`Umd2iMF7tUt%lqXuVCr~Q;<1EG`oo|*0 zoKv&@W%OrdkEPN>oE=_2gtp$P-845q_F1^R<3s=tsRYVZTMsPKKF|wz~_IOg}>L z$DJ!b1w4zv^f!CDt=jtn=+okIVlk4fqTS^2?l)r-^le@U)-FJSEK@BWCeh(49FfaL zkq(>-F3r3@)YvW5xl<24u1DHy(*y~i&KSSk)GvqK3nDYKpWjUSf30p30(Z;(+Zo{O zFn0?i-kyGo5Z?8fho@AcPqqWm$Fy$0WS0u&shG6~YuOX635lkP_k}+NZT{?)JVhgB za$QQ@*NC}t@A#8&`9FPExO?$X{qs-i?vOKAX^#c=__2seJIs?AN>MS=FI@9t^0nro-X9Tm?;Fqg8S$@fL~#pvR`gablAO$CIn zcb_?Zgf1;9v|3^pGX9*w?jhU5&v!a)e876oH}K|*$bh7bVS{*kRwffkn zJ?LIlpZ^(F;Uu(}XF=DF*`WM1X&6LpY9mHEYJPg)YEA55pCCTHw$ap{4e#0%!^Y7G z`139r!1>bvws;e~46_PA>_}+hqEm=^y_|qpY-zT&}sz?3jTT_N#qDFFC8kxfb0(*qHpYSuGHks zzAY?LmX5U1cbm=1P%Iyehp%QOK(9d0v>_)nF5s?f zs8iY87T&U_R&D+3mTdWrtB(ItBtBpS4MfC;W_W)%dN1H5)kl(wNP74_&@Ve*K7Jj~ zfDeV@feC?jKRS^;GI{|QO}wJY5{@6GeWQ#Ztseh1*DNFnhS=rB_dAL55x7~fhj$`r z+zavl?PQL)hWvBtLq%PVN;$uS?EbjhUTtbh=p*>pV6TkHNTE{-WZw8aYT|8=AxQ~H z(sxZx#!SL5DwiRizqmF?1YkTnE`iXu7c#E-qoVqK3UxVajJ`!r2YD1HdtMJ?f|oTO zhY>=x$Y);X6_Mo_4oxEE80y9yBu6_1a1qxALCn&38Ao>P?zB&QgI>E!EZq&;gBXS( z=*=v2qepx-nP+g<Za8W1o))jY1ek-*ozuo}II1~5lSxxmS$>}2bcIl-Cu*cD zO7hzd*YfP$>I+OmnU^6^^ja93oFu|E$gMMCZqJfBcgqXl*uzxxEu2q)dQo?A@3av! z)5^-pvng$ot?j4+VN9%KgmJ9>k~t%UwhAA0bKmSZ7Zy4AGnae!nmSFAC5tlh>TLhe zm7gEy8W9&ot$&?Of9t9e;1$;HYdV@kA7GE(bX2)<1~c$B&&~*!-jY80+95Q6n;VbE>ZJ>Dzby!kU36W{*9vaE z*kDrB#FIJ>>h#TO5Hnp1ThH~k^AtC;ary}TGgSd2l;227@Z`MN?0q$-MZ(T`$>}`0 zpK?o`08dRtKVWUl@U%)s2}})|<%-HQtY?-2Dt(9ph0pY;Y$_eRAhTC&6IXq(w|&x* zKO+d3dJ$;SSEQ6W<1z8{igpd4Y8VKS^y%mlFXxVi%vP6khG(=NK})yk_z^vT4g4zE zMBo?h;h%&aCW>)@`@RGzJlCijX^lmn_r&tIc6C1}in`N%YlUB)SIamA^=k0~wjnp+ zl?u!HnL1_Po*NEBuKI#?nSt^T%A4z&bh8?@NdqxE`X`q9Oi)*mb}QDj-6wj;{kOP8 z6z=U{yhZU;XeXD7lK3$HKpRiLV6Veqjkc#%=-9q)Pr+}2Z~O`@YCj=~t(kXD<(Kqv zLTk>dgO}|krcXQYn&_o%_D4Aj2IQCbrWP)qI6L|={od`3gvOKp#CoIPt-fhnJp%WP z9-cNfpL<-B$lCmExye$$;CMON6d|m((VT_K zgUNsC!>h>ufM)rGC;!~`swiD48E@#>wqR>mRu6D? zVf$mhS?)I@wI%}Xsh)*;`td^6Hr2C44W*#rM}KYKnG?rxnI@{h(<*3G0rH}*tt!SW zENI254`irE)=3=Hdh|CAwD%sKZ2F_*<{nMa|-6S(6r zyid&xtfBn z{Mng@s;2^)BCm-|X(@r5!WP}Q4)dJQ44jS)O$xJ>oK_pAUf{Dx4BWCp!CBtPqnN}% zS5Az35(X3|WS55)|4p9Gktf=Vz%2d9!4=ii`CTF$8aCm5E~~TLr}1q~qU2ZapXsZn z1c(Gr-U8*;(P8w)R04^k+bIORarvXa@W-0QrF9VW8m9wF|Wl&XylDT;_-0gO<8fM(8pG z9AgAiw@@^Mm42RO<1Xx5-Bu!f*boNtqpEfSG?xC*&4 zN9Uh|Tpc{96Q2o@oe21?3#smz=b4c9Am)4g)3o| zsx!S;XbK&9kvkXa-fEt^t0b<6+dcbK%Uydcf0$etX5G^$O1_`3o6Yyq{k(1c68px3 zt))ln8TDI*vm1rhL$yA-lbUHKpyG%+tj9qovY_E4P-sp=USn zwx4M&W}~b0cfuWhf!g!>PAZvCf95m2RR>g(|5+*(bD)+!&DP3U6*YK#&1WAstQL{8 zIvw0%8TGxVoy#35gQxJ_AbRk};4d&{oeaFiOcOu8@mtL`cGqCMej>Z;%r zR_^{$_~Hx?disqA{jp->P@{|pEp|~`&j<`VGgaVD0Aj-xQt2{e9LrE~+eVN_CoUt- zJ#n~&TVLF6B=}s`Lac8uQyhHU$6fK9+b&CnMhIDGyqHFbkqeD!s|Hx>~>Dy#;zvcgg8_EbldS) zE3nXA)5*$8|FT;dDND;QCL4S5%2J~h^<@O9K^f}|Yu*}!L^3FrZbI~Q+V{bcIqk~I z>h=fT^yr$W%I0e!^I>y3mM3Zc`kM8Fi9Z$M+j-u!%E{FyyU0ak2E;W9-eDZUO|gZv zGM_-N&dCu(Q2#!=Cjair}2EKCyOmb!tz0PNA8A8lO=#2 zHW0Bhi)&a}kAiWuDTNnogUMgir4&j(L6C2{BI8_Ei^qFMudVeKKU(DY?S%ui`7_B- zb~`pDl5#$m6jks@!)d0ncLW|O3RD*MFiFpwlC>fW$gE><=}3=bvF=aV7&GblXKnB!0!?~f%SPnbAgpTA!vT3hc(0ej*zhnnh$+@AJy*16l` za$DjFYunpx6z6Cw z&qmva=5CebTCaG;419OAzWw!(axdRnBwo{`E*9jTX`g0ogl@^M+Lal2MX z%wVpD)k~Q2RwDoWWc5^Y#3@-WJ1EM5&qqwpTjVI13VMPa<~-viqqaPh7y%y`x+0S# zMZ>?_)Fw+lkLUnD(OD4}D{N>{unH!)-tb?UDy+48Y*aAh%+0*7Y!vQqmA8;tUs86I zh&bCq+W6SYUUuFekIBM0ZDN_jZG#Zr!d2*mL(r3*W)~Le3ljgI1t1(jb7$}LmOR|H z#Eq<(J(y4i3M+LDqqAB!^DdzQw4pZiecRD!fYWgQF zxCAZhv^(KN&l(?xK2S$=e8Oqio-LPX2GW1Ncp*mrw81HJ27E@1179~FjK2uFFV&KJ zAJ5K0tYbgt@p@Qww8~WDSlh+wb-u+rx^?FvDX%@aU2A3u;_v+c{shb#c%ndKk%s=L zb$y6xc9q&gGSE2)wy?LJ#FdZXOS|fwX7?$Nj<9FK4;W#1{-@^1Qnb3-lKZ$uZ(gH^ zM6sc`#u$=ogT<#;P+>85+2$%1^uff+hjhTx-J9P6H`rHvbfhP*-!lK#vvbgHtme{X z&Qb$Ozoav`2>%(1C1RTGcoCBX909!~XWfNGZU4pwggt6Zkht(xD6UA|n>LeO+A zD(IQ<@1VD(f)^tzTh?|o{s=4op33R+3&c~I#s-x)Jix6~z=8%8>h_7YaFTcTek zKzJiE`e)1poK);YtRrV|Q8dVXbZuX)*%hy{kjeQCw~X zGM!xY>rUrjmV+~=d8kKo;fJ%CB)RP*GW26w1P{}JlR(sl=%>w>j)4Jb_XL-lnBg7% zT?l6hl;(&;^vG7%;&ht-3eN%)Cx*K(@8#2B@-cf)$LQgV@6ZL7SI$wCEW3US1b{OQ z?nt;U2X$-rYDl{i%EtFq&gUdYV*a{5PPFmM_1UJrWmo!yoN?pue&VPZ%05Z7{(eeg zyExBguU}vM?)rzJj(>ljLG~Ir$uBzU4PiQ!+0R(Ke;<8e)pd7%Eo6org_o8ntH&;+ zdT7NG^&qD>nw*A)E=%u%vj;C{FGI>(zM~#K@i!M;e~da>Q9SW3vEdh6J1P{HC*O10 z>wV}v4h~*PjXR^n)Xhx~M`=t>`);4;L3sSZcC@*-vpM}K^Za8XV! z4$>Pjd9J0d_dj}N3gB$nFNZy?JSP$Bd2Q0-GpTeHTHCE1!3RTBvn3wUh!+E%&q6ac z;R-Ls?4;dzoTq!}7}te;>P*4EV0GjrZ~tHJ{*ND^Dcaqd0Qb57b`->Vugh)=Cey^He8Az8Cj=~ zb9m3UMdHRMSU=K6+DM+Nxb&XE=j9}~psuwq(lkS4hz_8w?#P+ilTxDxUc4jHL<1Vs zhxJe1Xe}!4z;i2U7HmwK*~Fz9Q?BuUQVMoTR0TtW3C1-?<`Hd6`}dDLwds#ZNBW7K zNbC4QE{ZwQszr#hxrjxzfC~wr1L=7KkgfUUB`5#wGe>LBfT6EBZ1b==WfjKcI(SX` zn9&prMg+Icukf^z5}eO=yQ(Q^I|KRj!UnklXm=R|>i0jXjwiVC`RuX(Jj-pz8Kn76 zTKTv7W9x-%{#?5MqwmHDOs0a77_mgW@<>|t&WJk|v;Oh&NrF_(cN1$u3f!$5ta;>* z?UaV0F|ks9qe89sE$h9=x5^`y5_6t>HWnQbj35$2OW+}&9lhK5K}ysUbwkCVR7r}r z>@EGzJX{eg1(iJBr*8%cT#*MbB^`p6{jq+|Bfm201+86Ax9`*FU+K7DF?O6lWhHZ5 zC~n;kRy>%`OMqSKC)S;KlETuRr9@|j0JR!Z#(_`u{Hde4CF4CNe*>7d-}pZ;w#j(x zSCYetoX9=BHh5P(9mC=^p{ja8T&R{d)}U<%Y$FF*Su(CAVuOF`54rGOhEF*;81z|j zi_?GS?u2+sJ5F};ZaF9}iSN}^g3?Ja=YSM6rzR#=`8M3%d~2fGX~SQ3RN&lkLgDO) z>hL9|`^C8q%iNvukG=6Xq#s$y(@=Ex*B+*Ul4K!ILdVf3gsIC#WUBct?_BUY)pL9j zF69JX*(-G$KTrAo3|-ZqXirJwGk3Pg9kFs+%q&TC%Re2VK0yFa*BjbS9jOh=eGY8 zYr^V@0=t(>FkXEPPbp53;ZC2uT{2|m7uY{Ji_&GEGUh&PIXCpl?{YdrZo66AX~0p+ z;2_-Ztl=ND6b(GuRX0xBx2(}8$*sF0TT!QJm~8L2KPMxWw!zD{NC&u-TH2!n5M2$)S3B2(f4@v6v7essMOGNUvVDKTLS6JnPh_NrCp6Pl`QxvAeVpOQ=?|~4hO1ol8+T+XzVDB| zq*c1OzHH>=3r}Eh(J_FN)cI!S2fyb$#j4zYS$D@5`)0Z)7LTcZzr_hxU6KYn42 zv*JTb8<4O1!`mW9kK+#g1GZyjOWXY#e2;@W$g1^G(munHlsWDzRBY^)SpvsKi)9Lo z+0OhDpkqvY`qQ7@!T|mX{6EI?m+8FMbH`Y_^pp;K=4aw8NFn7qG+CU?B#+WP3b$CC zE9GBImy>}818>^3&x|o(`{IBr2KV#a1^ph3mj}0Q-Fjeb{4G|J$I;rV8W$;VSQ{~FHRR3>Q@8M&!ahb zfS&W4x|@8!wKsc>Km3tbhm(5^>lY_~Xv)>}E2oRT_@hTyX^px3giloBlD{w44@X7h z`!bb3{_u{9C-Um;^CzzG1d7+c94BAOtuLQ+jnY+V(P8>^1AQ9$epB4HzBLg2YDzml zC{K+m;pj1}GaOg*Uh$y^hA&}`Blvl{q4o~#Fm3UJ@Oq*A*GbzpaL>N+jc@eA+wrbL z3U3+k*od(V<}u6JQ37@%|H;vLpTPeW9`8#!NJsKcr=gB{cI4>HOr_;~s@%!YeKK^^ z{Q1T&|HK);=QRG>${+N*m^kj?&&JsJtA(|Ee_OR+3vQNGG|yulWd+XdGNfrEe;hAlLGUuhmKOjo2IrL=$E^e@ z7g_c6bsMKfMhuRGBNr%M7hTFEjloG5mvHEj6R%w53y-us6(?`!8&7zW zx0>eQTi7%U}6I7sfB2epmGR#vk$;r5}O59kyp^lfHO%7+m{&p|WGQ{1O-&fXgqd zvx#%=jyvv{;SEhE5x>3a6%NlbdC$1|XGgaq>V$p&sBriyYzlfhf;*LPR2pi0Nx!)8 zF2`Tx!Y|Z?7JY%EXicCe6I@{A14rS-Nsr3_8C+y5tTLncDn0)2C7$R@m_gXL2E8r> z(%dYMZ<>FD=WdLWdzc^|vXg{2b-$bvi@N zHb7ly2zozTdnp6nZt~P0r{5=&aro2`z6#|FuVaKRGQ#kRS4UiUD!#@cUcC#+EJRP7 z8LtwSUzhX*CQieNFEWPp*EA%LRafX0Mn{X3pU{F2Oq`)dZ;iLoq$ey-_=ToTeY)@j zR$g&6EPuk0H7s9!!dK-JUucmtEUnV@M>bGCopLGLq(z?4f)n~ki+=r%HymN|JJ#*^ zLld0;@sH=H8FT&&z8&~?!Lyg`-y?p#gxdz}563z{5gdC*m%!Kn99=GFJ=TuIq;eGK zD&U{d(H`e)#}PVDJ5MA%E`DJiY4I-vtGqmGa0amO z2cK|-(G}R&75s8!Do^61FsIuc*}l^)%J@<=zXxZolu z^a)-*{kq^27WyaC^Tk5+HpbB5cjeD}DE}0{U;fy^pQYU_XdK{==~2E(J>ws#rhNRf z>=HOud&?FXGoB?SF!%9~f82je&(Yyst$BzEWiOLOyXoFM*a<6afx(Zo&@292^`Gp# zru-Jtn}Mxgo(tjS8>K7!fqi{Tg%^{f?f3!rcHIknHkKo#!Sgns3eS;bW;1 zUKV}M)eBZKd=ca*ebg@;_zmT!>9cpR z3Z>Z|bo$d4lde9lud7e*$7eXkO5$jdm7hvayoKDn;^X8`yulj|E_}k|O@HXh=-1Ww zq9d^K1(&#+a8Ew8q$&CXlh4GNG%N&b9MKV6l~Hd$t@6o}IQ#NdPjrPxUD27e3gbrc zM>bG-+wf(VUDgag@ygY7f;!4-_q{;R{5`^>0obley8QCX{XE<>FMo_z|17)}x`qFq ztx(aJ{md%?I!XIH93O7Kj(|qke?Pa786Rc}{R4^m>kMY+_QpnErY-<$MG9Tj;kpV~GC+ z{5SEm<-Sq%2d(vK`nYF+yZFUdr>wZ>a1xGRe2k$g*O!UD%2RRCCocXPPxM75e9;$~ z8rEO&(Gh%T>Z)=zj^Ha!e`KXEr7!g8s5(Qd`jXC3u<8gsxC%py{=ndcx}+uHTISM& zk9?psUBXpQ^{dbJAuhc0lE-w9(i5Hv)x+vtw}PE`!ed%_TnYa)@SETth366Ew$UGU z($1fwpB#S6Ti()MOoC^)p-0geE?5F1U)x`hdrVkW3D9U;?_BE!YJ6M?Gs9%Cn}11O z()%bA`gL@u%jiU2{JLm?N9hSY za1>9))%3@|kZd1c!_}|;#ln4>{Kl>EC&VCeQ1#6^SET&9%tvTPU*S*0vtIHnJI~mi zU_MGICyrlEVD_j>-ky%f9$GP}KB{4E9Q;e22-+%*Ji zAD72T*GYU3UngTYc%e?5PPzD{sY6%&35U;c)tR`XE3$^;Dot6#j9aZO8mBnlf;L~F zM^>oL;Dx$T`o)K@@`yaj75uzKrPcg(}yW`5_I{ z(ET3q4xR^z^KoRi;@=ANd&Rpj{Px0ggkfk}5opI6QWTBhk|i)U0GBMH6K0@oc8$}{ zyQU4*i=kOrILP4fDCux3_}l0>m(r2i0b9b0X3zm4JPY}wAbbh0HC%1{HD4!^=23bo zZXtg^PWj@hOmM>B`>^uFAD)COl%`AB8Fr9&>zC~n2iCmw@gTI1@_d1R?K|(i_ugq} z#}ZnVj{U1CfmW8DW#S5_qfGj~WldMz;9Yx8a$a$v5&jIghoN~B_Y3LQF9BXgxI4~+ zzty3i>C*t@jAm!7Nwcnf^d}q{C+WV+q%U5-uFoHxjX0q9{fRI53adWj$m(-HK8;%) z+vQ!GHEjHG$=fIxo|=}(n)iidf>%EL6<1{|PvR3MkHW~tAG%PQ`q&zs^JO2(z_Hr) z;hW+bz+TJJ-oBRCGMXnJla2ns(1kvInb75r3(j!$%VYY~QDJ0*3!n1AsfROu-P^tL zL^poNn;o=$$C_Q}e;W8CvQPLB_HNr}XwzOlb@+}u?r`PLbIIdzh=N#+>jsV02#;l! zRRVJ#_`nCg{eACy-;3d%`^8`U#WgK+I~Z=74z!Cw!%yct#VVi^%Cg)*zVR;PUzVaZ zV9G$U(x_^_Rw`ThN9n1!h5XSGy0H5Dbi;jm!r>joQ)%(nxFX}^JD7kSSlvt9%JT_$ zKgGnm{hoX7IYK)=-cnG(*sZz*C||FHnPbJ?JNFI&_keqncKs-Q*FSIfGYR^M$NTX= z0K5;rdwDz@?}~}WdTSf_TRL*S%9S)}an&!cVJGRxg-HToU)%5i7$(!<_RcKl0`f-U1O~3L< zLv)GP8J4%t&lo+20q-}Uy?({->#oPYfqLBF%Rjs@G%HVZG-domPtuh55)KrfCo#`t{> zI5z$$gp=Whd+*86IM&gX01dc}!gPqAq;da`9bs)f?PU=DN&4aJt)#`J^uwMJvU8qG z?p(^xU{D;Yo>90Vh7$~^-@%&|r*;Py<>?;<@1pwxv`?`5@GaWSL5#m+mc$9hITjx- z0n65xx4!c`zw;;)yx-OJBi^oxJW3sS4(b8?Uj=>@yq|h>lGHH#40tEd-SFu$u{P++ zS^7t4LY=VEs=qM|e!?Fa!%pDxSK2}{kqcd!$dT9X4bU2Y<*D-Iw`+spiD6Rpt1IaX zU+AM?cw?9(eHA8sfmKiB1C^`(@CGj}kGRA`eRYF#aDnKUpq?k$LY?q@u11x5rK?Lf zsw~7uN1(XK2!j{){Rxjsue9i?WfvLaA1$=VKaikU+ZR?o8YiQtaXBF^w-}SC{eT;K?>-k!O=cm@h z`Fi|acirWcFi$dYK0-(IVC}_5o`E7AaxD^6?(9?ezjnnHSL}Q9o8K(Hn|wzq8zWDo1l%Q1e)jg;Z=d4(rn78$ zP3_pRaX<1%#U>2n=5*xZK&_7s~=zFz&mz!7f_3@aV1^ilP3Lf z(HmN1tDL-jK5^l#vf-0H%7wR2t9bP$e*2&0QT4{}c%3w;kNWmb$X14)kMz-nCvik~ zXru7KRi4BfTA)1DMStRzR(S__zuzmK;IXy`>juJ}_j`;s{TN}dF58LUyD+^I^ALuk zI}uY)Jn@9%&v@IHLO2<2yaISKN^ub#ANtUTJj8v2TQGF&UwZ%h-~R%QKL+_VD|bhcZ&7)@gl9{-PAbn@xf)me!uS_T$3pbrm!o4L-K)Vfh-;ea`9S_Hur`2A??E^z_XO(gOb#aPEIoA+jG| zP+s~iLuc2#M^A;iZQ5~~CT)$^uW92$6Q0l|4#Pten6S_e@$P5EdG!y&F#I;^?RQh3 z&yvp*)aet{kJHedMb1USu6U;{v*NSvX@}?9N}C9KxS|rcrXj6}yC+_<1gOLhK=h!S zmZ{VqrgHyHnTD5EUN5byEGsd1_{jG`qW9mHf5S}5Ytkg`flFn=PA47DQnV`x-w2s2 ziGRIl&4>HN97KRB3(hos4frKG=7an8?d$jbtyf_$Qx4_tKsR9EoB8_Jzdm#3%$Z4) z!7I#~U1C=7JcIr@^g0L0vka`eus_AO@*Ux35J!eHCN%v?b-<>fkf{A$b8BmjumYF~f9>sX%s_I_|h@I&q1w zPJc}kcbmWVhc~#$j6X7jp{;RochQT}Mkcg=YnAF_yb^~ztnkk{bvmw?w$c*|h**#7%yym#9WsM!9i{TnO=KSf3UcaJ^x*jDaQ zTlRsBWyCjA`X%Rz7Zs29{~P6`j*>(jq(8A8C{h|uYB5u zj79-mP0Fn&n!r&qy24G1iit{zZfUf-hklPdpCk{jU{4`?oV=(k?4S;wgywrt67Dxn z^Qav1rMEHdc-wvn+qk5mjUPqZL^gD^`P%+AecRtfPyP#8AbI!C*gfKZpG*;`wG*8!LJe_(=x;t;0cg?Fm^#Lh5Z7iCYU6nensDpP^rLrtb*+r;w$> za}lf3>%A}c;obuNKLVC0fSLt;g=rAiHly&Ns}zu+nm(mLTt`O~Khv$HY`hL-KY2S# zT744DHD32{AEV74BJ6(f@5bJXyJ(N{X$dbguI>#~5nQg3SJPFVwG8Q&qLDsyKxYAO zrEZR)pq_R9M>T=7;P6sklyG+ZoR=$a)#`KgHas^2hATk~49OM6>K5?gJapn68kNbJ*)P zqeEOxC!ss0b_Z8O%B%K{bW5kKI-ZflBLbF6OBdT}c)H}&xW)3kSXeD%rEUitXaD$D z?#H=I$NLKKDeCC~tV_RFKiW!#_w=hS0qU1CfA-OvQNp+0efQmrgF94+?qD_H573tX zCEx0=<97h1dd#;MaN`#)T$nz8{`@U`S7%%Z?l#upmDJ;!wstGM?H6a?=aR2=jC6@A z#x!Z^2lqqcOAqC08{oGfcoy2?2fl=VFLYjm;~|)af7q`!ZNCI`{1{L8>fqoEU(AHA zrU@?4u-e_0X;>XzyKA{|hkls$Q@~dVvmCr4#j^R<&^`}zsr;*yvC3c(0j|LKRiISD zYm+zv>oEBvqsF)0%b`)ebV-XcsF$};Kks5ZbSc{#DiWV{zIgfee->r&ACR{@LEJ(f zw(%!u3;mI8V)2irgx)M!0{sl&l0~$70`@IfQ6C&OfK=G6Ol!}u9P$V0!2c29|HZ%l z*ZJuZ$Kw7LA+k1NtD-TT(3Kc<+w+cco%PQLi3}oagnuNc^xG`@oXfl z<6dbzqj<%munzp`ZWAM?SLP@W4vr?dexu0(_IP;d0j)ir*Ic zi>+*e-_AgI3t?};{sQ(-B02pxRerwyGoVg0(<5E_n`;t4STi7}tz1LYLWC#r2;-JC ze%;b)R63|r#jWxujV9qJEbjMv3BP|hRB(<$=W_2kW`HJuV=i@47iXaJ{t!=xzE^%N z<x~R~GUd4 zABAtz)PCK@6W%&Kqvain| z*3Q)H#NW>VZrq2ob=eUY1+b2WN^7U?a_pbulIXu{SUUWgZX?`us8cjJPhD-ZgVGEe z+k)uCb>SBfZIH(fL%UM57+)RMCA$l^()erojVQmhq*2~c-_t>mfx!;df8#GR*gj21 zd-%|yLtY)!cd+$`-9R_rXKXmTv6&Y^w(=s#cCNj+h3|7a1Kr-Ruis*IFm)j?*$Pjf_|OEGx};yXHYT(lCUV9pvvky{kOcaV*ZU=%&3YO5 zGH@^O0PqNWK7)6XysP-Q1bPbG0bmoKvNg~*X^dM~yQRx1S<@BeRJV9(Yhyf`$VgcH zf#Q=Um6XhO8gBZO?SYKsKXStp{>TrM9|bAii?}ag&(nXOMxi``JfBC~Pn_aC;WQCq+uiD9DctgqmWKpmq+dH5|HpZj@q4Yd24rUM-a2kclJzq=?UAheZ5=zYlps%7FG7kGK4P_B| zO}Y|i6<1OAxW=d`WAY(K(D14Z);M|NujzsdtiyEkCu%{#CoS~x<$4yCP2C!0B#pXj zzxhfYrGdx0@cc72L780PiN=eJ9p`AfUI}!R_Uh&SUI(-n`%TjEDP+6~kB1IRe99qA zx$eCiGcEcxhIK*1+hO5JSi-|!`^8DuWu=QXul#Yb{+4eV`k_qQ#vdV%{~s$@f0wd& z2)f(-W5gfS?QEag`Z&wN(3C$PkM!M8y2@bwY&C5 z#`S_->0ht7lSg5f+jxRcocinX&>a&wf#O43<8;S_UtCRVcuiNkYr5bA4O0PRAolQw zgY7=To?%cq&h`ZlgItX~iRj_FlmO*ils;!LRQ#TP`suCT`@P@0jXq;1?Q<9X#(fNQ zf0=<^#qV$PEy_&-b{Qm~R3zL3mWH*y4O{+HnmE5}+xX3)FKFG;=&xyY8&)d~p_Q?V zM|@;Qe%-f-Gh8D-vM*EDp1}Jw_-_LbfIkAyDON?!Km72+mw}VMgz~=ky>E*8IY}9K zD&6|&b9Y6K&~yqlbsV8_xigBNIB5dIlQi1~43C_+g~k)V^x;W7%7UhxR;~HPYr@Mn zEsCJCgtoizCtQE%g-I*np5B;2sh&Y`n_PtH zSQTvddn>Lnrr-E8GnshXFnl%C-9;CgL?Vq=e8N(0p%K<}9#Zj-4E4VzDM~8{FF*hD z$a)OAU*Kw(`(JwLr8~&~EzSs{1a9}wQcq10|&;R_-Z|0x* z`>C`)Md!TWLZ&nf8mrgDc&f?$JwN(~|L`Av;irH4r=RzFm|yCx2gI?jX#7k{AmQSR`(9$;4<+qiZaCOoh%hZ+}mpmcEuic`L( z#>E|2hu63+yz;0MvkWRnaDM@s$C(j1^5Z}L<1_q;k)=25SOSzWpJdFoSnP*C{NXK> z_cq$(cJBGRm44t32Eadx^7p?J?H_^mHlwGXu#w8Ecfi26iP@kr6~7@)d{I_}epjtw zvB5{730}IGT2^qi9C4uuKDgkiOJ(^pe#41#5(Vf0_DT5MX5g&fe(YiLuJU(r_wL;j z?|Rp}X1FHHORxvb@{FB2b!rQWT$v3;%$q2ik0~#4TMoK4=F2#}ZboZ5G)adrw7O%Z zQ8^(Upcc}!`So`hzMF6J%C9N1NsoPaQOtvr*L13Ysi49~l8SO(KCE=6T_|1|l-a+B z-o3eJnY|n5yU%>j_k7PRmp;$&hhbKWtXay&)B0*po|g4J>2dhoQ|YDdyRh4p8`-AC ze8bk@j8h{`jOh(NVfwYw86NtYF5$t|a)L`7k!yOK38Y?^GLmO#h@zz3O{L#Yn*USE z9m)RSK%1@ABwxXVnT-wdnbH()7j4A@l2)GKKmK;zHg zDK7ZXB!{7G!(rTwEW?!%yii%cD+lBj)cf||60 zZ*V$7Q}HgyYmFb$D;u`?Zy*jD-|Thf($01Pzu_9%TUnAtaq)nI{|*{D-54)BoNI0u{9znT z{Sa@s-#THT4^Lf}YWjo=W8_s%WCowO>p1Fo+#W?e_rMD1VS-6Aach(LL|F%ltdOUsO>>u*x_-Fk#qWd#xPjwo^)qc}ejZ&faj>A z?)%%rAbR1^M;~3+*=OT>qZ`WGL1^;_Kls6|FTecq4rX%hMA809aCcDlUttf_kKlHR zt6nW=1}+A+0k+I0`Rz1;?Rq6%T)W>9pRmBlsq0*DLQO4Szr32@;}5P@riL^gtdH=J3$F|7MH2kt9H zrb0_Qz^RZQ3O)Jy0E*+Ia zMp%=~7$7{Zl5ppT!StO%aEOkFukKkt&UheP&a_YkLl@D5-v zB<>skr-o!6Oql~#nMhf zGnDy*g#Sa7Mei8gxqJ6+C%HTvbv2PmY!5f}3gE_6f-#nNw$P~Wp~06JQlS@%jtabm zN^56#H@v^h!H~Zry^5gw0&%Xm63Zt)OUplu{GUg@4Xjg6(1FI?cE`UIly|jeIc2q4 z*`xSY5@+(RteUUJC!QKN%3aecPaE1=e&}i#y1+V2w|H&jCR`jd11^_2E8yU~7ytRA zM~_SKwkJe6ev zq;DH>vc&3d54uB|r-v#U`@_!WmS1G<%k>}Mh zzOZ7HNqbp#j(-%Cr_P)1&_U5D&{khy>- z;pv-{m-?YQ^pV+)M?UG>bowJ(9^J~L&-oAv--qdcR7}QE{I0zD&2OG^|Jq_(TvT+J z@p0*UmU^o4=U&xsw9_?=v(#nee~bNqpM%~Lu+KsJJZX3VxA){7#9tIHWtiR?4&@YF z{bL@qhRc(D*7%w?w93Hkw>^wi0W=*YO~7x_2EV``g3poWZ<1c`_N({jokdCf5AYnJ z{8ZZfqc)>L+;upM@Bv$W%+Q>(fsZ`$h|9p^)Fm(dKZ9&v6Y-5@uap7Ie;@g@@dtuy z{s`!fNtp#F3@-T&6t6peVQA%RhsB?`>a-Z95z>CfY#-K*g5)RZL4FeZA?nMW)U}-` z&R!McEMUlcI4pr)0okqGmY|*cq&*F9cHu2ArQ*OwZBU!OJAqXK1p0|RnU4L-d_62&x3y)`xLn6 zk@GDrY4vjCmvHaLeGKbzbEAluUQIhs`ZdTZFyY0s$d7b24`qRO%=`Kd!RCu6FJMiV z&)u2E=b`yM^6)tJH&6&aLtp*xvA+V}*9iCO8<&i)uytVCgE5Q!NrTpeTXu8QqiN(# zq6A(c{>#MUJMg}+0+=__n`VtLZp%gYQsoo+F53AR=F2d2#;rRx@z%7pJAC3yOVX~J znLrOiiHGc}a);m3@gJj4dn<4kGwB|<%2*lkJ){KsLm(Sa4P5f!dWWr4N}n$(l|2=A zxzRyyg&nY;!%f8RrBeUOFa6Rl{R$QOpZv_v{LGiya)=9-=HHylc$+x%@q^(0F&)bX zX($fv*X?@~S38N<&2MM09`Sd{sd2S?y)vgv&3dH2D@{o=^~f1O_d|Jq*Z~I6^G`hS zgrnirp0rCqk6Td**cYGxdL`5r2IC#H${!E@SvI$W_vI+_+TE$}Mt3S0Wq6SL3A9Uz;{AeicBh2WY$sr|h>MrtM+!`(IPG ze-%02muO#iU7lR6(|xnMubV<}vlqmArjL$m)9?Q7?{4K^?yae)tCUYW7~9G}IS+?y zMiKl;+@C-Z{5MqWPqR7vE5vh@y)xynh;gv&>s?~+qQUZ455gRry!Mi-r~JghAbJ^@hv_I!(0NWe;4-Vcl!!ij z1tnl#z#!}ZwS{u_qBvItypydNfLl9qDlf<9&pg_UUL>q?uqL@@j@oykkw@kzI{Io|tr#Pra=U7$Q~Gwt|Y9#sK6Pdw+z?|H&5(qCR7FGb;k-X--3 z!T__^l!x&uSCf3}uF~I>yWugqYrf!X95TwCe9TDsl$%%CjFF!m`0cB`kJb8c8)&Bz65ztU_uf0f0isz>N-s8Rn&?fdZP`B`UN198p4CL181N+Zg8HJL zuqLkxi9ccSCj#+&L$8o3D9e=mc$Z>RwyiQKGL;jf3{7xt*ygY4t<(Co@-fS~g>PI= zgb(>ZkNpthALgX^1;)xN%s9_5RvKw{2Ww*9V5V09H{gR)$;P;w$EsvP#;c^Myo za#{w}#*w71n2y@Lni#|1<_%uRKy!imA8#&NrAPkNE41l^*Z^KuFRX^e*M_SzsiYieRRdK4AjL~<@plms7 z>H1|OUkYWlO=t|GPBr-m-H>Mo@j3W(hT@u(ax_J;$xDlr2uhep|$fcG5bXdDxi zqx;#^K1|RgI4?cEM1Lpr(8MH)wI^r&2L2JZkY~V`44CG&5!aQ!-~y3RSZjL25^iAR zgL8dS>vHS_Gg0n?bXIONW5fl%{SN#pekz39DH~sqnj;UBD!uTH)6Y-vEv6skdZx&2 zr+qO$vQ>;cO|2s6cu>-c>;@*y;xvJYFSI3)AI6~OX+6WpL$SJ@m2*bBHsq(&W5ac8 zB0FxwMwyycy2uG$ze~bgy;kmHRE{|E{xN9wP_7sG6E^97T=1Z-9-=peq6M*W>ubd7Q7*3t+|X92EEix+|$ z^kaI~A^+E;zMXFgQU)QeV*fTo)OP9Mwkmz_sw+z3dY3&mc2c9s=3SAn889t(3WaL(?zhn+Ga9-#s|L zW84XkKd??z7ro&bxDAhyzxLza3Z2SQ^U?_JLKC{gS^IU1PgqN?_n~e_5i#$Zhl-g= zFd-xBowL$}&oX;6#UZ6joTPRc&t+Zz^r}z~DA#EQ`YB|3z+;O2*V7F4pk~}cvlYd_ zSw|0&lvyy-rA^x5S)gR=H(ZlE#a)p6Bs{QF6H9sQbwRm@g$tpCclU_Bu> zMJe6L$o8tSDjw%;dopl4gie0`-xsl!FPFN(?{cnk|)aQNMGSBwf6>6`N) zhbMJ?afiF@CQ17^GlG{%=fwvec)-i5FX~5$nt1A|r>4E$#bhCCMQv2&nc35t$8=a2 zCNFtF>{Z2Gw7fr(D8HR%z zbKAkKDAwDlKU-)6OV+tM&eyxUp8?#UFFfo(o5r!4XspCm>X`V4&;jLYAVf8-JT3Yn zrVAI^LcmWgC-k97Snz@2T?ve=mGCT=b}i}ZibHuZUFq(^NnfX9xo-I)Zz-OH2g(~0 zT%dU6+95N@xH0@7b;x&EryML6TaJs&9xlHGEO(R~uiSBIwY)V8u3Sfv@2fQFY7@US zaR=78E*^2A3G{oT2$k8M$O)tlTqfMTb1wP5B{Jc4md;tIMqa{%;jeMQ8)n=s1FHOa zEzj67OVbJ-?S&7K^DkaNHOIk_83%I9mGqV8@ldJ;C{zRP!Shn&QlO7M`sf(@FTFFa z+$E?C>buLw*FC+M=g*wCZ&d3ePe9h|8gy!z^^n@p#)?$48d zXqp1sy?b|X17`k|zoxe7OsLA|P-syAt28%hHN4K3{?OHs`l3=-4l#v>x?;Jy<*CWX zFwA9HmxNupDiacsWq57caj(Q5TF1n=g;>A;cFKMW{oH0w1CMzyi+EEWbrRli?wewU z==E6YR61wiN+nB$Tx&jUIGVZvEhankb-Z1;$TX~$9enufu*eAv%~H_xCe5|Gi?62Z z3Kv(?#4WxnU3IuL8gX6t`OvGsktbY?zAZ0&N?OV-uQa3RuBPUytk4G5G`b_Rji;0=M0S3UboC-HZJ^!9<>d~mOPk0?;8`s4f8X>bt0|#K~f>$1X zZx`5$67@|6^S#uE1K=(uF6qG)p74oV${?$g1R1c;8B8#xi&Ia=BVQqrzBwXW`H~iNGwh*BME>&hPF#rHS07*naRH&qQPZFO8 zuB22Wznrkp zECmyH;3)c~!sQE1;3!!&ZB0}2)$W=m?t}*hALzGESnW>uQc&L1m$k^Ll@$K)1PksF9$h7rzrX*mlwYV z?gU;h23F~~75qKahuagKvpjJNYZ*1Z%iTen3$MG#myIKxsjCZS#X4rMy$i3Lf@PW2 z{jNR>=h5bGkhbq;w$sb;OT4C)d^c%G+J&KM0xL&NH%>fxWsBj7x^auE0?;(HHeT28ws zz1Amq{bMobA0lQ&o7uY1)DStfcTu;rrl+p6`iJQvnEQVgFZ)I1zg`3T8NdztvQ)gX zZlQQ9;(8e6te33yNY83y)akd;YL_xK&r-C8FGuET<^+Ef7P zh%b?b^TanfT#_1XNW_%clu0^~QKOHR?>un95&G zqnq!38pZH&oG;*h0siOVeF?aq^t~#LM!AG97@!kZ!V6)?Pw0f&VcLp@#Y~aQf$P&D zcEsIhWPlQ+aS--6&}#U^j;kikC@2f^*d@0-KVQxBgc|6VTNn8>G0 zHd{ZL5p4FPCafXua7YunF1K|n#&FVek$mq5=Lu~0#+U5^!-GX3eM7@u0o=sYD`;BEn~GZYZE}ZlXxSLS?98kxIr)gBuYvtvezl!qrImlna{~`*>i@-hj_X1zV9#mFs zz%^doiND565WMc1E@6aU*ZM_t<7M zCm%vh=ql(MZ^>hD#Q9FX{qF~QXwMg3HuGo8F?WGtT?B6M4@$T7&zaD25q4K}?e8W{ z@>092aw}r+pTk;zRQ{|}zP$1Z@%iG3rqKDLoA3sDV%TNjw1E&x7rwxRwW0FlS5_?> zI_vfo>b-Z;s05bxwcGq}WPh&!ZtT}D&kk8BHSJ2>uGsDHHqR)38y~r84Dm;P7p!UP z@LG0_Z@ZV`S58cLYrpQr@S&|?o4yXa(QebGNx8Jsle7ocv^6er+ToEK+Cb@Qp7?{4 zPZI1oI?am=h~)r?$lh#R3809mXJ}mhz2Ns4ev77##BVC<@71QQQ;BlpNlOROG6<$# zv}E|?-}4NFkMqr){c^_dW#B&SL2yS&mwTnWTBT`+ge_21k`7^QM)_f{^H^q{Sb8n{ z5^MeqaF>n#oPgczH83b(Uch||3fSKxt-p`>%GRf(o4mUOTn^`$7SmlD>9pe8?$DzA zmCLgubI5-O`Te6PUwHe5XQr6C>CsQ?}$Z)Fw`w{=YWG=EG!OTF6Z& z9YYas#jGoB?N0nPPPe9wtNjTNZ1aqYGcsye)7JRqx|iZNjq7bpo5r|rW|MT*X>6Bk z!a^Guys$1~{cRcH36w??I{Eom?qH`vP#%V-)10rM^Q8UnI+uVaJ>B^4>=3r>L!-=3 z_)YvCT4(QSf4*~)k}&;-X`=Xf)keZ2&v4y*W0$}VLi-ql;TJ%^OcI=>*^5$ikaVc{ z`9zsdsFjyAfW<_np2!U@Fk$-RM&^S0mh?h1jk{b(T!=U5hbW3-_0f-hbThMWTT#At zQU<$F#QqRrAFR`!BtYl3h?0pq9Qu+M>FPYj9sWS#DC4Po+M!YIcae_&jxxU!=mmw_ zILUlnlt2#5cnGMR0w#UJro9jIM|S4FpXrS|aF~bYn}(*!pQv;ARRTR!b_95Uc=l2k zUZxIy#rlVRlD@|+2JVZrE;MBnH?-xC3|HlpD`f1e5@sa2yP$1A#Zi-VQ{SH-#&-e5 zf1LQIm?1asWuImt?tjWVihVI`KnYO!%2E#vqDW80TuD@Ip1LtCM^2l6F`kvscF9>T zzjU#Y6W+z}p$#0xlknBRbTF&oT~8kKwoz%ZlcjU?X{r-+(pP|M+NQ9c`F@e2B`aH_dW$4N>88nxbp;2b!3$@~6^&_vr%hRS4ry25i`qZV?`bv^{ zf_3;stcsrs*k)$fwzBU{jldUId@uMO6uh4%+_YTPb_f9P6K3V04BnE~KB0MjW=f|kOzYWb-Nk`cR z5xGL+QohzdMQ&-}JC+wlOjpt}Ohds-lRr?Ej7yaB=b=AMJm-kl7geSycR!lnr};+m zypc_R3V4IQJ{8U>_bXIDJG=!AW-U>s@~=h4N_fdeX^<=7Sqbe%%U?-aq}|B$)Us=L z(iogDW~uL8^VGD#D<^It_0d^CADj0C@HF>g&5vY>u!rkf0-QwM|rOL<@0^!Q`mdqyBEHDQQFR-5WkzS`|#fm?>1#7P0H4foKpA2^R2u~)B6hlSB&I46WrzC$9MCCa2lW|dKPDOUeevM}gV;A1xZY;{(4?ODjkFGO8o!-ku?4yCMkji_r#zi?Sd(wm$E6#7f^;eplF|(VqS7EG!U&NP zVRUy&iwuwkDUp;MH990GD5HD8fNgY+@y_?XuJ@1qzvq6Q`#$$M=X*Y1k<}n{ms>)i z$2nmmQQ2Tf{G@?A>p>A|#IvYJEF71KhByl*4ExfnjBXGp-kqO-&@|~NnfVK?#mPi+qM&}RwjblWvzgI8 zTOH-P5DGDs>*fK#%3EsWe}Pn!L52n@RES1?(Ys9Z1?w2Bkk7lwQ~fGZ&$?oAPebFi zj<<91@996^`Vd$#Jc)b8pLl%Og!t2BI{?!%+5J-3&ITVw@AFIw>76X)R8h=6#LbX> zOG3Jc*eqKI;{eJiSSx1fFt!$Z^%+ABW13NeG$;cOvf0`{p>7^eRZ_B?`d;uDG z0zb_qkIw{-pm6WbrekgPx@!S*{c`YcN(U0XQI_t*{9DjQWLiw`!tY*-w(ITfq+$_a zAXQA`p&VlT%S{FSbFKNb@1*2N33&f#WrY2fUHnW)AB{WO=c$oyMHNIL=d(bZ;`LBNz&& zEx}4qj_Zee#s2o5dVRq_p5cB~&ZehozJQ6K3AUk#!bl%`Q+O;KVbj5xPkWGK7^GvLW?X`)J6vsH3)hA&D@9zD*9&Y}^u;hlT z$E#a~_otXaO~25$E9f)*`2(D5YQiIaP6uIoo^FJQXxhE)i^uc_!3Eybn@`@H{MUU2 zGswz$+D8VFw|E&&BJ5z`89RqT94z~it;_{HZetnbN`p3D^9b;l#|=;=nMK?>Ykuzv^((~52XJ=UH|yCW0Lu7 zKnk`M)boQr9fDyH#S>^sO|_<7@DERvNFvP;?Tp}l736J#@5>-4RkiLs{Bss)9ENT= zXuhtA^9HSu`DS)ny<5sdq3>C`REkWhRMQX?2;|y7^CX70e$=<4k$8jEh72|aGwQ$Z zP&^Q~bw(fi{CRmn+dlPy=G+6anhsSWnesYR5qyrKDBZPRx*_w*z9IxSo@*TH9ClT3 z!v9h_5%)~LdKIN#dKLGV`I+NKt@0$!m7)Ao!p!jXRN0!&b(v4H-9wxyVKKoM(SS$n z>EnMUs9QOzo6<4~I0htQkK5r)oF+A+X%2qd<7e#@g`xdYq1-iCD34I+#{7H5(#oeM4f~SI8rc~9gf+)XM$QTy z)H?@n#E0TQW)e@}U^8CZjh(I+I8IdSDHF?FoVuITTMk4;>ge9a*8i-Q*nv{OpjQcZS@m|6=XzN~qOs```7S8x6D zocWThK=g(sA$nDX(fZrCG6heaPN`#uty;=nrNls=VW=_yZ^jrr{+_B}sIN&JW=_GX<<$)^I%(=ryXT}l1oBL-~lw{3fP#KBL-Wb@^ z>PDrv@W4l2_!^GH@ZBGupQeN#mJyg7ohX?(inMYl_$K{oWbfclrFnS4Xd8B75It6- zS$8F#4Dqqd3_f%Da&9ZnxTVcHF&+6H$&~^N*Jw5;sc~>rE($uOIXX39(deoVW z#!k(5T(Uxgsfe!b)+W{(jHf=Xc}uZ^55%<_jE@TgwzC@ub|(WMR}uFLCvYGsF|HKb7A?sWpueF z8qKnxaAa|Zn<6Qpjq_~fya?g{gDy?NKr*cjF$M=#vD;72W$h0lE{wPX? zEEUtmwhA5uM#G%j3Q!ywb4&ygBi%qxMN1}X|+0@%_Xu`paJNToj zZ3OjbrYxgKml9j9f}3$i(8nP~pjlw`RA{$u~A#xy{`|{ktR<8G@n^Z3)ti7NEQ6%GyX8 zH}$MN4dZ1=(JIg_Vq%)pgI+^lS(ghTfW=V4hXlQCl-)Qq_XCc7V|v44Rp*(9b5JZY zM_B|M{6Fkg5W|Ig6XUxdd4P-j!|Zc_1GyW+_gH=C%7?(T%KLihciNx{=?C2wMNiT+ zOUQIex78sFuV%^u4eIYd9zb5oo6y_o93C?RVz#x=SCJZU12d zM*Aw0K)JLv+nl4E-Vm-p{U$blQ(+SFPh+7*lDDScV?S!Ap!gUVcZQXQ^dkp6_!NPW ztGAI09nOp-50{B1l>U@xL-Tk-7bC(VQ=$}z^JQ4`Hi8sNLgTwq(}N(%2;ac60DI8~_HizrSzq5a zJ4V@zuNH?lZZKbr70qj6S7NZBtkScMLM_q1KJyc}KFg@ze9QRdQHZ0#=j~706V=Az zeeD9dU@?-94qDr6afm8j%{cAmef?3)xU^S|kGw$@Z6ODxY$5EAm){4bZ?P!Sbn8p08K~`s7n`UdlM1gN|!T zwUb|JK$|YlJ+prr=XnQ5sYGpDR}|e8{zBg+Oa~n)p#!GM{|ZEavMeZGuc+AZze4G3S}YZl zZe_tD24Pcb=;-)HoWWD3jA6yffS+e!Q4s#E9U_gH_YZAAe8uR6tMTMJp++=ppQm zu6=Omz_+*4kL%j|jR;M}&ny_y?(;*owFAg{s}7bX!3KJ)ZW`_)*i|fT&ctNKu0Z9R3iqPXV1rdG< zcahdWXuq&NJh~O*BWHY^b4{9B;ki@Y2EY;CR3I>^nSOZ*>}ElP*z;tb$0gy%%gf0!iHDt)zTv&(%uJHLC={JIV>~a zWVV>9)a`NeqJQO*uD_E@&RY94Q@ixRHvna;DR%HZs{;pYk-t%-!2Pf79@6!X=bh|td0V$r|*|UKg^s33ld1DeE zHFNRGyC-qzTy$Ypw6^-~DV2?5bG}EudN%82h1&g?`kM-&U(+1hdBs5>bZCq)0D3lqC z0(JG)cj1FQIG19#g>S4Nd);;A=})y-^%q;x-}&cCORno)zPrqk_67v|ykUn}hO$^% z41B}Fp%s)2^u|OYFUz;mSl`6+Pl^OHy0sns_23nO`^?KL1{b@;@hDyzB7S;Rh_o9n z!fEwmQ!eDe_xI8Jk4S{Ra*0~ zepA}7Yf@-7eMn>Q-;P1%Xad8^bSX#k5DcsKd4RR(u)!{MD^1 zcw`?URw6grlhHViTY*Q3pgq|XC*B=RuTuDpZ^p(AssqSMe#`)A+q@XjgI$^o1tX}^QABU_Q}^SbXf+ho1?v%y9wynF#*KK)|-Xbd`Bv0+$zW1 z@NdWP^12EO7%hLJB4wuC_&{5e%utW=5MIhOUkONfH#fi1$lS=e&hZV~GuY=J;!&~U z>qMg+Uwr~78aRfoeUbX#{6n72S7x=S?xoa;eG(bP-SK<`d6C8(Ac+3EFoFW5%T!sr ze=2Clb{#K;WgcPW)ECNtP}8d$(#|{D6;DR0ddqE{uM&!HZ;Tzqx}3sP1MZvZOw)BE zXkoD>eJ|JHb-M3~Vdsf;Gp~mWpL*~+c{LfHkOlmDT}vz<{pH-xARKZpU%QZQ-1q9C z@j(J@Szb%TY}u(RKM+;e!O3$B7zyD#><2A!K3XdK%j;Sm5oqucA~V5aQyV8+6CFM55yJ(0w!&#_Hbw_Foy$&yrp7UJ~EmpS1ng_}f`H z7rc#+V3HoK{e9`~w*Q9P5wHzurJ-WYg;`q1_j0f70K}f@r}qasY!|}Dy4pN=){0yY zCduX3gqgs`l>4P^maHnl$qHbTzKEkk{6Qh@ni+l$x9W@fAx+}*sbVgF=DG^8ebsJ$ z0-s=BfW2zjv$qe=TvfD26ZsQIg+x=Is!Ph`vA6Tyjy}782C9>=ZGAMwsHjX0;SU>u z$`bg{mH{QSMv?q+gjpA1+MT1{sZL={tMZnC&XQ6L{5e0&aDzJ_o-`#D{K7n;u;>o~6W$dXCKVD$x)olEw7lgPY?4!6VlFi`v8HlL@yC>>F{n^q+dG0YM4Q84+mOA=IAs(MEx z-+gm?@o|&cbdG)uK!Hx+?&zi5Hj(&IohgtQO(Ia`yALB|lugaQqY|m7W`$>(rhC^# zw`R@{!eXid7EsWcBUZ^_+6@^^*qx>lMk-T}8s~U?=YDS2Y#wyST1xnxI|VN{+kQUc z-CFz~8HummbeC2Kelx&ZrcfFiNuPyw*X19&dpWY8CbLTGJL+~vcXY&^NncmJ-!~WE z5lQgrm>|>QIchnGb?ld4$ydz1(TTfPU$whWxD^GvN{4SSiu~z<#(VEUk~s{z9aOWI zV8*9)Jw{o*{1=`Bf1Rrl%rc{1p4fnyuU1ZY8uQpk_E#rRwvuX*mt-KFoW7@+2na}c zk+MaCV>#B-Pt^W`%X2k;Mli)ee`pjq>JPqYN|dY8VxC&OTz9<_6m>p*A?5J6*N~MSudMkutE`75E z46&gqVXv`b9+IP+o=bwQboOx543(=z*QiT|wLQre=c-FaAA!a(eo@=1j2fH+nvdd^ z2OY`t(R80)BjV@g$CtOD-zst2!XG8tlRZ~c@Vm>DT!c7J2}JE2UI1gWd&sWwX|CAR zGwbX-)h@?QsZvW`DJQQU{V4tAFB#FVs7D72#kps(95TDVL}=@kBw3YWbs`GctuVpO z>7uV^k$mK+7r(4qqamh*J}?waYY({L-B8__Ey%g#b!3N8xE7t?x_QX5>fnfH=JGMx z`Eymq&$M9V>0c~3CTEM=-y<=G83J-1(_+&;a((ZQLpTpKnuf~ny{`4firir2eGb#d z36&>wlK7NwQoN-&;XXs^>|Shh<356mb1put*bYPD6|L?w-!+9pl~-W1y32Qix0kJ( zeuX)42}`Nl8nY`Te$@W>{!IR#A!w5aI8=O|y4=^pQoh@7jq1s&rUA3bhe-Y+zoJ)5 zQ$AdG43W5k$>ZmlH`L1nZKzH9BbgAxbbhvyL#c@m%Yqq5AuhO4<~&>~Ad~F8kso+R z5BDZ!sbdwK!bDg@YuA4+4J}#!dVNRzpasA`ZB>hL7%CyTilw=amA+h2lj{z;O!lJs z93(Buz1mtH(luljO?`g{&!3v>=BZ+ZA9^L^m%3)b9#60;270#5D;yC@vql`kbio^Z z-dK26SceW>a5@k|%38O^DvAgKr>PVgCMR1N9s#yeJYlEp+zKcW?BR0<-1iDJd$UVx z#vW&T6zA4lpV|0EzI{s@y{7sSeI`l`eR)*4?Od5n6SAug5K=->y}|z@_G8qBn#i44 zW0QQWTENq8mNgvB7Xp*?Qr-hto#t z9Bwv_5>Vv7oKxmcZb$+U*3N0+ByyqC`l(eE#HF1*kxr%j;tDHv*d3`R(=T2(>eH4G z*CeU+)y+OoOkAQSoj>B7!fHV=N_-c4Iu8E}GR@Z9ThV?}viLk0g%qC+^q|f2 zyJJ6NEm^BtvR*If6TdMVrU(JL9n%DJ}NFz_lW1#f2d z)UQlloeNbA4x7jttT`A!Iv*^wZz>EF=p0V(A@@STAv=~t^_{OHZ@wiEo=ryKiQHO= z>kKxyIE=LK_tH32v=(`zjFp2`$o0iyOG+ts)ydjT4P9WjEh?V)bhRqSwB;)6eIhw) z{oEfo6RktTCZ6qF60 zJPppb#ppT^UFZ-r8;Nu<<5Ie$+2y40%1qo>`Avz=l8}F^C5OpJD zw-7L0@@}rXwWFxXTA=`^QRx9{5M&ph2n2m_DqS)2R=BGj!n}OR{Z`z;*~uxUw!H4B zB)SQq&KPXNx(dgktEdmY(TG45n-Em{eKC$dadIkR*l68B#^@_$IBts5QMhi5-SU!A zTU}QnA!Tw|b?H`x8aiAV6!$$S>*hA>>XA~lR*|=40lx-W-aF^t`z8*?LI#Av8NDWy z87hvkY%+iNJ1zZL!UD<&^U#=-ezSs}(+RT-718eP9z*)SCVb=rOcJjbcR9O~4)s9E zG?W>+)3IOY-$D(`R|JdQ_?&?evHMmvnu^VxYoKhfi=}R^e>ySZ!@`160`KL>H%nZnvSgD2_UjH$*BW4%}OLbm)>(~MOB4<8IGr$@^KqT3Jw(7n;5o; z=lffK3BLwt613hlTB^@*y_X~rBSIok4dB=*Z3rT+h`T`Bhgp4D?1w!gJB@oLjpDxQ zOu3*3l-_4ANy{I~q$oC{Eo0Y^PkeUea-p@gOuAs`TxQ9DETw`G&N|ZoZTdE7^o!QZ zx!12ZYi$o*nQ~Y-TWxdRh92kDtJOyq9>RnGV0lHiO_1qWxXtiE?oSdj6`cyCLN*0) z?BUsAG64S%-Tq+DSQ(Fcv}+t|WFh={~%5?0@lQ#zA8b_NwAH zr`3ZDV&GRCv!n;)qBo+gZhi9N#btE7ASy@MHmwl+f!|tZcax^@GMb1_*S&p$F>K@8 zS_W>BZ-=3)5wu+dF>Y0jKcrHF#h_BFb7m68vsb1&hP!&bUeV%5?ju&a)~cv6HUD!w znnTxAu2uV6FM%lBaMmjkYg9(}gF_d}bBS=)%U(sY1F?{Aho3rOTsku=zH?yLqP{X6 z7Ek|DV22BH^O7O%@1UT>37l~1skiH|uk`(G6d;EFh!-(`{g;2)*)RhAOU;Ek1*@M@ zhV99I=tLPdxU}bV`@$sKbw%^RehIGcjJklG1%zEBOYx3{A->x;-FG*OLS5aW5wG$8 zWPIZ?=#KW{r)xYlpUIodU-L#YJWxlk3DS}9I}+^8v5`mDxsSIshnH>2pmiy&`1GMP+BY|Ue2nq?6en|ordzf~;-{xw} z@~_tRt?CcE9b6un!0`*_6AhN`Bbznr^m@`uMG!vmU&hILQ_M zemxxQ0vX&AtkSg@)5qD#do+(U=!=SdC0VOXKHLsJY4ke)~enM|)3q zRU!w9gc;K{y~F1rJ}r72&MtIBqPEj7nbS>MCEM+sN#Isphc9?@JTXq{sBofw*6 z0}plIYYSQBeU{xe$lR9t_Hfd7SEod~)$O)&CVONnmC`mz-0nkgTvErYbkUHHJ1y}w zonUe4PTK7s^`t+zje(HNYCu~%i^2Pdni><{nPsH%zAZFrSjtUvpY$ui`2$dIJ>vE9mdE48sH6YL_Ij5 zoF*%^dj;-n?htmVe2Q2Ur!#xcgM|`t&KJ`F-utfiv*s*VceukS)o7OEDGKvS043} z4OX}k{&-yZ-PstMcg1S2BSXFxE(t1|8IVX=kp&4SJxnprY+R;m6Lx+og$lSknl;2jP{_$$c9QXzM?Tl zh`k*h>UiPBn>YkG=ZNt1Q0jkyS;S$|*!z>>A)zVMo20YpM!?P0wU&0(R4p~9OghK| zS+SPv8idqTG(IhF-XJR)i8&Cj+k5&Wc+b8Ki31Z)Qlw1G?Li(Kz~(z z_oM9IvnCk(*>P!;+=V)ew;9T|n07-9F~1IlK-YSjLMi9w)bDET#cQc%jI`TGV|c8J z<>WUhj0UO7`rp*)ZPpGr^4-i2&78!z!hzgVB2k^M+Kuh$)J~%HY-nXIedM+A0u#B- zL_1rnQC+cMOg{5c58?UYnGya(_a~TsrrVD^P}~paH*S3@&qhs99{I{Iz;mSUUIzmjT$cF#EKr`iYBRB}=GW?tOHWU_nDn#q$~Kq>XNFi? zwROiaZ7Rbqa_17y4hF-1&wPc7-VwCKTwo!Dvp)$tQ=Y4{pM@&y?+Zb1rw8X^EtPdG zUYk#|cRz2hIf)%aAGD4#G`_>$|KQLqZ4~!e;ToB2T7s>}tFk0FOmuw?F$4Z237um1nYuBQEf+^kXiT~TZ1yrmD#N#C> zExzPk)b?#oT3OEOITMQbW1k5yDd^O9j}27BH6T@N)l3a?d~L4>%92Sd7kTD4Og5GZ zM_zv{kxihXiRN&U)moILEWB8tw|XckP&|m%XOF}3zgJ(N6>;OYu!^j0vBg+51XF5E zIi6{KT~{}^i%zaAl2>d3Uo&t%S{Na3Bl!tY2E8cGryq1 zGI4Musn92*%E2Z)Hr!`hJo!scAOt!AhHiM@WtN#l#LB!_g8=w&<7lg)Xm$ z!D=*s?B7jnkw(P+tIo=iL3v_B;>KibV81$<5HcYXd|V;gn5;%!)(Gn*`5HK~s=ax} zxl3OSBa%!Gko!G%ICGh$-pwKDD~_n1RbSZ$yy)mOweVfHKwV^}$eTFmgri=1h6ml3 zyZP!2-ikkk1-p3AqWP$A%gfGlsWEOh zM>KPx8+W{jJ8|+HeRzh7Z84)j|IcubZ*NXMD7#MSFg(Z`6+Yr`htg~+>0jEq*{VqWno*mu0qHat_&2K5}vd=q~7orc34A1=?70!#J!hP+4Rr$TjhD~STI&991o z+2gXogZ*r=&s#&Fju@U zEAWG3HLHi}30?+hm@_O`uPlbH!R$?6=PNbKhgU)<5(6-*lCFHC;&mzetmA$lLVZU1 z^;G4}CY1ddLLoeFW<;*+?bk?ec50npLd${=OZ2&n(M4yWMVhV62i6y*fwO4~Ykbo{I}Ec(c* zuAsYmEsmMIRHB+lJ56V5_L%hT(Rfpe$M+@j%Qo z7NyYcgcgZ@=p@Aw9kjk$W&Ha42C#5oi!m#dPiqq&{mtaZt}?nscAkMFz|;0ZR@TYx z61V(l6;3cGQ@I7@OQ7Gm5W@C<61NU5`&*Bw!rS@6eEVnT@?W!@$9+F;Vxn@rrZR_! z-JXwmP-Z6i{WlKKbhO^;;d_6vFG{p=v(JVMeaP02f&ump;7fTSY|q;lS&Ndf(r$=6F`J&FE$-cjpu2Os?v#)Wc=MBhz?rO` z2~+$(V-cgHh?xqdk+tz94R<~SH$Z-QtN{r$tSEf`+k?i%(5d>Ox$;(haQB4&xpmAo zQC~p`K#?RE4;*LSMzEGjH!OE>mBZ*a^NQ30s;ADUjOq~(rs}qZ=48zbAh4acb4vVC z0^w6>-8*YR)Pom(hFcu!4}*#1ML(j)OOD=ckF3g#ZdQTDfRT#?dTnvc>Uwm(zgn{{ zkc%+UySHz<%uUHowR^?{%6%SsPOZw0d5BD00S|8_F@QNF^@(Z{|CDx)judx6y#_}4G5NJF+P5DKfRb6sHI!)i?!}D2`0|z zWSCTCYW!{hwcO!YZ&fkVdJ+8TA9)dX?m8V+TXQ9Q&eUP|>hxxQvsd7$ymUOZWjV~f zl4;GT0J%?E`!CR!bmsJkm@eNY90!(pVrepc5`s? zQ#cvZt?)+0y}Rcz10GYxCeFnj)QQcVHijW1k+(7cG6ToTT7tsyyy8i{r*QR5oA>KILx=X_ z^0?&G)H^QmmBgiTc3OvdP>S#F?5gvNXxt_B=~7cwXL7nIJ=A$)DS238%c9^{~qQS_08C${I#ckenv3*daJ`PI}Uz{#;uk z2RMZizrKK`ubO}|P7N@T8CKi%>MajK@laeMB%Ma_ut$i`uJzb4h@_#lIJj&1JiW!F zW8J*wiNqIi8hExyhK%|yw$s_3q@xS#5o~COyBQw0ig7T;c&Yq zX#(tMY;zO@TqnY~am$nF1(6ZCW7>8Ka<@TY3xOBizJ&jFf-l)AxlPA&X(%x6WX>*C z_xI;z%#G0Dg)Q14-j3qNCV0q^j;a&!wfzhJ?YDJ+VpVUp>E<-yEDoFf8WoLGdu=R& zqf<9DFF&k(2Q#E+c)z0avzaj4#O=UF+E(!e1eFN1UEK2etnf~D*8FpwM56mA6=n)6 z`8S$NO0L%Uur@+sA)*`9!NE(FYs1!2N?Cfve${v~P=4ZgPJXeK0iX-;X8r>nYRaUJ)H!nMdg@EToB3 zB447-7t75W$BULG#f@YpDtDf^MT6B?M2qhgMB$R}0KwZkz3C3RYuC#$N-iy=&}>Mj zK*Z+ZchVFiWjZilabf&1iEbT6c+=wSv6(jR+^@?VJaeZCPT9BPyqPnXZwB69Z*^*- zIR^SF-02PXB>NzVqRUH#4+9_nkzF|YePkJB;rtfV#wHivQC_nQIO0|8L@GYE3`U~9 z&|6Mdb!X-t?vw3bUhP<;h`bP4z3&oK2gY2(QiGL-d)!0)(bg(lmQyr;hMV_ji`=r> zwQhwa%-N`)jM8fN(fv8n_D*w@;}52|555EP`LZVbcEBEdcM3Q}G)TO|VVRj6b0-KB z{z`Uwao$}HD>*f2@chRytU&+lN;{}U7ct9K=iRg+S^T76kMHtXR3EGP$k!nx56tTn zL4a0xU+(7iy?UY^?GekUP`-On2Ss;ux`ei<>SwmNs@e*ZNZuD4CQoa;nHhJ`GoluV z5=fIkhuz&c8s?B3oFMgYukQyoZqV-P0(_VAdR91HH*!@T=!ydji5kr>VOTQKZNJqN^8iz{KAZFC}uZ_dzrsB)EY zj$`v+g$%pJR_w+(5E9-F;SBn0UeC=R$7lXl>Ef`T#yWH>?IkaK>g**6H5=2Wep;MX zOJ4{3E?(lhk5g+Kt_zS)ES!-|cR9dUFjD4N-E`B%?R)laMYOx|j$2MU?o)GmnmdGM zQUHhSYy8oo#)yh+c15CF&6*p`xWXv%Dvl#?_tEA6{n#Mp$#9w126{12*?`8(_#bLI zA;AUkiR5J}NB%7YeFK?Uia67iPo%L~eetp-N)WH*_odQR^ZS=gB2NO6DSmD?H`eIl z#GAkwm@NQhyJNNSn>~yX`PRK$u)(EO+$F4q?5Puok(AU6aX~*)FrciT-~Kf3HoX~l zb?@BP3ct2wk@8ube+r-m~Kn}cdRJ1#qpzbMK(F{2s{#+_tG+J0l6o{vElH7-3I8QiTc`~hiaU;xR3EwFO$~ivyhM9`7`ci@aWM1@fqNskWz*zIoG0fYF{;2)tOJGnyaiPi5X(_ znIw`#SEgsxU|ex2P!hr|WDL0#?9tN`cEN6G8>^(~^L0qpt;I$=7wBA0)A3>zXDznx~dSj$Sj-)3`N zy2Mgm1%6SXT6IW;(q~1R(uGa^yBWU4|8wi)Ym!0^tbn6cQh_Ar`^EA7j){CWdA2#da3Y!3_P7DKvJAR-bynb<| zU)t}9MFu&P5t(C+pmBN2D}cvkT(~QKZo`(w(&k|o{%IMZHN$RJ=ziqEa@`nhkt@jl zj|lh+Wkr5j&3xueLCnS`aE!fo#yh3|(D@qOKsa8AY5BB*%b9cyaZBq@pb{0-ytI@^ zyL+#ecK7V55yp<~=~!c>HlAb~qI!?|hi|L%UOf(J-qGS3dYhBOhZTXyf0RRwIL++o zJ9d0se45;pMh__sDA-t7g%WAqFJPHPxs;9DsnIcCFMyx{R#diEJR1VhJL9 z1mjND)yZ0;*)Zh#Z{78*w@RW-@fj|dnv&I1cEtBHNv6H4b>_37cv;jKT+0AMN*a$JEB+zIV3=z~t0U5zF_?v+!Dv;`qFbK3{p$QR`t&^9Y|e zTMk@KaXk7Z{vC&D^j7xm2V*_WztlO$PvzX(nzqtk>q|TfDd4FI`SUO7j`wk=C4u^lFmk#pp$nnC<{*fx^mO)G512p8 zB<=jQLNeBUFF5{j!2C`F1gn1Up2WH4b5&!u+*`aTT{h~r-byz1E}S*f0`}i}Hy^VO z^D~zmx@f}QzHixd9eaJ{^&jqM%5-fGQnr@G`2kG*M5E2mZ_oU&%@hq67d%h_JUyx` z6@wff#qX4LBUxs(&`I_kQdIEWyfRKwDwg{|nipMrZ> z;w+5(F%b@5e6?XpGHcg4#H$L|wBYQ286q&UZvB^Tfm{CC#uP9;Pt>OHo5W9;JNFSU zbqpw*Dd~oczFmG>fAK?dx&$TC&#gCIn21e0Ztz-4UZ&=rkvx^>2m= z{W~bQwIdJT6z@Ipss(3G&wpq2q7kfsf7_;{yXR?WRwNCla&UY~KXU z5NB7|a&*+X{!UyGxsU6>bX{Bv=$NZTu4q4`d8eYEf5{H&H}hBi(7AfysCkatD`nc@ zu9A}d4Uem~WuC;jF1A#%U$bh6kbkpnSH~TC{K*Kx4}tEG3uO|j-8QQu!Lr4>rKErN zdYNBl#WPHpgDLC*<>-p@ms4Did}=1(U=ZoUx#Edd`Bi?R*)W4Q$jPs48xcFmK39(J zYjyt6?G~^QT-;Uwm7J4vN#|JJci!vdtsT+Na}7I;h=rj_4dJ2^IJW7f`cpEb*c%8T zhW$Xhlff%q+m?M~R>q6B`d{=+(F$+%l=*4q`z-h9gRmpcVAyi@{S0b4r8f)Ge^9lC zs9P>(tmyk!;pCl*3h^qy&y+Us1OERP@vTm^LhQ0;^}0s$0Unw-n6~@eM4n@nn!}%I z0B+;XUH7RizQIfV%e#3eyBBSA5TT`VNGPIBvSa$YT_O1_LH z7~_G`PZDrZINS>vs=+O6nZ`E4t-z^y-o*k8eQFLaUX@=-($z1f{oBpHN3RIlJr&O*OKcxp`Z<)TtQ zXZva~P&vYfb!s4ng3+OSzXRf;{N?Q%G)jAo7}wqDR+4#oKjaUEcF%3N6*}VEg|1p? zddjxoGsj2_iNdhmF8srP3Xd{Kbmf2aL|Vobj?fLw9+lBa;^J;!E48N6^XHIHB7W0Q z`dLzDc{Mul8?fZB)TeF%3>4adAFky&=mQ*C^KQqK!h)@=ZHh)|`Erj_?wEH|lWbg4F}YcOxOQWo`RAUg)s zzylR;IvB3b^a9k=M@Pi{De&}67*GEGb!P9Wqw)!}DCSlPXB&2i9=HuD-BLb~1`%^g zuMVtadTQvbP_+dOJvu=jX^a2Tih)a@x3GEs; z=hZ8f8#BgtXvh<-qC&jRC(8ZJ@kIp8mz|94FpsRe-It+sKXApz)qP6ewS&U3*foYu zrf-rS3*bb%Pr%KMx`2h#VniQ_S^ofFvo@|nkY@ir@R;tq4vzb*l^i5zvZ6H44yTc` zGF(SI&*&BMN*!h2K9>E| zy&l%#PC1927H@nAyT%L1`;~g11|})%l{C(&r0eU{ zRxHn-XhbnSrIFTnKx!boR%TY!tS`D?ikO+bR{U#qtA6BMrSXL{L2T}Ikg5|=rzA0m zM~#a=`twK9Hb+fgnZ+qb&rrVf#%{TwNt9fNm)^>WVxt7kG!U~bQ#UWM6BOztn8mOi zV;d-!npGZ0;5o8$g_=Rw$_ufUs|O%D9|~_#!82J+(_y`B=hnyYZ!-qPwUCu5KZ^4Y zO4P^QRkv5@Yc&swHB+LyI9a5H8_iRihy=nf_r`0&uh;)p#C^Zm!{Ndtd=W3_{2ow> zm_GTX%ZAmtiOWuQ0qILJR-w%=sN&AcQ7tRbq!y zON!OGfcS&fA^}xQXL6=%lM3ilz(=D$qNY`=_VQrMVz#>1D%zV!`KJNaEthYfEqi1N z9e8kpQpUBu#A29{n1@6Rv<;(F2-~mC7^mqOd&lIg%)&`Cc~O^zF|gpyKEvA(=Ev3o z@1zG5f$%5kZ^Ea(h;-cOVJ(u%LecQ7xQ#7xhY(9x3Y@;|)qTJMjVe-kvfqxIhbd^g26ix$B zfQI++g(|PKi_&&Ix!q4UVwQ~K69xz|Y?W1YkalYss)N6xvss|w)c7Oeo*AjUQUcv7 z8dLeXrc1`^u&zDHXimW|ly>&zGo2sXPgI4y3$hCIDuNWp6X6ujh~s{LrogMG9HSf) zQ2Vkmoh`ejw9dY_Ek<;SKEZ5hQ zK~mUHZhHYoqk?sc-t+cZ?8|sLnsN8=OX#3GRq#j(kwd8OI$Lta$l6gPu zwtv}D%72~=p7<%DMgAStb>dzbrhEjMph^5u!ypxN12jYNjuc7a@iqhY@Jf~vumrdUAC$NPI}x!-GlmF?NJQH4$&~r}88F)vuG#v+jwt4?8V}7l)e;j09Y&VuNIWE5ReF=hL!<`>&su z51SNSPDs`^+rTr(FLQpX0vKn5uHacJ71o)`hinEpoC@yo*D>;+b$>%)Wlfin4z2h0 zdNMJQXH=vRX()*ZywW>gYK)Qk>)+~*oc37H{(1-cDSm!{Ox+B`mNg_jj-W@4ks3pd z3T#f57Q7|dLmSyfU7HG`^)5SDgXN(6|Nkl>`M)~MFP< zBJb~ISQmNr;QwjwI=`A~zBNQ57^J8)=@vjhiWHF^M0!=4)F?%I4-aQ(5=Tql{%IEaNi`Sq#bk;7-;2Zt@dFA= zUB53ewcz&E2ROA%W-dlb#!9`!w6R7hG3@0QcDV}^7Uc2nV+}!MHn6YAVq$u|k~!fv z`a3v%jo4Z#pIP=0J20-Bc!-gt^N*;3ou?^&x`v5XgMA_M=m!^075h*9sMd;_drdi4 zx0|2lprl(uxU(1_3Z;41HF3{6AKvO-zfvm^MYj`PLcXp0`drJ+)hxgbHD6zXe#{2RY% z(vs=+XXz@6calzRD$yClU-6daAX#DP0_A=4B=4Nop#WzMVlJa6Q8_(@m(|b6mIsD0YS}{ zs9gQWVPb2016YLS@j04qx3}LBe)>imW!9S8&qHzv!u0#QeuU9iW+|blx>SC?Cl02R ze0|u584ysiwJqt?J7#?eX7li*7kC!bw(N1hp z2*y2Gl7Ky;Dpi2^+X*dDJcXa3%^C<|CGFx5vOY1hCUHQSF z0=-<8-K$*xT85ovS}Oer9;S|==|lUf&ECdzp`n3D15$5DsYmiSZ-vi9gIi$C#Eflhn<(M!Jyft;@QeGvSprGbfm=}plX&Y}5ehF;R6#D*+al9it%xt4k~X}L>K z-eRw29rJPBDs?}8Odffkre-8Cuyu*=!eI>F#AQ1qB!tCpww-J3uBBCVYrpSqF{evZ z)0suo&ATnP#^5X8;ov~*QtMpflPOH=YzjAJG*y∾vLl;;c=@86RNxcv1Q31ZM=h z2(2T6NAn1t-fl6RfRW5fmCu$GnLG1ET1u6#P4%q3W!C3#mM;NI>!#XX`&%k}(@Erg zILZX1Mvq+OV=YjUNJLR6f-v6Ik!{7FfhAL#=@Ev&_stDg>e9$j_dH@ROA|mxGb*1( z=p-GQ9)AF}-ke|XA_N3T>8! z;-BY6WZ6{%rErug0s{d{-x1USeT)3VJM^+R_I9iP3l=xv^3`>T!p*^okf;I4;XO}z zyV96}>v0EVwSM-m6W<*2)Ulh=6Xpg#KEKqlUbi7|L6^x&i^MYjtjRdgDxH6!{aJZ{ zF?bAPs*yFL&$wp6Eo&5tVM0GA7GtB9=3OsBs%GFZOwuO&-^;d^UczpBhCpBxu`?*_Jx!o;qh`{3k5ctow zoxx@!mNB4K4ON$irXlMr%ZSNOCgHy?Fdt^3r}2etx(;9ln#~4RZELC8(-g^v?6R8l zm1gWufXWlhAXxsX!P{{Mw_VZ8y6F|+tk-$#66KW_14}S5f@lurk-GhYb67=uYLVEx zz)wSxX5L468|;Vv^{Y*MtD1eBHc&pAhJ2IYZ_uCnjN5t~!*#IP1u}|v&-?Ci9YvtH zNoTHBZ?lG+eAtxJBnS3W8ga@m%xZFv zFQ*$DpHpUq3l#9lg^ptrG)))hGdUWhvm~W{h%3M^rd+?U@$}&}BJt8s#;6k8{qY7; z4>kxmPNbqfAjFds5Id8h93D62Fh5ohky{|p|My(J_aFiR7h8nR^h-LdUPB2lvO;NS z=~z2npG0lb;0wf{fnYtkTjAxR66e%e87u00n_netb@rHP65L3cHM3~4w*|tI7>xXI zETYE#$Lt$_Lx@3o7`+#BF)wRzrZZQYDj$LrxVGdh#2rF%$F{d6ef^A1kV>A-iD{Nz zK}p)REOMxhh-NM`;ldxPE(ORtoTaFgsYLkt;wkpawQdx5CS*gc?by7Pnm5s}g`fQU zxtNlA6k6~MLSyrwhssCIzUj3ifK! zhZ+Y;FR%B7A(@Xp2jtkXFp~ZIQjK@qZFiX$cZwqKQY)9y3B=R5Sv@9&lBt}C7XC%x zyi3GDj^>FQ-MFHh2;1BR!{+co5F|X2d}@1HM*Wm$Mf8m+J{8!K>oqPVlP{I>&8D-J zL&~Oq`rzL_VZ;kv5*;+|-Jscej2I2QZF65(l`k5oj*COCPAGN+vT_cns2N(tN?Xv! zD>IzcfZ-DlM{D?*(07k7bWdSsgmJDVlnL7!FU3N+>}~n8GL`2}hIB(z`cJL1T8R

Vs8W0Bw) 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 literal 0 HcmV?d00001 diff --git a/images/cool_on.png b/images/cool_on.png new file mode 100644 index 0000000000000000000000000000000000000000..ff2903590c95797ec726f098739b5dedb4e34c30 GIT binary patch literal 73372 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 literal 0 HcmV?d00001 diff --git a/images/heat_off.png b/images/heat_off.png new file mode 100644 index 0000000000000000000000000000000000000000..004a67f50dea793fcb10131a6b0ec2aea7fb71be GIT binary patch literal 49966 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 =c93yU49 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 Cb#;UQ literal 0 HcmV?d00001 diff --git a/images/unit_off.png b/images/unit_off.png new file mode 100644 index 0000000000000000000000000000000000000000..a2fd47d7370d8324d52871bdf9015a3e2861c799 GIT binary patch literal 30299 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%0A0X5NIK z@A86dFRT7;dd~6yGak?sHmqOh-e3U@KtqR1?Z>&AmHb?`ow|;^B{&*|JOC5*8fY6u zYrT&rjKE*bj)k*T6EI{2d)rMD9D)kM_k@V8)fvypmYaAl0B({28h`{#gc4lEg8~aC`UZZM_6gKIm0@t?14pW2 zy_Lsr{VNRG2z*+R^`f9a~LV~pp$om?f7P}pC6Ts@ob4Ag*NJE zkhN@Ixj8v8G^$xjdM-?+{0yyw3+c{fxl;k6UXe>{+%1aSwOxF=9O5|&cjcj^u-sFC zaNZuI2ZYUO?`EjvaAS@0QcXLnJygw@t^C=RhuEihMA`DSp;fXYbmItr?yiIOoy3}e z;R*+M^{aFrF4bK}!GyKi01c9fi(kOJOLTT!~T zFjaQ_>z5;+p?jn0M6GnaF^*Ej(a_~jGO(R*UgVjXsiKRi2~U5S1>TAk;&8=VON+_(6(37ws%-B*37YI zOa>%1IYdHafalKh54wmwqq6;)+^(w9ollE<>rQHM7duwGP~`0XM|UASd|@J+h6eSY zn*-O1eg?k&-TU2*Nfo9<`TP5hu!`f%E|OYK4JDsFPwpG>gPlL?f?->`QS}K-9BsHV zds%<=#H9-=*&+7H?D}K)q8*cpgcZjxjn|+Ne3LVs1uJ4lvHg7Z+RZjC$cF z$PNRw#YJUBuHy=o@DC-q0L%a$K7jiv9FR8yQ4CU0{d!pLY)78X+0N~82Ae4LGl2nA zU&pd;kwkGhyMB=xhps z_?2!&`q1Fu2U{(s!K$l2yEvI@bH~<-m8AdW2{&BX1M*jaq<=I)7!$+OxHIpP9$1jO zNE8lD7|$U%<}RQD+bk^6jId+00rel9>!e#(7So3e=K@zJp4}ozTv=qx-JT@Gib;oC zgf=6TaxAMuCa30If_7ng-O;w~u=OcZcZ+)5wXiMB*sQmwHTAJR*OwnhwtC5AYDoaQ zgKi0_E3?#=Bfn8>kVAoaA&yCFe&+=_-}X3(jC$3#;vCGshs>vD`X$89ro<0vZjJjL zm-|`f!Bd!HX3(UKt7*Wdu=ed?EQfbQ9=d|q6b0&{+|o*H)~Wc%P&`meFOT@^bbr)gP-OJ{bYk6?qS !;!{j#9XQyI*7I1Q44fg*;NmC-TSE< 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 xz}dq7{(nFGcM<*@3IE*%|Ic>8)B$WX#0N Date: Mon, 25 May 2020 16:08:04 -0400 Subject: [PATCH 19/63] updated design --- .../virtual-thermostat-device.groovy | 75 +++++++++---------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 4a825f5..d1ddd1a 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -55,8 +55,8 @@ metadata { // valid values are thermostatOperatingState — ["heating", "idle", "pending cool", "vent economizer", "cooling", "pending heat", "fan only"] // https://graph.api.smartthings.com/ide/doc/capabilities attributeState("idle", backgroundColor: "#44B621") - attributeState("heating", backgroundColor: "#d4852a") - attributeState("cooling", backgroundColor: "#2a8ad4") + attributeState("heating", backgroundColor: "#e86d13") + attributeState("cooling", backgroundColor: "#00a0dc") attributeState("pending heat", backgroundColor: "#ffd19c") attributeState("pending cool", backgroundColor: "#85b3d6") } @@ -83,85 +83,89 @@ metadata { } standardTile("thermostatMode", "device.thermostatMode", width:2, height:1, decoration: "flat") { - state("off", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/off_icon.png") - state("heat", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_heat.png") - state("cool", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_cool.png") - state("auto", action:"changeMode", nextState: "updating", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_auto.png") - state("updating", label:"", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/cmd_working.png") + state("off", label: '${name}') + state("heat", label: '${name}') + state("cool", label: '${name}') + state("auto", label: '${name}') } - standardTile("offBtn", "device.off", width:1, height:1, decoration: "flat") { - state("Off", action: "offbtn", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/off_icon.png") + standardTile("offBtn", "device.thermostatMode", width:2, height:2, decoration: "flat") { + state("", action: "offbtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_on.png", default: true) + state("off", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_off.png") } - standardTile("heatBtn", "device.canHeat", width:1, height:1, decoration: "flat") { - state("Heat", action: "heatbtn", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_heat.png") - state "false", label: '' + standardTile("heatBtn", "device.thermostatMode", width:2, height:2, decoration: "flat") { + state("", action: "heatbtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/heat_off.png", default: true) + state("heat", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/heat_on.png") } - standardTile("coolBtn", "device.canCool", width:1, height:1, decoration: "flat") { - state("Cool", action: "coolbtn", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_cool.png") - state "false", label: '' + standardTile("coolBtn", "device.thermostatMode", width:2, height:2, decoration: "flat") { + state("", action: "coolbtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/cool_off.png", default: true) + state("cool", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/cool_on.png") } - standardTile("autoBtn", "device.canAuto", width:1, height:1, decoration: "flat") { - state("Auto", action: "autobtn", icon: "https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/hvac_auto.png") - state "false", label: '' + standardTile("autoBtn", "device.thermostatMode", width:2, height:2, decoration: "flat") { + state("", action: "autobtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/auto_off.png", default: true) + state("auto", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/auto_on.png") } standardTile("refresh", "device.refresh", width:2, height:2, decoration: "flat") { state "Refresh", action:"refresh.refresh", icon:"st.secondary.refresh" } - valueTile("heatingSetpoint", "device.thermostatSetpoint", width: 1, height: 1) { + valueTile("heatingSetpoint", "device.heatingSetpoint", width: 1, height: 1) { state("heatingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColors: [ [value: 0, color: "#FFFFFF"], [value: 7, color: "#FF3300"], [value: 15, color: "#FF3300"] ]) state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } - standardTile("heatingSetpointUp", "device.thermostatSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("heatingSetpointUp", "device.heatingSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label: '', action:"heatingSetpointUp", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_up.png" state "", label: '' } - standardTile("heatingSetpointDown", "device.thermostatSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("heatingSetpointDown", "device.heatingSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label:'', action:"heatingSetpointDown", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_down.png" state "", label: '' } - controlTile("heatSliderControl", "device.thermostatSetpoint", "slider", height: 1, width: 3, range: getRange(), inactiveLabel: false) { + controlTile("heatSliderControl", "device.heatingSetpoint", "slider", height: 1, width: 3, range: getRange(), inactiveLabel: false) { state "default", action:"setHeatingSetpoint", backgroundColor:"#FF3300" state "", label: '' } - valueTile("coolingSetpoint", "device.thermostatSetpoint", width: 1, height: 1) { + valueTile("coolingSetpoint", "device.coolingSetpoint", width: 1, height: 1) { state("coolingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColors: [ [value: 0, color: "#FFFFFF"], [value: 7, color: "#0022FF"], [value: 15, color: "#0022FF"] ]) state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } - standardTile("coolingSetpointUp", "device.thermostatSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("coolingSetpointUp", "device.coolingSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label: '', action:"coolingSetpointUp", icon:"https://raw.githubusercontent.com/racarmichael/SmartThings-VirtualThermostat-WithDTH/master/images/cool_arrow_up.png" state "", label: '' } - standardTile("coolingSetpointDown", "device.thermostatSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("coolingSetpointDown", "device.coolingSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label:'', action:"coolingSetpointDown", icon:"https://raw.githubusercontent.com/racarmichael/SmartThings-VirtualThermostat-WithDTH/master/images/cool_arrow_down.png" state "", label: '' } - controlTile("coolSliderControl", "device.thermostatSetpoint", "slider", height: 1, width: 4, range: getRange(), inactiveLabel: false) { + controlTile("coolSliderControl", "device.coolingSetpoint", "slider", height: 1, width: 4, range: getRange(), inactiveLabel: false) { state "default", action:"setCoolingSetpoint", backgroundColor:"#0022ff" state "", label: '' } main("temp2") - details( ["temperature", "thermostatMode", - "coolBtn", "heatBtn", "autoBtn", "offBtn", - "heatingSetpointDown", "heatingSetpoint", "heatingSetpointUp", + details( ["temperature", + "coolBtn", "heatBtn", + "heatingSetpointUp", "coolingSetpointUp", + "heatingSetpoint", "coolingSetpoint", + "autoBtn", "offBtn", + //"thermostatMode", + "heatingSetpointDown", //"heatSliderControl", "refresh", - "coolingSetpointDown", "coolingSetpoint", "coolingSetpointUp", + "coolingSetpointDown", //"coolSliderControl" ] ) } @@ -244,6 +248,7 @@ def getTemperature() { } def setHeatingSetpoint(temp) { + log.debug "setHeatingSetpoint: " + temp def ctsp = device.currentValue("thermostatSetpoint"); def chsp = device.currentValue("heatingSetpoint"); @@ -267,6 +272,8 @@ def heatingSetpointDown() { } def setCoolingSetpoint(temp) { + log.debug "setHeatingSetpoint: " + temp + def ctsp = device.currentValue("thermostatSetpoint"); def ccsp = device.currentValue("coolingSetpoint"); @@ -360,14 +367,6 @@ def setThermostatMode(mode) { def levelUpDown() { } -def changeMode() { - def modes = thermostatModes() - def newModeIdx = (modes.indexOf(device.currentValue("thermostatMode")) + 1) % modes.size() - def newMode = modes[newModeIdx] - setThermostatMode(newMode) - return newMode -} - def setVirtualTemperature(temp) { sendEvent(name:"temperature", value: temp, unit: unitString(), displayed: true) } From 3c789feee3cee503ca33ae91f9226b8b13623dee Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 16:08:39 -0400 Subject: [PATCH 20/63] extra debugging info --- .../virtual-thermostat-with-device.groovy | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 2cbad36..caeb2de 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -147,6 +147,12 @@ def off() { def handleChange() { def thermostat = getThermostat() + log.debug "handle change, mode: " + thermostat.currentValue('thermostatMode') + + ", temp: " + getAverageTemperature() + + ", coolingSetPoint: " + thermostat.currentValue("coolingSetpoint") + + ", thermostatSetPoint: " + thermostat.currentValue("thermostatSetpoint") + + ", heatingSetPoint: " + thermostat.currentValue("heatingSetpoint") + //update device thermostat.setVirtualTemperature(getAverageTemperature()) From 913ef2173227a743e9cb0200ca04a1e0b55e88de Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 16:18:48 -0400 Subject: [PATCH 21/63] cleanup --- .../virtual-thermostat-device.groovy | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index d1ddd1a..eb3d29a 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -22,17 +22,14 @@ metadata { command "coolbtn" command "heatbtn" command "autobtn" - command "levelUpDown" command "levelUp" command "levelDown" command "heatingSetpointUp" command "heatingSetpointDown" command "coolingSetpointUp" command "coolingSetpointDown" - command "changeMode" command "setVirtualTemperature", ["number"] - command "setHeatingStatus", ["string"] - + attribute "temperatureUnit", "string" } @@ -172,7 +169,7 @@ metadata { } def thermostatModes() { - ['cool', 'heat', 'auto', 'off'] + return ['cool', 'heat', 'auto', 'off'] } def shouldReportInCentigrade() { @@ -204,8 +201,7 @@ private initialize() { setThermostatOperatingState("idle") setThermostatMode("off") sendEvent(name:"supportedThermostatModes", value: thermostatModes(), displayed: false) - sendEvent(name:"supportedThermostatFanModes", values: [], displayed: false) - + state.tempScale = "C" } @@ -315,7 +311,6 @@ def parse(data) { def refresh() { log.trace "Executing refresh" sendEvent(name: "supportedThermostatModes", value: thermostatModes(), displayed: false) - sendEvent(name: "supportedThermostatFanModes", values: [], displayed: false) } def getThermostatMode() { @@ -364,9 +359,6 @@ def setThermostatMode(mode) { } } -def levelUpDown() { -} - def setVirtualTemperature(temp) { sendEvent(name:"temperature", value: temp, unit: unitString(), displayed: true) } From e1bddf2635111151b436cbee0b31f7f1eb74fca1 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 16:51:19 -0400 Subject: [PATCH 22/63] Trying to understand how the capabilities are exposed to other systems, but parking that for now so I an fix the set point stuff --- .../virtual-thermostat-device.groovy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index eb3d29a..9e15d8e 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -11,6 +11,7 @@ metadata { capability "Thermostat Mode" capability "Thermostat Heating Setpoint" capability "Thermostat Cooling Setpoint" + capability "Thermostat Setpoint" capability "Thermostat Operating State" capability "Configuration" capability "Refresh" @@ -31,6 +32,7 @@ metadata { command "setVirtualTemperature", ["number"] attribute "temperatureUnit", "string" + attribute "thermostatSetpoint", "number" } simulator { From 31923dce237ad5037fa9cdf8d09b4281be03637e Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 17:06:52 -0400 Subject: [PATCH 23/63] first step to using cooling and heating setpoint correctly --- .../virtual-thermostat-with-device.groovy | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index caeb2de..c5a9a6d 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -53,28 +53,36 @@ def createDevice() { return thermostat } +def motionDetected(){ + if(motion) { + for(m in motion) { + if(m.currentValue('contact') == "open") { + return true; + } + } + } + return false; +} + + def shouldHeatingBeOn(thermostat) { //if temperature is below emergency setpoint if(emergencyHeatingSetpoint && emergencyHeatingSetpoint > getAverageTemperature()) { return true; } - //if thermostat isnt set to heat + //if thermostat isn't set to heat if(thermostat.currentValue('thermostatMode') != "heat" && thermostat.currentValue('thermostatMode') != "auto") { return false; } //if any of the contact sensors are open - if(motion) { - for(m in motion) { - if(m.currentValue('contact') == "open") { - return false; - } - } + if(motionDetected()){ + return false; } - + //average temperature across all temperature sensors is above set point - if (thermostat.currentValue("heatingSetpoint") - getAverageTemperature() <= threshold) { + if (thermostat.currentValue("heatingSetpoint") < getAverageTemperature()) { return false; } @@ -87,22 +95,18 @@ def shouldCoolingBeOn(thermostat) { return true; } - //if thermostat isnt set to cool + //if thermostat isn't set to cool if(thermostat.currentValue('thermostatMode') != "cool" && thermostat.currentValue('thermostatMode') != "auto") { return false; } //if any of the contact sensors are open - if(motion) { - for(m in motion) { - if(m.currentValue('contact') == "open") { - return false; - } - } + if(motionDetected()){ + return false; } //average temperature across all temperature sensors is below set point - if (getAverageTemperature() - thermostat.currentValue("coolingSetpoint") <= threshold) { + if (thermostat.currentValue("coolingSetpoint") < getAverageTemperature()) { return false; } From ff477615ab55561548ed5d9f14450d13f80fa037 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 17:19:25 -0400 Subject: [PATCH 24/63] fix cooling --- .../virtual-thermostat-with-device.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index c5a9a6d..51b7bd7 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -106,7 +106,7 @@ def shouldCoolingBeOn(thermostat) { } //average temperature across all temperature sensors is below set point - if (thermostat.currentValue("coolingSetpoint") < getAverageTemperature()) { + if (thermostat.currentValue("coolingSetpoint") > getAverageTemperature()) { return false; } From 00a97445e1d7f104b838247fe22ce08ed3d1ff8f Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 18:22:59 -0400 Subject: [PATCH 25/63] a bit closer to supporting true cooling and heating set point --- .../virtual-thermostat-device.groovy | 37 ++++++++++--------- .../virtual-thermostat-with-device.groovy | 2 +- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 9e15d8e..6991d60 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -236,8 +236,8 @@ def getTempColors() { } def unitString() { return shouldReportInCentigrade() ? "C": "F" } -def defaultTemp() { return shouldReportInCentigrade() ? 20 : 70 } -def lowRange() { return shouldReportInCentigrade() ? 9 : 45 } +def defaultTemp() { return shouldReportInCentigrade() ? 23 : 73 } +def lowRange() { return shouldReportInCentigrade() ? 7 : 45 } def highRange() { return shouldReportInCentigrade() ? 45 : 113 } def getRange() { return "${lowRange()}..${highRange()}" } @@ -245,51 +245,54 @@ def getTemperature() { return device.currentValue("temperature") } +def setThermostatSetpoint(temp) { + log.debug "setThermostatSetpoint: " + temp + def ctsp = device.currentValue("thermostatSetpoint"); + + if(ctsp != temp) { + sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString(), displayed: false) + } +} + def setHeatingSetpoint(temp) { log.debug "setHeatingSetpoint: " + temp - def ctsp = device.currentValue("thermostatSetpoint"); def chsp = device.currentValue("heatingSetpoint"); - if(ctsp != temp || chsp != temp) { - sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString(), displayed: false) + if(chsp != temp) { sendEvent(name:"heatingSetpoint", value: temp, unit: unitString()) - sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) } } def heatingSetpointUp() { - def hsp = device.currentValue("thermostatSetpoint") + def hsp = device.currentValue("heatingSetpoint") if(hsp + 1.0 > highRange()) return; setHeatingSetpoint(hsp + 1.0) } def heatingSetpointDown() { - def hsp = device.currentValue("thermostatSetpoint") + def hsp = device.currentValue("heatingSetpoint") if(hsp - 1.0 < lowRange()) return; setHeatingSetpoint(hsp - 1.0) } def setCoolingSetpoint(temp) { - log.debug "setHeatingSetpoint: " + temp + log.debug "setCoolingSetpoint: " + temp - def ctsp = device.currentValue("thermostatSetpoint"); def ccsp = device.currentValue("coolingSetpoint"); - if(ctsp != temp || ccsp != temp) { - sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString(), displayed: false) + if(ccsp != temp) { sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) - sendEvent(name:"heatingSetpoint", value: temp, unit: unitString()) } } def coolingSetpointUp() { - def csp = device.currentValue("thermostatSetpoint") + def csp = device.currentValue("coolingSetpoint") if(csp + 1.0 > highRange()) return; setCoolingSetpoint(csp + 1.0) } def coolingSetpointDown() { - def csp = device.currentValue("thermostatSetpoint") + def csp = device.currentValue("coolingSetpoint") if(csp - 1.0 < lowRange()) return; setCoolingSetpoint(csp - 1.0) } @@ -297,13 +300,13 @@ def coolingSetpointDown() { def levelUp() { def hsp = device.currentValue("thermostatSetpoint") if(hsp + 1.0 > highRange()) return; - setHeatingSetpoint(hsp + 1.0) + setThermostatSetpoint(hsp + 1.0) } def levelDown() { def hsp = device.currentValue("thermostatSetpoint") if(hsp - 1.0 < lowRange()) return; - setHeatingSetpoint(hsp - 1.0) + setThermostatSetpoint(hsp - 1.0) } def parse(data) { diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 51b7bd7..128f9ab 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -19,7 +19,7 @@ preferences { section("Select the cooling outlet(s)... "){ input "cooling_outlets", "capability.switch", title: "Cooling Outlets", multiple: true } - section("Only heat/cool when contact(s) arent open (optional, leave blank to not require contact sensor)..."){ + section("Only heat/cool when contact(s) aren't open (optional, leave blank to not require contact sensor)..."){ input "motion", "capability.contactSensor", title: "Contact", required: false, multiple: true } section("Never go below this temperature: (optional)"){ From c4081325cdb77ba935ebb08c59a54fecaddebf8f Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 18:29:28 -0400 Subject: [PATCH 26/63] a bit closer to supporting true cooling and heating set point --- .../virtual-thermostat-with-device.groovy | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 128f9ab..adf9199 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -225,7 +225,7 @@ def updated() } //subscribe to virtual device changes - subscribe(thermostat, "thermostatSetpoint", thermostatTemperatureHandler) + subscribe(thermostat, "thermostatSetpoint", thermostatSetPointHandler) subscribe(thermostat, "heatingSetpoint", thermostatTemperatureHandler) subscribe(thermostat, "coolingSetpoint", thermostatTemperatureHandler) @@ -236,6 +236,11 @@ def updated() thermostat.setVirtualTemperature(getAverageTemperature()) } +def thermostatSetPointHandler(evt) { + log.debug "thermostatSetPointHandler" + evt + handleChange() +} + def temperatureHandler(evt) { handleChange() } From c7e3d17c23e6a632e699d11df28da6177a2c3002 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 19:26:37 -0400 Subject: [PATCH 27/63] more work to support separate cooling/heating set points --- .../virtual-thermostat-with-device.groovy | 109 +++++++++++------- 1 file changed, 65 insertions(+), 44 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index adf9199..9161185 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -43,7 +43,6 @@ def createDevice() { def thermostat def label = app.getLabel() - log.debug "create device with id: pmvt$state.deviceID, named: $label" //, hub: $sensor.hub.id" try { thermostat = addChildDevice("piratemedia/smartthings", "Virtual Thermostat Device", "pmvt" + state.deviceID, null, [label: label, name: label, completedSetup: true]) @@ -151,44 +150,46 @@ def off() { def handleChange() { def thermostat = getThermostat() - log.debug "handle change, mode: " + thermostat.currentValue('thermostatMode') + - ", temp: " + getAverageTemperature() + - ", coolingSetPoint: " + thermostat.currentValue("coolingSetpoint") + - ", thermostatSetPoint: " + thermostat.currentValue("thermostatSetpoint") + - ", heatingSetPoint: " + thermostat.currentValue("heatingSetpoint") + if(thermostat) { + log.debug "handle change, mode: " + thermostat.currentValue('thermostatMode') + + ", temp: " + getAverageTemperature() + + ", coolingSetPoint: " + thermostat.currentValue("coolingSetpoint") + + ", thermostatSetPoint: " + thermostat.currentValue("thermostatSetpoint") + + ", heatingSetPoint: " + thermostat.currentValue("heatingSetpoint") - //update device - thermostat.setVirtualTemperature(getAverageTemperature()) + //update device + thermostat.setVirtualTemperature(getAverageTemperature()) - switch (thermostat.currentValue('thermostatMode')){ - case "heat": - if(shouldHeatingBeOn(thermostat)) { - heat() - } else { - off() - } - break - case "cool": - if(shouldCoolingBeOn(thermostat)) { - cool() - } else { + switch (thermostat.currentValue('thermostatMode')){ + case "heat": + if(shouldHeatingBeOn(thermostat)) { + heat() + } else { + off() + } + break + case "cool": + if(shouldCoolingBeOn(thermostat)) { + cool() + } else { + off() + } + break + case "auto": + if(shouldCoolingBeOn(thermostat)) { + cool() + } else if(shouldHeatingBeOn(thermostat)) { + heat() + } else { + off() + } + break + case "off": + default: off() - } - break - case "auto": - if(shouldCoolingBeOn(thermostat)) { - cool() - } else if(shouldHeatingBeOn(thermostat)) { - heat() - } else { - off() - } - break - case "off": - default: - off() - break + break + } } } @@ -226,9 +227,8 @@ def updated() //subscribe to virtual device changes subscribe(thermostat, "thermostatSetpoint", thermostatSetPointHandler) - subscribe(thermostat, "heatingSetpoint", thermostatTemperatureHandler) - subscribe(thermostat, "coolingSetpoint", thermostatTemperatureHandler) - + subscribe(thermostat, "heatingSetpoint", heatingSetPointHandler) + subscribe(thermostat, "coolingSetpoint", coolingSetPointHandler) subscribe(thermostat, "thermostatMode", thermostatModeHandler) //reset some values @@ -237,22 +237,43 @@ def updated() } def thermostatSetPointHandler(evt) { - log.debug "thermostatSetPointHandler" + evt + def thermostat = getThermostat() + log.debug "thermostatSetPointHandler: " + thermostat.currentValue("thermostatSetpoint") + //log.debug "should be setting heatingsetpoint to " + (evt - threshold) + thermostat.setHeatingSetpoint(thermostat.currentValue("thermostatSetpoint") - threshold) + thermostat.setCoolingSetpoint(thermostat.currentValue("thermostatSetpoint") + threshold) + log.debug "calling handle change" handleChange() } -def temperatureHandler(evt) { +def thermostatTemperatureHandler(evt) { + log.debug "why is this being called? thermostatTemperatureHandler: " + evt handleChange() } -def motionHandler(evt) { - handleChange() +def coolingSetPointHandler(evt) { + def thermostat = getThermostat() + log.debug "coolingSetPointHandler: " + thermostat.currentValue("coolingSetpoint") + handleChange() } -def thermostatTemperatureHandler(evt) { +def heatingSetPointHandler(evt) { + def thermostat = getThermostat() + log.debug "heatingSetPointHandler: " + thermostat.currentValue("heatingSetpoint") handleChange() } +def temperatureHandler(evt) { + log.debug "temperatureHandler: " + evt + handleChange() +} + +def motionHandler(evt) { + log.debug "motionHandler: " + evt + handleChange() +} + def thermostatModeHandler(evt) { + log.debug "thermostatModeHandler: " + evt handleChange() -} \ No newline at end of file +} From e5eef005b9464884e1eaadca421eacfeae98af71 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 19:28:08 -0400 Subject: [PATCH 28/63] more work to support separate cooling and heating setpoints --- .../virtual-thermostat-device.groovy | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 6991d60..e400444 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -108,7 +108,7 @@ metadata { state("auto", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/auto_on.png") } - standardTile("refresh", "device.refresh", width:2, height:2, decoration: "flat") { + standardTile("refresh", "device.refresh", width:1, height:1, decoration: "flat") { state "Refresh", action:"refresh.refresh", icon:"st.secondary.refresh" } @@ -163,9 +163,10 @@ metadata { "autoBtn", "offBtn", //"thermostatMode", "heatingSetpointDown", - //"heatSliderControl", "refresh", + //"heatSliderControl", "coolingSetpointDown", //"coolSliderControl" + "refresh" ] ) } } @@ -199,10 +200,11 @@ private initialize() { setHeatingSetpoint(defaultTemp()) setCoolingSetpoint(defaultTemp()) + setThermostatSetpoint(defaultTemp()) setVirtualTemperature(defaultTemp()) setThermostatOperatingState("idle") setThermostatMode("off") - sendEvent(name:"supportedThermostatModes", value: thermostatModes(), displayed: false) + sendEvent(name:"supportedThermostatModes", value: thermostatModes(), displayed: false) state.tempScale = "C" } @@ -246,11 +248,11 @@ def getTemperature() { } def setThermostatSetpoint(temp) { - log.debug "setThermostatSetpoint: " + temp def ctsp = device.currentValue("thermostatSetpoint"); + log.debug "setThermostatSetpoint from " + ctsp + " to " + temp if(ctsp != temp) { - sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString(), displayed: false) + sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString()) } } @@ -315,7 +317,7 @@ def parse(data) { def refresh() { log.trace "Executing refresh" - sendEvent(name: "supportedThermostatModes", value: thermostatModes(), displayed: false) + configure() } def getThermostatMode() { From 050111e129dce8f79e7af41d8ddf899486200103 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Mon, 25 May 2020 19:37:36 -0400 Subject: [PATCH 29/63] a bit closer to supporting true cooling and heating set point --- .../virtual-thermostat-device.groovy | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index e400444..f2940f8 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -113,8 +113,7 @@ metadata { } valueTile("heatingSetpoint", "device.heatingSetpoint", width: 1, height: 1) { - state("heatingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", - backgroundColors: [ [value: 0, color: "#FFFFFF"], [value: 7, color: "#FF3300"], [value: 15, color: "#FF3300"] ]) + state("heatingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#e86d13") state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } @@ -134,8 +133,7 @@ metadata { } valueTile("coolingSetpoint", "device.coolingSetpoint", width: 1, height: 1) { - state("coolingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", - backgroundColors: [ [value: 0, color: "#FFFFFF"], [value: 7, color: "#0022FF"], [value: 15, color: "#0022FF"] ]) + state("coolingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#00a0dc") state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } From c8ba70e1c85c3f7c5768b50a14a263452f319b44 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 21:17:15 -0400 Subject: [PATCH 30/63] make sure the threshold is recognized --- .../virtual-thermostat-with-device.groovy | 46 ++++++++++++++----- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 9161185..e8f54ff 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -238,28 +238,52 @@ def updated() def thermostatSetPointHandler(evt) { def thermostat = getThermostat() - log.debug "thermostatSetPointHandler: " + thermostat.currentValue("thermostatSetpoint") - //log.debug "should be setting heatingsetpoint to " + (evt - threshold) - thermostat.setHeatingSetpoint(thermostat.currentValue("thermostatSetpoint") - threshold) - thermostat.setCoolingSetpoint(thermostat.currentValue("thermostatSetpoint") + threshold) + def temp = thermostat.currentValue("thermostatSetpoint") + log.debug "thermostatSetPointHandler: " + temp + thermostat.setHeatingSetpoint(temp - threshold) + thermostat.setCoolingSetpoint(temp + threshold) log.debug "calling handle change" handleChange() } -def thermostatTemperatureHandler(evt) { - log.debug "why is this being called? thermostatTemperatureHandler: " + evt - handleChange() -} - def coolingSetPointHandler(evt) { def thermostat = getThermostat() - log.debug "coolingSetPointHandler: " + thermostat.currentValue("coolingSetpoint") + def cool = thermostat.currentValue("coolingSetpoint") + def therm = thermostat.currentValue("thermostatSetpoint") + def targetThermostat = cool - threshold + def heat = thermostat.currentValue("heatingSetpoint") + def targetHeat = targetThermostat - threshold + log.debug "coolingSetPointHandler: " + cool + + if(therm > targetThermostat) { + thermostat.setThermostatSetpoint(targetThermostat) + } + + if(heat > targetHeat) { + thermostat.setHeatingSetpoint(targetHeat) + } + handleChange() } def heatingSetPointHandler(evt) { def thermostat = getThermostat() - log.debug "heatingSetPointHandler: " + thermostat.currentValue("heatingSetpoint") + def heat = thermostat.currentValue("heatingSetpoint") + def therm = thermostat.currentValue("thermostatSetpoint") + def targetThermostat = heat + threshold + def cool = thermostat.currentValue("coolingSetpoint") + def targetCool = targetThermostat + threshold + + log.debug "heatingSetPointHandler: " + temp + + if(therm < targetThermostat) { + thermostat.setThermostatSetpoint(targetThermostat) + } + + if(cool < targetCool) { + thermostat.setHeatingSetpoint(targetHeat) + } + handleChange() } From 325032d0d8aab71b1786288a8e3a044dec6c413e Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 21:24:58 -0400 Subject: [PATCH 31/63] update at 0.1 interval --- .../virtual-thermostat-device.groovy | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index f2940f8..501f9b0 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -196,8 +196,8 @@ def configure() { private initialize() { log.trace "Executing 'initialize'" - setHeatingSetpoint(defaultTemp()) setCoolingSetpoint(defaultTemp()) + setHeatingSetpoint(defaultTemp()) setThermostatSetpoint(defaultTemp()) setVirtualTemperature(defaultTemp()) setThermostatOperatingState("idle") @@ -265,14 +265,14 @@ def setHeatingSetpoint(temp) { def heatingSetpointUp() { def hsp = device.currentValue("heatingSetpoint") - if(hsp + 1.0 > highRange()) return; - setHeatingSetpoint(hsp + 1.0) + if(hsp + 0.1 > highRange()) return; + setHeatingSetpoint(hsp + 0.1) } def heatingSetpointDown() { def hsp = device.currentValue("heatingSetpoint") - if(hsp - 1.0 < lowRange()) return; - setHeatingSetpoint(hsp - 1.0) + if(hsp - 0.1 < lowRange()) return; + setHeatingSetpoint(hsp - 0.1) } def setCoolingSetpoint(temp) { @@ -287,14 +287,14 @@ def setCoolingSetpoint(temp) { def coolingSetpointUp() { def csp = device.currentValue("coolingSetpoint") - if(csp + 1.0 > highRange()) return; - setCoolingSetpoint(csp + 1.0) + if(csp + 0.1 > highRange()) return; + setCoolingSetpoint(csp + 0.1) } def coolingSetpointDown() { def csp = device.currentValue("coolingSetpoint") - if(csp - 1.0 < lowRange()) return; - setCoolingSetpoint(csp - 1.0) + if(csp - 0.1 < lowRange()) return; + setCoolingSetpoint(csp - 0.1) } def levelUp() { From ff08c894139dfd278ff22166bacbe98be05d9f8c Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Mon, 25 May 2020 21:28:20 -0400 Subject: [PATCH 32/63] updated initialization --- .../virtual-thermostat-device.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 501f9b0..4bc6223 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -196,8 +196,8 @@ def configure() { private initialize() { log.trace "Executing 'initialize'" - setCoolingSetpoint(defaultTemp()) - setHeatingSetpoint(defaultTemp()) + setCoolingSetpoint(defaultTemp()+1.0) + setHeatingSetpoint(defaultTemp()-1.0) setThermostatSetpoint(defaultTemp()) setVirtualTemperature(defaultTemp()) setThermostatOperatingState("idle") From 39c11c033262b6951078ee83a608c08018f00c9d Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Tue, 26 May 2020 06:26:33 -0400 Subject: [PATCH 33/63] avoid turning on or off devices that are already on/off - led my aircon which was already off to turn itself double off... in this case double off meant on :) --- .../virtual-thermostat-with-device.groovy | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index e8f54ff..5de60a5 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -128,24 +128,38 @@ def getAverageTemperature() { } def cool() { - log.debug "cooling outlets on" - cooling_outlets.on() - heating_outlets.off() - thermostat.setThermostatOperatingState('cooling') + if(thermostat.currentValue("thermostatOperatingState") != 'cooling') { + log.debug "cooling outlets on" + cooling_outlets.on() + if(thermostat.currentValue("thermostatOperatingState") == 'heating') { + heating_outlets.off() + } + thermostat.setThermostatOperatingState('cooling') + } } def heat() { - log.debug "heating outlets on" - cooling_outlets.off() - heating_outlets.on() - thermostat.setThermostatOperatingState('heating') + if(thermostat.currentValue("thermostatOperatingState") != 'heating') { + log.debug "heating outlets on" + heating_outlets.on() + if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { + cooling_outlets.off() + } + thermostat.setThermostatOperatingState('heating') + } } def off() { - log.debug "all outlets off" - cooling_outlets.off() - heating_outlets.off() - thermostat.setThermostatOperatingState('idle') + if(thermostat.currentValue("thermostatOperatingState") != 'idle') { + log.debug "all outlets off" + if(thermostat.currentValue("thermostatOperatingState") == 'heating') { + heating_outlets.off() + } + if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { + cooling_outlets.off() + } + thermostat.setThermostatOperatingState('idle') + } } def handleChange() { From d93981c553fc70ed11b2dc9d38c62a65be15c497 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Thu, 28 May 2020 13:47:14 -0400 Subject: [PATCH 34/63] UI updated --- .../virtual-thermostat-device.groovy | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 4bc6223..4b2371b 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -50,9 +50,11 @@ metadata { attributeState("VALUE_DOWN", action: "levelDown") } - tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") {iuj + tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") { // valid values are thermostatOperatingState — ["heating", "idle", "pending cool", "vent economizer", "cooling", "pending heat", "fan only"] // https://graph.api.smartthings.com/ide/doc/capabilities + + attributeState("off", backgroundColor: "#cccccc") attributeState("idle", backgroundColor: "#44B621") attributeState("heating", backgroundColor: "#e86d13") attributeState("cooling", backgroundColor: "#00a0dc") @@ -81,14 +83,14 @@ metadata { backgroundColors: getTempColors(), canChangeIcon: true) } - standardTile("thermostatMode", "device.thermostatMode", width:2, height:1, decoration: "flat") { + standardTile("thermostatMode", "device.thermostatMode", width:6, height:2, decoration: "flat") { state("off", label: '${name}') state("heat", label: '${name}') state("cool", label: '${name}') state("auto", label: '${name}') } - standardTile("offBtn", "device.thermostatMode", width:2, height:2, decoration: "flat") { + standardTile("offBtn", "device.thermostatMode", width:2, height:4, decoration: "flat") { state("", action: "offbtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_on.png", default: true) state("off", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_off.png") } @@ -112,37 +114,36 @@ metadata { state "Refresh", action:"refresh.refresh", icon:"st.secondary.refresh" } - valueTile("heatingSetpoint", "device.heatingSetpoint", width: 1, height: 1) { + valueTile("heatingSetpoint", "device.heatingSetpoint", width: 2, height: 2) { state("heatingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#e86d13") state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } - standardTile("heatingSetpointUp", "device.heatingSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("heatingSetpointUp", "device.heatingSetpoint", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label: '', action:"heatingSetpointUp", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_up.png" state "", label: '' } - standardTile("heatingSetpointDown", "device.heatingSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("heatingSetpointDown", "device.heatingSetpoint", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label:'', action:"heatingSetpointDown", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_down.png" state "", label: '' } - controlTile("heatSliderControl", "device.heatingSetpoint", "slider", height: 1, width: 3, range: getRange(), inactiveLabel: false) { + controlTile("heatSliderControl", "device.heatingSetpoint", "slider", height: 4, width: 6, range: getRange()) { state "default", action:"setHeatingSetpoint", backgroundColor:"#FF3300" - state "", label: '' } - valueTile("coolingSetpoint", "device.coolingSetpoint", width: 1, height: 1) { + valueTile("coolingSetpoint", "device.coolingSetpoint", width: 2, height: 2) { state("coolingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#00a0dc") state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } - standardTile("coolingSetpointUp", "device.coolingSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("coolingSetpointUp", "device.coolingSetpoint", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label: '', action:"coolingSetpointUp", icon:"https://raw.githubusercontent.com/racarmichael/SmartThings-VirtualThermostat-WithDTH/master/images/cool_arrow_up.png" state "", label: '' } - standardTile("coolingSetpointDown", "device.coolingSetpoint", width: 1, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("coolingSetpointDown", "device.coolingSetpoint", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label:'', action:"coolingSetpointDown", icon:"https://raw.githubusercontent.com/racarmichael/SmartThings-VirtualThermostat-WithDTH/master/images/cool_arrow_down.png" state "", label: '' } @@ -155,16 +156,16 @@ metadata { main("temp2") details( ["temperature", - "coolBtn", "heatBtn", - "heatingSetpointUp", "coolingSetpointUp", - "heatingSetpoint", "coolingSetpoint", - "autoBtn", "offBtn", - //"thermostatMode", - "heatingSetpointDown", + "coolingSetpointUp", "heatingSetpointUp", + "offBtn", + "coolingSetpoint", "heatingSetpoint", + "coolingSetpointDown", "heatingSetpointDown", + "thermostatMode", + "coolBtn","heatBtn", + "autoBtn" //"heatSliderControl", - "coolingSetpointDown", //"coolSliderControl" - "refresh" + //"refresh" ] ) } } @@ -200,7 +201,7 @@ private initialize() { setHeatingSetpoint(defaultTemp()-1.0) setThermostatSetpoint(defaultTemp()) setVirtualTemperature(defaultTemp()) - setThermostatOperatingState("idle") + setThermostatOperatingState("off") setThermostatMode("off") sendEvent(name:"supportedThermostatModes", value: thermostatModes(), displayed: false) From 8b14592bc0ae3a3d7c5340994a1f4656c5b7420e Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Thu, 28 May 2020 13:48:09 -0400 Subject: [PATCH 35/63] added off state to improve UI experience --- .../virtual-thermostat-with-device.groovy | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 5de60a5..0b70605 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -150,8 +150,21 @@ def heat() { } def off() { + if(thermostat.currentValue("thermostatOperatingState") != 'off') { + log.debug "off: all outlets off" + if(thermostat.currentValue("thermostatOperatingState") == 'heating') { + heating_outlets.off() + } + if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { + cooling_outlets.off() + } + thermostat.setThermostatOperatingState('off') + } +} + +def idle() { if(thermostat.currentValue("thermostatOperatingState") != 'idle') { - log.debug "all outlets off" + log.debug "idle: all outlets off" if(thermostat.currentValue("thermostatOperatingState") == 'heating') { heating_outlets.off() } @@ -169,8 +182,13 @@ def handleChange() { ", temp: " + getAverageTemperature() + ", coolingSetPoint: " + thermostat.currentValue("coolingSetpoint") + ", thermostatSetPoint: " + thermostat.currentValue("thermostatSetpoint") + - ", heatingSetPoint: " + thermostat.currentValue("heatingSetpoint") - + ", heatingSetPoint: " + thermostat.currentValue("heatingSetpoint") + + ", supportedAttributes: " + thermostat.getSupportedAttributes() + + def attrs = thermostat.supportedAttributes + attrs.each { + log.debug "${thermostat.displayName}, attribute: ${it.name}, dataType: ${it.dataType}, value: " + thermostat.currentValue(it.name) + } //update device thermostat.setVirtualTemperature(getAverageTemperature()) @@ -180,14 +198,14 @@ def handleChange() { if(shouldHeatingBeOn(thermostat)) { heat() } else { - off() + idle() } break case "cool": if(shouldCoolingBeOn(thermostat)) { cool() } else { - off() + idle() } break case "auto": @@ -196,7 +214,7 @@ def handleChange() { } else if(shouldHeatingBeOn(thermostat)) { heat() } else { - off() + idle() } break case "off": From 93523d9fa328b208b2ddeb2b07d178fd616704c9 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sat, 30 May 2020 12:28:03 -0400 Subject: [PATCH 36/63] minor UI changes to make it clearer which state is set --- .../virtual-thermostat-device.groovy | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 4b2371b..9aa0d76 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -32,7 +32,6 @@ metadata { command "setVirtualTemperature", ["number"] attribute "temperatureUnit", "string" - attribute "thermostatSetpoint", "number" } simulator { @@ -92,7 +91,7 @@ metadata { standardTile("offBtn", "device.thermostatMode", width:2, height:4, decoration: "flat") { state("", action: "offbtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_on.png", default: true) - state("off", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_off.png") + state("off", action: "autobtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_off.png") } standardTile("heatBtn", "device.thermostatMode", width:2, height:2, decoration: "flat") { @@ -119,14 +118,18 @@ metadata { state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } - standardTile("heatingSetpointUp", "device.heatingSetpoint", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { - state "default", label: '', action:"heatingSetpointUp", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_up.png" - state "", label: '' + standardTile("heatingSetpointUp", "device.thermostatMode", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { + state "auto", label: '', action:"heatingSetpointUp", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_up.png" + state "heat", label: '', action:"heatingSetpointUp", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_up.png" + state "cool", label: '' + state "off", label: '' } - standardTile("heatingSetpointDown", "device.heatingSetpoint", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { - state "default", label:'', action:"heatingSetpointDown", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_down.png" - state "", label: '' + standardTile("heatingSetpointDown", "device.thermostatMode", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { + state "auto", label:'', action:"heatingSetpointDown", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_down.png" + state "heat", label:'', action:"heatingSetpointDown", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_down.png" + state "cool", label: '' + state "off", label: '' } controlTile("heatSliderControl", "device.heatingSetpoint", "slider", height: 4, width: 6, range: getRange()) { @@ -138,14 +141,16 @@ metadata { state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } - standardTile("coolingSetpointUp", "device.coolingSetpoint", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("coolingSetpointUp", "device.thermostatMode", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label: '', action:"coolingSetpointUp", icon:"https://raw.githubusercontent.com/racarmichael/SmartThings-VirtualThermostat-WithDTH/master/images/cool_arrow_up.png" - state "", label: '' + state "heat", label: '' + state "off", label: '' } - standardTile("coolingSetpointDown", "device.coolingSetpoint", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { + standardTile("coolingSetpointDown", "device.thermostatMode", width: 2, height: 1, canChangeIcon: true, decoration: "flat") { state "default", label:'', action:"coolingSetpointDown", icon:"https://raw.githubusercontent.com/racarmichael/SmartThings-VirtualThermostat-WithDTH/master/images/cool_arrow_down.png" - state "", label: '' + state "heat", label: '' + state "off", label: '' } controlTile("coolSliderControl", "device.coolingSetpoint", "slider", height: 1, width: 4, range: getRange(), inactiveLabel: false) { @@ -153,6 +158,10 @@ metadata { state "", label: '' } + //standardTile("upButtonControl", "device.thermostatSetpoint", width: 2, height: 2, inactiveLabel: false) { + // state "setpoint", action:"raiseSetpoint", icon:"st.thermostat.heat" + //} + main("temp2") details( ["temperature", @@ -162,10 +171,10 @@ metadata { "coolingSetpointDown", "heatingSetpointDown", "thermostatMode", "coolBtn","heatBtn", - "autoBtn" - //"heatSliderControl", + "autoBtn", + //"heatSliderControl", //"coolSliderControl" - //"refresh" + "refresh" ] ) } } From a8860a144412f91c2f3cd4467d6031c2c1e575c8 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sat, 30 May 2020 17:47:14 -0400 Subject: [PATCH 37/63] updated the way heating/cooling/thermostat setpoint is set --- .../virtual-thermostat-with-device.groovy | 77 +++++++++++++------ 1 file changed, 55 insertions(+), 22 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 0b70605..518defa 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -28,8 +28,8 @@ preferences { section("Never go above this temperature: (optional)"){ input "emergencyCoolingSetpoint", "decimal", title: "Emergency Max Temp", required: false } - section("Temperature Threshold (Don't allow heating/cooling to go above or bellow this amount from set temperature)") { - input "threshold", "decimal", title: "Temperature Threshold", required: false, defaultValue: 1.0 + section("The minimum difference between the heating and cooling setpoint, it's recommended to not put this too low to conserve energy") { + input "heatCoolDelta", "decimal", title: "Heat / Cool Delta", required: false, defaultValue: 3.0 } } @@ -266,54 +266,86 @@ def updated() //reset some values thermostat.clearSensorData() thermostat.setVirtualTemperature(getAverageTemperature()) + thermostat.setHeatCoolDelta(heatCoolDelta) } def thermostatSetPointHandler(evt) { def thermostat = getThermostat() def temp = thermostat.currentValue("thermostatSetpoint") - log.debug "thermostatSetPointHandler: " + temp - thermostat.setHeatingSetpoint(temp - threshold) - thermostat.setCoolingSetpoint(temp + threshold) + def cool = thermostat.currentValue("coolingSetpoint") + def heat = thermostat.currentValue("heatingSetpoint") + def mode = thermostat.currentValue('thermostatMode') + log.debug "thermostatSetPointHandler: " + temp + ", thermostatMode: " + mode + + if(mode == "heat" && heat != temp) { + thermostat.setHeatingSetpoint(temp) + } else if(mode == "cool" && cool != temp) { + thermostat.setCoolingSetpoint(temp) + } + + if(cool < temp) { + thermostat.setCoolingSetpoint(temp) + } else if(heat > temp) { + thermostat.setHeatingSetpoint(temp) + } log.debug "calling handle change" handleChange() } +def autoThermostatSetPoint() { + def temp = thermostat.currentValue("thermostatSetpoint") + def cool = thermostat.currentValue("coolingSetpoint") + def heat = thermostat.currentValue("heatingSetpoint") + def mode = thermostat.currentValue('thermostatMode') + if(mode == "auto") { + def newTemp = (cool + heat) / 2.0 + if(newTemp != temp) { + thermostat.setThermostatSetpoint(newTemp.setScale(1, BigDecimal.ROUND_HALF_EVEN)) + } + } +} + def coolingSetPointHandler(evt) { def thermostat = getThermostat() def cool = thermostat.currentValue("coolingSetpoint") - def therm = thermostat.currentValue("thermostatSetpoint") - def targetThermostat = cool - threshold - def heat = thermostat.currentValue("heatingSetpoint") - def targetHeat = targetThermostat - threshold - log.debug "coolingSetPointHandler: " + cool + log.debug "coolingSetPointHandler: " + cool + ", heatCoolDelta: " + heatCoolDelta - if(therm > targetThermostat) { - thermostat.setThermostatSetpoint(targetThermostat) + if(thermostat.currentValue('thermostatMode') == "cool") { + thermostat.setThermostatSetpoint(cool) + } else if(thermostat.currentValue('thermostatMode') == "auto") { + autoThermostatSetPoint() } - if(heat > targetHeat) { + def targetHeat = cool - heatCoolDelta + if(thermostat.currentValue("heatingSetpoint") > targetHeat) { thermostat.setHeatingSetpoint(targetHeat) } + if(thermostat.currentValue("thermostatSetpoint") > cool) { + thermostat.setThermostatSetpoint(cool) + } + handleChange() } def heatingSetPointHandler(evt) { def thermostat = getThermostat() def heat = thermostat.currentValue("heatingSetpoint") - def therm = thermostat.currentValue("thermostatSetpoint") - def targetThermostat = heat + threshold - def cool = thermostat.currentValue("coolingSetpoint") - def targetCool = targetThermostat + threshold + log.debug "heatingSetPointHandler: " + heat + ", heatCoolDelta: " + heatCoolDelta - log.debug "heatingSetPointHandler: " + temp + if(thermostat.currentValue('thermostatMode') == "heat") { + thermostat.setThermostatSetpoint(heat) + } else if(thermostat.currentValue('thermostatMode') == "auto") { + autoThermostatSetPoint() + } - if(therm < targetThermostat) { - thermostat.setThermostatSetpoint(targetThermostat) + def targetCool = heat + heatCoolDelta + if(thermostat.currentValue("coolingSetpoint") < targetCool) { + thermostat.setCoolingSetpoint(targetCool) } - if(cool < targetCool) { - thermostat.setHeatingSetpoint(targetHeat) + if(thermostat.currentValue("thermostatSetpoint") < heat) { + thermostat.setThermostatSetpoint(heat) } handleChange() @@ -331,5 +363,6 @@ def motionHandler(evt) { def thermostatModeHandler(evt) { log.debug "thermostatModeHandler: " + evt + autoThermostatSetPoint() handleChange() } From bbd9fb01e2da861286472314b3eccf82c1174678 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sat, 30 May 2020 17:48:14 -0400 Subject: [PATCH 38/63] updated how cooling/heating/thermostat set points are updated --- .../virtual-thermostat-device.groovy | 92 +++++++++++++------ 1 file changed, 65 insertions(+), 27 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 9aa0d76..52421fb 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -30,8 +30,10 @@ metadata { command "coolingSetpointUp" command "coolingSetpointDown" command "setVirtualTemperature", ["number"] + command "setHeatCoolDelta", ["number"] attribute "temperatureUnit", "string" + attribute "heatCoolDelta", "number" } simulator { @@ -55,7 +57,7 @@ metadata { attributeState("off", backgroundColor: "#cccccc") attributeState("idle", backgroundColor: "#44B621") - attributeState("heating", backgroundColor: "#e86d13") + attributeState("heating", backgroundColor: "#f5dcec") attributeState("cooling", backgroundColor: "#00a0dc") attributeState("pending heat", backgroundColor: "#ffd19c") attributeState("pending cool", backgroundColor: "#85b3d6") @@ -91,7 +93,7 @@ metadata { standardTile("offBtn", "device.thermostatMode", width:2, height:4, decoration: "flat") { state("", action: "offbtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_on.png", default: true) - state("off", action: "autobtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_off.png") + state("off", action: "offbtn", icon: "https://raw.githubusercontent.com/steffennissen/SmartThings-VirtualThermostat-WithDTH/master/images/unit_off.png") } standardTile("heatBtn", "device.thermostatMode", width:2, height:2, decoration: "flat") { @@ -114,7 +116,7 @@ metadata { } valueTile("heatingSetpoint", "device.heatingSetpoint", width: 2, height: 2) { - state("heatingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#e86d13") + state("heatingSetpoint", action: "heatbtn", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#f5dcec") state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } @@ -132,12 +134,12 @@ metadata { state "off", label: '' } - controlTile("heatSliderControl", "device.heatingSetpoint", "slider", height: 4, width: 6, range: getRange()) { - state "default", action:"setHeatingSetpoint", backgroundColor:"#FF3300" + controlTile("heatSliderControl", "device.heatingSetpoint", "slider", height: 2, width: 2, range: getRange()) { + state "default", action:"setHeatingSetpoint", backgroundColor:"#e86d13" } valueTile("coolingSetpoint", "device.coolingSetpoint", width: 2, height: 2) { - state("coolingSetpoint", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#00a0dc") + state("coolingSetpoint", action: "coolbtn", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#00a0dc") state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } @@ -153,7 +155,7 @@ metadata { state "off", label: '' } - controlTile("coolSliderControl", "device.coolingSetpoint", "slider", height: 1, width: 4, range: getRange(), inactiveLabel: false) { + controlTile("coolSliderControl", "device.coolingSetpoint", "slider", height: 1, width: 4, range: getRange(), inactiveLabel: true) { state "default", action:"setCoolingSetpoint", backgroundColor:"#0022ff" state "", label: '' } @@ -167,12 +169,13 @@ metadata { details( ["temperature", "coolingSetpointUp", "heatingSetpointUp", "offBtn", - "coolingSetpoint", "heatingSetpoint", + "coolingSetpoint", + "heatingSetpoint", + //"heatSliderControl", "coolingSetpointDown", "heatingSetpointDown", "thermostatMode", "coolBtn","heatBtn", "autoBtn", - //"heatSliderControl", //"coolSliderControl" "refresh" ] ) @@ -206,8 +209,8 @@ def configure() { private initialize() { log.trace "Executing 'initialize'" - setCoolingSetpoint(defaultTemp()+1.0) - setHeatingSetpoint(defaultTemp()-1.0) + setCoolingSetpoint(defaultTemp()+2.0) + setHeatingSetpoint(defaultTemp()-2.0) setThermostatSetpoint(defaultTemp()) setVirtualTemperature(defaultTemp()) setThermostatOperatingState("off") @@ -247,8 +250,8 @@ def getTempColors() { def unitString() { return shouldReportInCentigrade() ? "C": "F" } def defaultTemp() { return shouldReportInCentigrade() ? 23 : 73 } -def lowRange() { return shouldReportInCentigrade() ? 7 : 45 } -def highRange() { return shouldReportInCentigrade() ? 45 : 113 } +def lowRange() { return shouldReportInCentigrade() ? 7.0 : 45.0 } +def highRange() { return shouldReportInCentigrade() ? 45.0 : 113.0 } def getRange() { return "${lowRange()}..${highRange()}" } def getTemperature() { @@ -256,19 +259,19 @@ def getTemperature() { } def setThermostatSetpoint(temp) { - def ctsp = device.currentValue("thermostatSetpoint"); + def tsp = device.currentValue("thermostatSetpoint") - log.debug "setThermostatSetpoint from " + ctsp + " to " + temp - if(ctsp != temp) { + log.debug "setThermostatSetpoint from " + tsp + " to " + temp + if(tsp != temp) { sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString()) } } def setHeatingSetpoint(temp) { log.debug "setHeatingSetpoint: " + temp - def chsp = device.currentValue("heatingSetpoint"); + def hsp = device.currentValue("heatingSetpoint"); - if(chsp != temp) { + if(hsp != temp) { sendEvent(name:"heatingSetpoint", value: temp, unit: unitString()) } } @@ -288,9 +291,9 @@ def heatingSetpointDown() { def setCoolingSetpoint(temp) { log.debug "setCoolingSetpoint: " + temp - def ccsp = device.currentValue("coolingSetpoint"); + def csp = device.currentValue("coolingSetpoint"); - if(ccsp != temp) { + if(csp != temp) { sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) } } @@ -308,15 +311,33 @@ def coolingSetpointDown() { } def levelUp() { - def hsp = device.currentValue("thermostatSetpoint") - if(hsp + 1.0 > highRange()) return; - setThermostatSetpoint(hsp + 1.0) + def mode = device.currentValue("thermostatMode") + switch (mode) { + case "heat": + heatingSetpointUp() + break + case "cool": + coolingSetpointUp() + break + default: + heatingSetpointUp() + coolingSetpointUp() + } } def levelDown() { - def hsp = device.currentValue("thermostatSetpoint") - if(hsp - 1.0 < lowRange()) return; - setThermostatSetpoint(hsp - 1.0) + def mode = device.currentValue("thermostatMode") + switch(mode){ + case "heat": + heatingSetpointDown() + break + case "cool": + coolingSetpointDown() + break + default: + heatingSetpointDown() + coolingSetpointDown() + } } def parse(data) { @@ -352,18 +373,31 @@ def poll() { } def offbtn() { - setThermostatMode("off") + log.debug "offbtn, lastmode=" + state.lastMode + if(device.currentValue("thermostatMode") != "off") { + state.lastMode = device.currentValue("thermostatMode") + setThermostatMode("off") + } else { + if(state.lastMode) { + setThermostatMode(state.lastMode) + } else { + setThermostatMode("auto") + } + } } def coolbtn() { setThermostatMode("cool") + setThermostatSetpoint(device.currentValue("coolingSetpoint")) } def heatbtn() { setThermostatMode("heat") + setThermostatSetpoint(device.currentValue("heatingSetpoint")) } def autobtn() { + log.debug "autobtn" setThermostatMode("auto") } @@ -378,6 +412,10 @@ def setVirtualTemperature(temp) { sendEvent(name:"temperature", value: temp, unit: unitString(), displayed: true) } +def setHeatCoolDelta(delta) { + sendEvent(name:"heatCoolDelta", value: delta, unit: unitString(), displayed: true) +} + def setThermostatOperatingState(string) { if(device.currentValue("thermostatOperatingState") != string) { sendEvent(name:"thermostatOperatingState", value: string) From 534b47f939b172d3ff7e3ac8512f8cedfb0cbc41 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 31 May 2020 16:28:43 -0400 Subject: [PATCH 39/63] moved code from app to device for a cleaner and more performant design + minor updates --- .../virtual-thermostat-device.groovy | 163 +++++++++++++----- 1 file changed, 121 insertions(+), 42 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 52421fb..e252b5f 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -47,8 +47,8 @@ metadata { } tileAttribute("device.thermostatSetpoint", key: "VALUE_CONTROL") { - attributeState("VALUE_UP", action: "levelUp") - attributeState("VALUE_DOWN", action: "levelDown") + attributeState("VALUE_UP", label: '', action: "levelUp") + attributeState("VALUE_DOWN", label: '', action: "levelDown") } tileAttribute("device.thermostatOperatingState", key: "OPERATING_STATE") { @@ -57,7 +57,7 @@ metadata { attributeState("off", backgroundColor: "#cccccc") attributeState("idle", backgroundColor: "#44B621") - attributeState("heating", backgroundColor: "#f5dcec") + attributeState("heating", backgroundColor: "#e86d13") attributeState("cooling", backgroundColor: "#00a0dc") attributeState("pending heat", backgroundColor: "#ffd19c") attributeState("pending cool", backgroundColor: "#85b3d6") @@ -116,7 +116,7 @@ metadata { } valueTile("heatingSetpoint", "device.heatingSetpoint", width: 2, height: 2) { - state("heatingSetpoint", action: "heatbtn", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#f5dcec") + state("heatingSetpoint", action: "heatbtn", label:'${currentValue}', unit: unitString(), foregroundColor: "#FFFFFF", backgroundColor: "#e86d13") state("disabled", label: '', foregroundColor: "#FFFFFF", backgroundColor: "#FFFFFF") } @@ -160,10 +160,6 @@ metadata { state "", label: '' } - //standardTile("upButtonControl", "device.thermostatSetpoint", width: 2, height: 2, inactiveLabel: false) { - // state "setpoint", action:"raiseSetpoint", icon:"st.thermostat.heat" - //} - main("temp2") details( ["temperature", @@ -177,7 +173,7 @@ metadata { "coolBtn","heatBtn", "autoBtn", //"coolSliderControl" - "refresh" + //"refresh", ] ) } } @@ -258,70 +254,152 @@ def getTemperature() { return device.currentValue("temperature") } -def setThermostatSetpoint(temp) { +def sendThermostatSetpoint(temp) { def tsp = device.currentValue("thermostatSetpoint") + if(temp != tsp) { + log.debug "sendThermostatSetpoint from " + tsp + " to " + temp + sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString()) + } +} +def sendCoolingSetpoint(temp) { + def csp = device.currentValue("coolingSetpoint") + if(temp != csp) { + log.debug "sendCoolingSetpoint from " + csp + " to " + temp + sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) + } +} + +def sendHeatingSetpoint(temp) { + def hsp = device.currentValue("heatingSetpoint") + if(temp != hsp) { + log.debug "sendHeatingSetpoint from " + hsp + " to " + temp + sendEvent(name:"heatingSetpoint", value: temp, unit: unitString()) + } +} + +def setThermostatSetpoint(temp) { + def tsp = device.currentValue("thermostatSetpoint") log.debug "setThermostatSetpoint from " + tsp + " to " + temp if(tsp != temp) { - sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString()) + def csp = device.currentValue("coolingSetpoint") + def hsp = device.currentValue("heatingSetpoint") + def mode = device.currentValue('thermostatMode') + + if(mode == "heat" && hsp != temp) { + sendHeatingSetpoint(temp) + } else if(mode == "cool" && csp != temp) { + sendCoolingSetpoint(temp) + } + + if(csp < temp) { + sendCoolingSetpoint(temp) + } else if(heat > temp) { + setHeatingSetpoint(temp) + } + sendThermostatSetpoint(temp) } } -def setHeatingSetpoint(temp) { - log.debug "setHeatingSetpoint: " + temp - def hsp = device.currentValue("heatingSetpoint"); +def autoThermostatSetPoint() { + if(device.currentValue('thermostatMode') == "auto") { + def temp = device.currentValue("thermostatSetpoint") + def cool = device.currentValue("coolingSetpoint") + def heat = device.currentValue("heatingSetpoint") - if(hsp != temp) { - sendEvent(name:"heatingSetpoint", value: temp, unit: unitString()) + def newTemp = (cool + heat) / 2.0 + if(newTemp != temp) { + sendThermostatSetpoint(newTemp.setScale(1, BigDecimal.ROUND_HALF_EVEN)) + } } } -def heatingSetpointUp() { - def hsp = device.currentValue("heatingSetpoint") - if(hsp + 0.1 > highRange()) return; - setHeatingSetpoint(hsp + 0.1) +def inRange(val, low, high) { + if(val < low) + return low + else if(val > high) + return high + return val } -def heatingSetpointDown() { - def hsp = device.currentValue("heatingSetpoint") - if(hsp - 0.1 < lowRange()) return; - setHeatingSetpoint(hsp - 0.1) +def setHeatingSetpoint(temp) { + def hsp = device.currentValue("heatingSetpoint"); + log.debug "setHeatingSetpoint from " + hsp + " to " + temp + " within range " + lowRange() + " to " + highRange() + temp = inRange(temp, lowRange(), highRange()) + + if(hsp != temp) { + if(device.currentValue('thermostatMode') == "heat") { + sendThermostatSetpoint(temp) + } else if(device.currentValue('thermostatMode') == "auto") { + autoThermostatSetPoint() + } + + def targetCool = temp + device.currentValue('heatCoolDelta') + if(device.currentValue("coolingSetpoint") < targetCool) { + sendCoolingSetpoint(targetCool) + } + + if(device.currentValue("thermostatSetpoint") < temp) { + sendThermostatSetpoint(temp) + } + + sendHeatingSetpoint(temp) + } } def setCoolingSetpoint(temp) { - log.debug "setCoolingSetpoint: " + temp - def csp = device.currentValue("coolingSetpoint"); - + log.debug "setCoolingSetpoint: from " + csp + " to " + temp + " within range " + lowRange() + " to " + highRange() + temp = inRange(temp, lowRange(), highRange()) + if(csp != temp) { - sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) + if(device.currentValue('thermostatMode') == "cool") { + sendThermostatSetpoint(temp) + } else if(device.currentValue('thermostatMode') == "auto") { + autoThermostatSetPoint() + } + + def targetHeat = temp - device.currentValue('heatCoolDelta') + if(device.currentValue("heatingSetpoint") > targetHeat) { + sendHeatingSetpoint(targetHeat) + } + + if(device.currentValue("thermostatSetpoint") > temp) { + sendThermostatSetpoint(temp) + } + + sendCoolingSetpoint(temp) } } +def heatingSetpointUp() { + setHeatingSetpoint(device.currentValue("heatingSetpoint") + 0.1) +} + +def heatingSetpointDown() { + setHeatingSetpoint(device.currentValue("heatingSetpoint") - 0.1) +} + def coolingSetpointUp() { - def csp = device.currentValue("coolingSetpoint") - if(csp + 0.1 > highRange()) return; - setCoolingSetpoint(csp + 0.1) + setCoolingSetpoint(device.currentValue("coolingSetpoint") + 0.1) } def coolingSetpointDown() { - def csp = device.currentValue("coolingSetpoint") - if(csp - 0.1 < lowRange()) return; - setCoolingSetpoint(csp - 0.1) + setCoolingSetpoint(device.currentValue("coolingSetpoint") - 0.1) } def levelUp() { def mode = device.currentValue("thermostatMode") switch (mode) { case "heat": - heatingSetpointUp() + setHeatingSetpoint(device.currentValue("heatingSetpoint") + 0.5) break case "cool": - coolingSetpointUp() + setCoolingSetpoint(device.currentValue("coolingSetpoint") + 0.5) break default: - heatingSetpointUp() - coolingSetpointUp() + setHeatingSetpoint(device.currentValue("heatingSetpoint") + 0.5) + setCoolingSetpoint(device.currentValue("coolingSetpoint") + 0.5) } } @@ -329,14 +407,14 @@ def levelDown() { def mode = device.currentValue("thermostatMode") switch(mode){ case "heat": - heatingSetpointDown() + setHeatingSetpoint(device.currentValue("heatingSetpoint") - 0.5) break case "cool": - coolingSetpointDown() + setCoolingSetpoint(device.currentValue("coolingSetpoint") - 0.5) break default: - heatingSetpointDown() - coolingSetpointDown() + setHeatingSetpoint(device.currentValue("heatingSetpoint") - 0.5) + setCoolingSetpoint(device.currentValue("coolingSetpoint") - 0.5) } } @@ -404,6 +482,7 @@ def autobtn() { def setThermostatMode(mode) { log.trace "setting thermostat mode $mode" if(device.currentValue("thermostatMode") != mode) { + autoThermostatSetPoint() sendEvent(name: "thermostatMode", value: mode) } } From ac3f60848b815d142eceb37994330bcf89a91f97 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 31 May 2020 16:29:49 -0400 Subject: [PATCH 40/63] moved code from app to device for a cleaner and more performant design + minor updates --- .../virtual-thermostat-with-device.groovy | 98 +++---------------- 1 file changed, 12 insertions(+), 86 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 518defa..251d1b4 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -182,18 +182,14 @@ def handleChange() { ", temp: " + getAverageTemperature() + ", coolingSetPoint: " + thermostat.currentValue("coolingSetpoint") + ", thermostatSetPoint: " + thermostat.currentValue("thermostatSetpoint") + - ", heatingSetPoint: " + thermostat.currentValue("heatingSetpoint") + - ", supportedAttributes: " + thermostat.getSupportedAttributes() + ", heatingSetPoint: " + thermostat.currentValue("heatingSetpoint") - def attrs = thermostat.supportedAttributes + /*def attrs = thermostat.supportedAttributes attrs.each { log.debug "${thermostat.displayName}, attribute: ${it.name}, dataType: ${it.dataType}, value: " + thermostat.currentValue(it.name) - } + }*/ - //update device - thermostat.setVirtualTemperature(getAverageTemperature()) - - switch (thermostat.currentValue('thermostatMode')){ + switch (thermostat.currentValue('thermostatMode')){ case "heat": if(shouldHeatingBeOn(thermostat)) { heat() @@ -227,10 +223,7 @@ def handleChange() { def getThermostat() { - def child = getChildDevices().find { - d -> d.deviceNetworkId.startsWith("pmvt" + state.deviceID) - } - return child + return getChildDevice("pmvt" + state.deviceID) } def uninstalled() { @@ -270,99 +263,32 @@ def updated() } def thermostatSetPointHandler(evt) { - def thermostat = getThermostat() - def temp = thermostat.currentValue("thermostatSetpoint") - def cool = thermostat.currentValue("coolingSetpoint") - def heat = thermostat.currentValue("heatingSetpoint") - def mode = thermostat.currentValue('thermostatMode') - log.debug "thermostatSetPointHandler: " + temp + ", thermostatMode: " + mode - - if(mode == "heat" && heat != temp) { - thermostat.setHeatingSetpoint(temp) - } else if(mode == "cool" && cool != temp) { - thermostat.setCoolingSetpoint(temp) - } - - if(cool < temp) { - thermostat.setCoolingSetpoint(temp) - } else if(heat > temp) { - thermostat.setHeatingSetpoint(temp) - } - log.debug "calling handle change" + log.debug "thermostatSetPointHandler: ${evt.stringValue}" handleChange() } -def autoThermostatSetPoint() { - def temp = thermostat.currentValue("thermostatSetpoint") - def cool = thermostat.currentValue("coolingSetpoint") - def heat = thermostat.currentValue("heatingSetpoint") - def mode = thermostat.currentValue('thermostatMode') - if(mode == "auto") { - def newTemp = (cool + heat) / 2.0 - if(newTemp != temp) { - thermostat.setThermostatSetpoint(newTemp.setScale(1, BigDecimal.ROUND_HALF_EVEN)) - } - } -} - def coolingSetPointHandler(evt) { - def thermostat = getThermostat() - def cool = thermostat.currentValue("coolingSetpoint") - log.debug "coolingSetPointHandler: " + cool + ", heatCoolDelta: " + heatCoolDelta - - if(thermostat.currentValue('thermostatMode') == "cool") { - thermostat.setThermostatSetpoint(cool) - } else if(thermostat.currentValue('thermostatMode') == "auto") { - autoThermostatSetPoint() - } - - def targetHeat = cool - heatCoolDelta - if(thermostat.currentValue("heatingSetpoint") > targetHeat) { - thermostat.setHeatingSetpoint(targetHeat) - } - - if(thermostat.currentValue("thermostatSetpoint") > cool) { - thermostat.setThermostatSetpoint(cool) - } - + log.debug "coolingSetPointHandler: ${evt.stringValue}" handleChange() } def heatingSetPointHandler(evt) { - def thermostat = getThermostat() - def heat = thermostat.currentValue("heatingSetpoint") - log.debug "heatingSetPointHandler: " + heat + ", heatCoolDelta: " + heatCoolDelta - - if(thermostat.currentValue('thermostatMode') == "heat") { - thermostat.setThermostatSetpoint(heat) - } else if(thermostat.currentValue('thermostatMode') == "auto") { - autoThermostatSetPoint() - } - - def targetCool = heat + heatCoolDelta - if(thermostat.currentValue("coolingSetpoint") < targetCool) { - thermostat.setCoolingSetpoint(targetCool) - } - - if(thermostat.currentValue("thermostatSetpoint") < heat) { - thermostat.setThermostatSetpoint(heat) - } - + log.debug "heatingSetPointHandler: ${evt.stringValue}" handleChange() } def temperatureHandler(evt) { - log.debug "temperatureHandler: " + evt + log.debug "temperatureHandler: ${evt.stringValue}" + getThermostat().setVirtualTemperature(getAverageTemperature()) handleChange() } def motionHandler(evt) { - log.debug "motionHandler: " + evt + log.debug "motionHandler: ${evt.stringValue}" handleChange() } def thermostatModeHandler(evt) { - log.debug "thermostatModeHandler: " + evt - autoThermostatSetPoint() + log.debug "thermostatModeHandler: ${evt.stringValue}" handleChange() } From e89830c4e5008ddf5e0142b920b01be964bdd181 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 31 May 2020 18:26:18 -0400 Subject: [PATCH 41/63] allow for heating/cooling to happen at a diff from setpoint to conserve energy and prepare for adding modes --- .../virtual-thermostat-device.groovy | 56 +++++++++++++++++-- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index e252b5f..511fb28 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -31,9 +31,15 @@ metadata { command "coolingSetpointDown" command "setVirtualTemperature", ["number"] command "setHeatCoolDelta", ["number"] + command "setHeatDiff", ["number"] + command "setCoolDiff", ["number"] attribute "temperatureUnit", "string" attribute "heatCoolDelta", "number" + attribute "heatDiff", "number" + attribute "coolDiff", "number" + attribute "adjustedHeatingPoint", "number" + attribute "adjustedCoolingPoint", "number" } simulator { @@ -70,11 +76,11 @@ metadata { attributeState("off", label:'Off') } - tileAttribute("device.heatingSetpoint", key: "HEATING_SETPOINT") { + tileAttribute("device.adjustedHeatingPoint", key: "HEATING_SETPOINT") { attributeState("default", label:'${currentValue}') } - tileAttribute("device.coolingSetpoint", key: "COOLING_SETPOINT") { + tileAttribute("device.adjustedCoolingPoint", key: "COOLING_SETPOINT") { attributeState("default", label:'${currentValue}') } } @@ -267,6 +273,11 @@ def sendCoolingSetpoint(temp) { if(temp != csp) { log.debug "sendCoolingSetpoint from " + csp + " to " + temp sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) + if(device.currentValue("thermostatOperatingState") == "cooling") { + setAdjustedCoolingPoint(temp) + } else { + setAdjustedCoolingPoint(temp + device.currentValue("coolDiff")) + } } } @@ -275,6 +286,11 @@ def sendHeatingSetpoint(temp) { if(temp != hsp) { log.debug "sendHeatingSetpoint from " + hsp + " to " + temp sendEvent(name:"heatingSetpoint", value: temp, unit: unitString()) + if(device.currentValue("thermostatOperatingState") == "heating") { + setAdjustedHeatingPoint(temp) + } else { + setAdjustedHeatingPoint(temp - device.currentValue("heatDiff")) + } } } @@ -495,8 +511,38 @@ def setHeatCoolDelta(delta) { sendEvent(name:"heatCoolDelta", value: delta, unit: unitString(), displayed: true) } -def setThermostatOperatingState(string) { - if(device.currentValue("thermostatOperatingState") != string) { - sendEvent(name:"thermostatOperatingState", value: string) +def setHeatDiff(diff) { + sendEvent(name:"heatDiff", value: diff, unit: unitString(), displayed: true) +} + +def setCoolDiff(diff) { + sendEvent(name:"coolDiff", value: diff, unit: unitString(), displayed: true) +} + +def setAdjustedHeatingPoint(point) { + if(device.currentValue("adjustedHeatingPoint") != point) { + sendEvent(name:"adjustedHeatingPoint", value: point, unit: unitString(), displayed: true) + } +} + +def setAdjustedCoolingPoint(point) { + if(device.currentValue("adjustedCoolingPoint") != point) { + sendEvent(name:"adjustedCoolingPoint", value: point, unit: unitString(), displayed: true) + } +} + +def setThermostatOperatingState(operatingState) { + if(device.currentValue("thermostatOperatingState") != operatingState) { + sendEvent(name:"thermostatOperatingState", value: operatingState) + if(operatingState == "heating") { + setAdjustedHeatingPoint(device.currentValue("heatingSetpoint")) + } else { + setAdjustedHeatingPoint(device.currentValue("heatingSetpoint") - device.currentValue("heatDiff")) + } + if(operatingState == "cooling") { + setAdjustedCoolingPoint(device.currentValue("coolingSetpoint")) + } else { + setAdjustedCoolingPoint(device.currentValue("coolingSetpoint") + device.currentValue("coolDiff")) + } } } From 21583264dcb41a75efe59c0e8b48f3bd1d9c15e7 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 31 May 2020 18:26:55 -0400 Subject: [PATCH 42/63] allow for heating/cooling to happen at a diff from setpoint to conserve energy and prepare for adding modes --- .../virtual-thermostat-with-device.groovy | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 251d1b4..d61a9ca 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -31,6 +31,12 @@ preferences { section("The minimum difference between the heating and cooling setpoint, it's recommended to not put this too low to conserve energy") { input "heatCoolDelta", "decimal", title: "Heat / Cool Delta", required: false, defaultValue: 3.0 } + section("The amount that the temperature is allowed to dip below the heating setpoint before engaging heating, it's recommended to not put this too low to avoid heaters turning on and off too frequently") { + input "heatDiff", "decimal", title: "Heat Differential", required: false, defaultValue: 0.3 + } + section("The amount that the temperature is allowed to go above the cooling setpoint before engaging cooling, it's recommended to not put this too low to avoid coolers turning on and off too frequently") { + input "coolDiff", "decimal", title: "Cool Differential", required: false, defaultValue: 0.3 + } } def installed() @@ -65,8 +71,10 @@ def motionDetected(){ def shouldHeatingBeOn(thermostat) { + def temp = getAverageTemperature() + //if temperature is below emergency setpoint - if(emergencyHeatingSetpoint && emergencyHeatingSetpoint > getAverageTemperature()) { + if(emergencyHeatingSetpoint && emergencyHeatingSetpoint > temp) { return true; } @@ -81,16 +89,18 @@ def shouldHeatingBeOn(thermostat) { } //average temperature across all temperature sensors is above set point - if (thermostat.currentValue("heatingSetpoint") < getAverageTemperature()) { - return false; + if(temp > thermostat.currentValue("adjustedHeatingPoint")) { + return false; } - + return true; } def shouldCoolingBeOn(thermostat) { + def temp = getAverageTemperature() + //if temperature is above emergency setpoint - if(emergencyCoolingSetpoint && emergencyCoolingSetpoint < getAverageTemperature()) { + if(emergencyCoolingSetpoint && emergencyCoolingSetpoint < temp) { return true; } @@ -105,10 +115,10 @@ def shouldCoolingBeOn(thermostat) { } //average temperature across all temperature sensors is below set point - if (thermostat.currentValue("coolingSetpoint") > getAverageTemperature()) { - return false; + if(temp < thermostat.currentValue("adjustedCoolingPoint")) { + return false; } - + return true; } @@ -221,7 +231,6 @@ def handleChange() { } } - def getThermostat() { return getChildDevice("pmvt" + state.deviceID) } @@ -260,6 +269,8 @@ def updated() thermostat.clearSensorData() thermostat.setVirtualTemperature(getAverageTemperature()) thermostat.setHeatCoolDelta(heatCoolDelta) + thermostat.setHeatDiff(heatDiff) + thermostat.setCoolDiff(coolDiff) } def thermostatSetPointHandler(evt) { From 197d1775a81b782d1ba6927d55260383ac2ceb51 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 31 May 2020 19:28:57 -0400 Subject: [PATCH 43/63] ensure proper initialization of new device --- .../virtual-thermostat-with-device.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index d61a9ca..a170c42 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -43,6 +43,7 @@ def installed() { log.debug "running installed" state.deviceID = Math.abs(new Random().nextInt() % 9999) + 1 + updated() } def createDevice() { From b889b4a50b7eee8679d0766462a204dd16b7f83a Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 31 May 2020 19:29:31 -0400 Subject: [PATCH 44/63] ensure proper initialization of new devices --- .../virtual-thermostat-device.groovy | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 511fb28..3b8375d 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -211,12 +211,15 @@ def configure() { private initialize() { log.trace "Executing 'initialize'" - setCoolingSetpoint(defaultTemp()+2.0) - setHeatingSetpoint(defaultTemp()-2.0) - setThermostatSetpoint(defaultTemp()) - setVirtualTemperature(defaultTemp()) + setHeatCoolDelta(0) + setHeatDiff(0) + setCoolDiff(0) + sendCoolingSetpoint(defaultTemp()+2.0) + sendHeatingSetpoint(defaultTemp()-2.0) + sendThermostatSetpoint(defaultTemp()) setThermostatOperatingState("off") setThermostatMode("off") + setVirtualTemperature(defaultTemp()) sendEvent(name:"supportedThermostatModes", value: thermostatModes(), displayed: false) state.tempScale = "C" From 753051c41d361894b476782f090f9f0e22a4dd11 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sat, 6 Jun 2020 19:46:35 -0400 Subject: [PATCH 45/63] Double check to ensure not turning off/on twice --- .../virtual-thermostat-with-device.groovy | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index a170c42..a6596ab 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -138,12 +138,28 @@ def getAverageTemperature() { return total / count } +def switchOff(switches) { + for(s in switches) { + if(s.currentValue("switch") != 'off'){ + s.off() + } + } +} + +def switchOn(switches) { + for(s in switches) { + if(s.currentValue("switch") != 'on'){ + s.on() + } + } +} + def cool() { + log.debug "cooling outlets on, current value: " + cooling_outlets.currentValue("switch") if(thermostat.currentValue("thermostatOperatingState") != 'cooling') { - log.debug "cooling outlets on" - cooling_outlets.on() + switchOn(cooling_outlets) if(thermostat.currentValue("thermostatOperatingState") == 'heating') { - heating_outlets.off() + switchOff(heating_outlets) } thermostat.setThermostatOperatingState('cooling') } @@ -152,9 +168,9 @@ def cool() { def heat() { if(thermostat.currentValue("thermostatOperatingState") != 'heating') { log.debug "heating outlets on" - heating_outlets.on() + switchOn(heating_outlets) if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { - cooling_outlets.off() + switchOff(cooling_outlets) } thermostat.setThermostatOperatingState('heating') } @@ -164,10 +180,10 @@ def off() { if(thermostat.currentValue("thermostatOperatingState") != 'off') { log.debug "off: all outlets off" if(thermostat.currentValue("thermostatOperatingState") == 'heating') { - heating_outlets.off() + switchOff(heating_outlets) } if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { - cooling_outlets.off() + switchOff(cooling_outlets) } thermostat.setThermostatOperatingState('off') } @@ -177,10 +193,10 @@ def idle() { if(thermostat.currentValue("thermostatOperatingState") != 'idle') { log.debug "idle: all outlets off" if(thermostat.currentValue("thermostatOperatingState") == 'heating') { - heating_outlets.off() + switchOff(heating_outlets) } if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { - cooling_outlets.off() + switchOff(cooling_outlets) } thermostat.setThermostatOperatingState('idle') } @@ -229,6 +245,7 @@ def handleChange() { off() break } + getThermostat().setVirtualTemperature(getAverageTemperature()) } } @@ -291,7 +308,7 @@ def heatingSetPointHandler(evt) { def temperatureHandler(evt) { log.debug "temperatureHandler: ${evt.stringValue}" - getThermostat().setVirtualTemperature(getAverageTemperature()) +// getThermostat().setVirtualTemperature(getAverageTemperature()) handleChange() } From ff94cfd57b3314091767f352f2bfc2621992f506 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sat, 6 Jun 2020 19:46:38 -0400 Subject: [PATCH 46/63] Double check to ensure not turning off/on twice From 6666c0c9e95c18021a4577b072529159cb5d1405 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 7 Jun 2020 19:07:19 -0400 Subject: [PATCH 47/63] first try with smart cooldown/heatup --- .../virtual-thermostat-device.groovy | 146 +++++++++++++++--- 1 file changed, 126 insertions(+), 20 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 3b8375d..8dfdee8 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -25,6 +25,8 @@ metadata { command "autobtn" command "levelUp" command "levelDown" + command "smartCoolDown" + command "smartHeatUp" command "heatingSetpointUp" command "heatingSetpointDown" command "coolingSetpointUp" @@ -85,7 +87,7 @@ metadata { } } - valueTile("temp2", "device.temperature", width: 2, height: 2, decoration: "flat") { + valueTile("tempmain", "device.temperature", width: 2, height: 2, decoration: "flat") { state("default", label:'${currentValue}°', icon:"https://raw.githubusercontent.com/eliotstocker/SmartThings-VirtualThermostat-WithDTH/master/device.png", backgroundColors: getTempColors(), canChangeIcon: true) } @@ -165,8 +167,16 @@ metadata { state "default", action:"setCoolingSetpoint", backgroundColor:"#0022ff" state "", label: '' } + + standardTile("smartCool", "device.thermostatMode", width:3, height:2, decoration: "flat") { + state "default", label:'Smart Cool Down', action:"smartCoolDown", icon:"https://raw.githubusercontent.com/racarmichael/SmartThings-VirtualThermostat-WithDTH/master/images/cool_arrow_down.png" + } - main("temp2") + standardTile("smartHeat", "device.thermostatMode", width:3, height:2, decoration: "flat") { + state "default", label:'Smart Heat Up', action:"smartHeatUp", icon:"https://raw.githubusercontent.com/tonesto7/nest-manager/master/Images/Devices/heat_arrow_up.png" + } + + main("tempmain") details( ["temperature", "coolingSetpointUp", "heatingSetpointUp", @@ -175,7 +185,8 @@ metadata { "heatingSetpoint", //"heatSliderControl", "coolingSetpointDown", "heatingSetpointDown", - "thermostatMode", + //"thermostatMode", + "smartCool", "smartHeat", "coolBtn","heatBtn", "autoBtn", //"coolSliderControl" @@ -407,34 +418,27 @@ def coolingSetpointDown() { setCoolingSetpoint(device.currentValue("coolingSetpoint") - 0.1) } -def levelUp() { +def levelChange(diff) { def mode = device.currentValue("thermostatMode") switch (mode) { case "heat": - setHeatingSetpoint(device.currentValue("heatingSetpoint") + 0.5) + setHeatingSetpoint(device.currentValue("heatingSetpoint") + diff) break case "cool": - setCoolingSetpoint(device.currentValue("coolingSetpoint") + 0.5) + setCoolingSetpoint(device.currentValue("coolingSetpoint") + diff) break default: - setHeatingSetpoint(device.currentValue("heatingSetpoint") + 0.5) - setCoolingSetpoint(device.currentValue("coolingSetpoint") + 0.5) + setHeatingSetpoint(device.currentValue("heatingSetpoint") + diff) + setCoolingSetpoint(device.currentValue("coolingSetpoint") + diff) } } +def levelUp() { + levelChange(0.5) +} + def levelDown() { - def mode = device.currentValue("thermostatMode") - switch(mode){ - case "heat": - setHeatingSetpoint(device.currentValue("heatingSetpoint") - 0.5) - break - case "cool": - setCoolingSetpoint(device.currentValue("coolingSetpoint") - 0.5) - break - default: - setHeatingSetpoint(device.currentValue("heatingSetpoint") - 0.5) - setCoolingSetpoint(device.currentValue("coolingSetpoint") - 0.5) - } + levelChange(-0.5) } def parse(data) { @@ -466,6 +470,14 @@ def getCoolingSetpoint() { return device.currentValue("coolingSetpoint") } +def getHeatDiff() { + return device.currentValue("heatDiff") +} + +def getCoolDiff() { + return device.currentValue("coolDiff") +} + def poll() { } @@ -549,3 +561,97 @@ def setThermostatOperatingState(operatingState) { } } } + + + +def smartCoolDown(){ + log.debug "smartCoolDown => thermostatMode: ${getThermostatMode()}, operatingState: ${getOperatingState()}" + def diff = getCoolDiff().max(0.3) // if diff is too small, this is not doing much + + if(getThermostatMode() == "heat" || getOperatingState() == "heating") { + log.debug "todo, smartCoolDown not implemented for HEAT" + //todo need to move setpoint, we don't actually want to switch to cooling in this case + return; + } + + if(getOperatingState() == "heating") { + def setPointToStopHeating = getTemperature() - 0.1; + def targetFromSetPoint = getHeatingSetpoint() - (diff*2) + def target = setPointToStopCooling.min(targetFromSetPoint) + def targetDiff = target - getHeatingSetpoint(); + log.debug "smartCoolDown while heating => temp: ${getTemperature()}, heatSetPoint: ${getHeatingSetpoint()}, diff: ${diff}, targetFromSetPoint: ${targetFromSetPoint}, setPointToStopHeating: ${setPointToStopHeating}, target: ${target}, targetDiff: ${targetDiff}" + levelChange(targetDiff) + return; + } + + if(getThermostatMode() == "heat") { + log.debug "smartCoolDown while in heat mode, but not actually heating, simple move the setpoint down" + levelChange(-diff) + return + } + + // Change the thermostat mode, so it's either cool or auto + if(getThermostatMode() == "off") { + if(state.lastMode && state.lastMode != "heat") { + setThermostatMode(state.lastMode) + } else { + setThermostatMode("cool") + } + } + + if(getOperatingState() == "cooling" || getTemperature() > getCoolingSetpoint()){ + log.debug "smartCoolDown already in a state where it should be cooling, lower the setpoint by ${diff}" + levelChange(-diff) + return + } + + def setPointToStartCooling = getTemperature() - diff - 0.1; + def targetFromSetPoint = getCoolingSetpoint() - (diff*2) + def target = targetFromSetPoint.min(setPointToStartCooling) + def targetDiff = target - getCoolingSetpoint() + log.debug "smartCoolDown => temp: ${getTemperature()}, coolSetPoint: ${getCoolingSetpoint()}, diff: ${diff}, targetFromSetPoint: ${targetFromSetPoint}, setPointToStartCooling: ${setPointToStartCooling}, target: ${target}, targetDiff: ${targetDiff}" + levelChange(targetDiff) +} + +def smartHeatUp(){ + log.debug "smartHeatUp => thermostatMode: ${getThermostatMode()}, operatingState: ${getOperatingState()}" + def diff = getHeatDiff().max(0.3) // if diff is too small, this is not doing much + + if(getOperatingState() == "cooling") { + def setPointToStopCooling = getTemperature() + 0.1; + def targetFromSetPoint = getCoolingSetpoint() + (diff*2) + def target = setPointToStopCooling.max(targetFromSetPoint) + def targetDiff = target - getCoolingSetpoint(); + log.debug "smartHeatUp while cooling => temp: ${getTemperature()}, coolSetPoint: ${getCoolingSetpoint()}, diff: ${diff}, targetFromSetPoint: ${targetFromSetPoint}, setPointToStopCooling: ${setPointToStopCooling}, target: ${target}, targetDiff: ${targetDiff}" + levelChange(targetDiff) + return; + } + + if(getThermostatMode() == "cool") { + log.debug "smartHeatUp while in cool mode, but not actually cooling, simple move the setpoint up" + levelChange(diff) + return + } + + // Change the thermostat mode, so it's either heat or auto + if(getThermostatMode() == "off") { + if(state.lastMode && state.lastMode != "cool") { + setThermostatMode(state.lastMode) + } else { + setThermostatMode("heat") + } + } + + if(getOperatingState() == "heating" || getTemperature() < getHeatingSetpoint()){ + log.debug "smartHeatUp already in a state where it should be heating, increase the setpoint by ${diff}" + levelChange(diff) + return + } + + def setPointToStartHeating = getTemperature() + diff + 0.1; + def targetFromSetPoint = getHeatingSetpoint() + (diff*2) + def target = targetFromSetPoint.max(setPointToStartCooling) + def targetDiff = target - getHeatingSetpoint(); + log.debug "smartHeatUp => temp: ${getTemperature()}, heatSetPoint: ${getHeatingSetpoint()}, diff: ${diff}, targetFromSetPoint: ${targetFromSetPoint}, setPointToStartHeating: ${setPointToStartHeating}, target: ${target}, targetDiff: ${targetDiff}" + levelChange(targetDiff) +} \ No newline at end of file From 5f5d1d2bc3c449d4de1aaf78fa620950a3ab5284 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 7 Jun 2020 22:20:20 -0400 Subject: [PATCH 48/63] more debug for turning on/off outlets --- .../virtual-thermostat-with-device.groovy | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index a6596ab..0f8b501 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -139,64 +139,68 @@ def getAverageTemperature() { } def switchOff(switches) { + log.debug "switching off: ${switches}, current values: " + switches.currentValue("switch") for(s in switches) { if(s.currentValue("switch") != 'off'){ s.off() } } + log.debug "done switching off: ${switches}, current values: " + switches.currentValue("switch") } def switchOn(switches) { + log.debug "switching on: ${switches}, current values: " + switches.currentValue("switch") for(s in switches) { if(s.currentValue("switch") != 'on'){ s.on() } } + log.debug "done switching on: ${switches}, current values: " + switches.currentValue("switch") } def cool() { log.debug "cooling outlets on, current value: " + cooling_outlets.currentValue("switch") if(thermostat.currentValue("thermostatOperatingState") != 'cooling') { - switchOn(cooling_outlets) if(thermostat.currentValue("thermostatOperatingState") == 'heating') { - switchOff(heating_outlets) + switchOff(heating_outlets) } + switchOn(cooling_outlets) thermostat.setThermostatOperatingState('cooling') } } def heat() { + log.debug "heating outlets on, current value: " + heating_outlets.currentValue("switch") if(thermostat.currentValue("thermostatOperatingState") != 'heating') { - log.debug "heating outlets on" - switchOn(heating_outlets) if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { - switchOff(cooling_outlets) + switchOff(cooling_outlets) } + switchOn(heating_outlets) thermostat.setThermostatOperatingState('heating') } } def off() { + log.debug "off, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") if(thermostat.currentValue("thermostatOperatingState") != 'off') { - log.debug "off: all outlets off" if(thermostat.currentValue("thermostatOperatingState") == 'heating') { - switchOff(heating_outlets) + switchOff(heating_outlets) } if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { - switchOff(cooling_outlets) + switchOff(cooling_outlets) } thermostat.setThermostatOperatingState('off') } } def idle() { + log.debug "idle, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") if(thermostat.currentValue("thermostatOperatingState") != 'idle') { - log.debug "idle: all outlets off" if(thermostat.currentValue("thermostatOperatingState") == 'heating') { - switchOff(heating_outlets) + switchOff(heating_outlets) } if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { - switchOff(cooling_outlets) + switchOff(cooling_outlets) } thermostat.setThermostatOperatingState('idle') } From 9c3449a1a98dee73b4363cc6882c76072fa649d6 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Fri, 19 Jun 2020 15:55:49 -0400 Subject: [PATCH 49/63] remove dependency on thermostat setpoint and don't trust that the switches say that they are on or off --- .../virtual-thermostat-with-device.groovy | 55 ++++++++++--------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 0f8b501..624507b 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -141,9 +141,9 @@ def getAverageTemperature() { def switchOff(switches) { log.debug "switching off: ${switches}, current values: " + switches.currentValue("switch") for(s in switches) { - if(s.currentValue("switch") != 'off'){ + //if(s.currentValue("switch") != 'off'){ s.off() - } + //} } log.debug "done switching off: ${switches}, current values: " + switches.currentValue("switch") } @@ -151,58 +151,60 @@ def switchOff(switches) { def switchOn(switches) { log.debug "switching on: ${switches}, current values: " + switches.currentValue("switch") for(s in switches) { - if(s.currentValue("switch") != 'on'){ + //if(s.currentValue("switch") != 'on'){ s.on() - } + //} } log.debug "done switching on: ${switches}, current values: " + switches.currentValue("switch") } def cool() { log.debug "cooling outlets on, current value: " + cooling_outlets.currentValue("switch") - if(thermostat.currentValue("thermostatOperatingState") != 'cooling') { - if(thermostat.currentValue("thermostatOperatingState") == 'heating') { + def state = thermostat.getOperatingState() + if(state != 'cooling') { + thermostat.setThermostatOperatingState('cooling') + switchOn(cooling_outlets) + if(state == 'heating') { switchOff(heating_outlets) } - switchOn(cooling_outlets) - thermostat.setThermostatOperatingState('cooling') } } def heat() { log.debug "heating outlets on, current value: " + heating_outlets.currentValue("switch") - if(thermostat.currentValue("thermostatOperatingState") != 'heating') { - if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { + def state = thermostat.getOperatingState() + if(state != 'heating') { + thermostat.setThermostatOperatingState('heating') + switchOn(heating_outlets) + if(state == 'cooling') { switchOff(cooling_outlets) } - switchOn(heating_outlets) - thermostat.setThermostatOperatingState('heating') } } def off() { log.debug "off, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") - if(thermostat.currentValue("thermostatOperatingState") != 'off') { - if(thermostat.currentValue("thermostatOperatingState") == 'heating') { + def state = thermostat.getOperatingState() + if(state != 'off') { + thermostat.setThermostatOperatingState('off') + if(state == 'heating') { switchOff(heating_outlets) - } - if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { + } else if(state == 'cooling') { switchOff(cooling_outlets) } - thermostat.setThermostatOperatingState('off') } } def idle() { log.debug "idle, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") - if(thermostat.currentValue("thermostatOperatingState") != 'idle') { - if(thermostat.currentValue("thermostatOperatingState") == 'heating') { + def state = thermostat.getOperatingState() + if(state != 'idle') { + thermostat.setThermostatOperatingState('idle') + if(state == 'heating') { switchOff(heating_outlets) - } - if(thermostat.currentValue("thermostatOperatingState") == 'cooling') { + } else if(state == 'cooling') { switchOff(cooling_outlets) } - thermostat.setThermostatOperatingState('idle') } } @@ -210,9 +212,10 @@ def handleChange() { def thermostat = getThermostat() if(thermostat) { log.debug "handle change, mode: " + thermostat.currentValue('thermostatMode') + + ", operatingState: " + thermostat.currentValue("thermostatOperatingState") + ", temp: " + getAverageTemperature() + ", coolingSetPoint: " + thermostat.currentValue("coolingSetpoint") + - ", thermostatSetPoint: " + thermostat.currentValue("thermostatSetpoint") + + //", thermostatSetPoint: " + thermostat.currentValue("thermostatSetpoint") + ", heatingSetPoint: " + thermostat.currentValue("heatingSetpoint") /*def attrs = thermostat.supportedAttributes @@ -282,7 +285,7 @@ def updated() } //subscribe to virtual device changes - subscribe(thermostat, "thermostatSetpoint", thermostatSetPointHandler) + //subscribe(thermostat, "thermostatSetpoint", thermostatSetPointHandler) subscribe(thermostat, "heatingSetpoint", heatingSetPointHandler) subscribe(thermostat, "coolingSetpoint", coolingSetPointHandler) subscribe(thermostat, "thermostatMode", thermostatModeHandler) @@ -295,10 +298,12 @@ def updated() thermostat.setCoolDiff(coolDiff) } +/* def thermostatSetPointHandler(evt) { log.debug "thermostatSetPointHandler: ${evt.stringValue}" - handleChange() + //handleChange() } +*/ def coolingSetPointHandler(evt) { log.debug "coolingSetPointHandler: ${evt.stringValue}" From 39d5bdcdcc933543e7f22120489b85dc80da4ddc Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Fri, 19 Jun 2020 15:56:58 -0400 Subject: [PATCH 50/63] remove handling of thermostat set point --- .../virtual-thermostat-device.groovy | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 8dfdee8..b38e589 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -11,7 +11,7 @@ metadata { capability "Thermostat Mode" capability "Thermostat Heating Setpoint" capability "Thermostat Cooling Setpoint" - capability "Thermostat Setpoint" +// capability "Thermostat Setpoint" capability "Thermostat Operating State" capability "Configuration" capability "Refresh" @@ -54,7 +54,7 @@ metadata { attributeState("default", label:'${currentValue}°', unit: unitString()) } - tileAttribute("device.thermostatSetpoint", key: "VALUE_CONTROL") { + tileAttribute("device.thermostatOperatingState", key: "VALUE_CONTROL") { attributeState("VALUE_UP", label: '', action: "levelUp") attributeState("VALUE_DOWN", label: '', action: "levelDown") } @@ -227,7 +227,7 @@ private initialize() { setCoolDiff(0) sendCoolingSetpoint(defaultTemp()+2.0) sendHeatingSetpoint(defaultTemp()-2.0) - sendThermostatSetpoint(defaultTemp()) + //sendThermostatSetpoint(defaultTemp()) setThermostatOperatingState("off") setThermostatMode("off") setVirtualTemperature(defaultTemp()) @@ -274,6 +274,7 @@ def getTemperature() { return device.currentValue("temperature") } +/* def sendThermostatSetpoint(temp) { def tsp = device.currentValue("thermostatSetpoint") if(temp != tsp) { @@ -281,6 +282,7 @@ def sendThermostatSetpoint(temp) { sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString()) } } +*/ def sendCoolingSetpoint(temp) { def csp = device.currentValue("coolingSetpoint") @@ -308,6 +310,7 @@ def sendHeatingSetpoint(temp) { } } +/* def setThermostatSetpoint(temp) { def tsp = device.currentValue("thermostatSetpoint") log.debug "setThermostatSetpoint from " + tsp + " to " + temp @@ -343,6 +346,7 @@ def autoThermostatSetPoint() { } } } +*/ def inRange(val, low, high) { if(val < low) @@ -358,20 +362,22 @@ def setHeatingSetpoint(temp) { temp = inRange(temp, lowRange(), highRange()) if(hsp != temp) { - if(device.currentValue('thermostatMode') == "heat") { + /*if(device.currentValue('thermostatMode') == "heat") { sendThermostatSetpoint(temp) } else if(device.currentValue('thermostatMode') == "auto") { autoThermostatSetPoint() - } + }*/ def targetCool = temp + device.currentValue('heatCoolDelta') if(device.currentValue("coolingSetpoint") < targetCool) { sendCoolingSetpoint(targetCool) } + /* if(device.currentValue("thermostatSetpoint") < temp) { sendThermostatSetpoint(temp) } + */ sendHeatingSetpoint(temp) } @@ -383,20 +389,24 @@ def setCoolingSetpoint(temp) { temp = inRange(temp, lowRange(), highRange()) if(csp != temp) { + /* if(device.currentValue('thermostatMode') == "cool") { sendThermostatSetpoint(temp) } else if(device.currentValue('thermostatMode') == "auto") { autoThermostatSetPoint() } + */ def targetHeat = temp - device.currentValue('heatCoolDelta') if(device.currentValue("heatingSetpoint") > targetHeat) { sendHeatingSetpoint(targetHeat) } + /* if(device.currentValue("thermostatSetpoint") > temp) { sendThermostatSetpoint(temp) } + */ sendCoolingSetpoint(temp) } @@ -458,9 +468,11 @@ def getOperatingState() { return device.currentValue("thermostatOperatingState") } +/* def getThermostatSetpoint() { return device.currentValue("thermostatSetpoint") } +*/ def getHeatingSetpoint() { return device.currentValue("heatingSetpoint") @@ -497,12 +509,12 @@ def offbtn() { def coolbtn() { setThermostatMode("cool") - setThermostatSetpoint(device.currentValue("coolingSetpoint")) + //setThermostatSetpoint(device.currentValue("coolingSetpoint")) } def heatbtn() { setThermostatMode("heat") - setThermostatSetpoint(device.currentValue("heatingSetpoint")) + //setThermostatSetpoint(device.currentValue("heatingSetpoint")) } def autobtn() { @@ -513,7 +525,7 @@ def autobtn() { def setThermostatMode(mode) { log.trace "setting thermostat mode $mode" if(device.currentValue("thermostatMode") != mode) { - autoThermostatSetPoint() + //autoThermostatSetPoint() sendEvent(name: "thermostatMode", value: mode) } } From de6f445716b60780c33ce7c7890dbf279d9cb797 Mon Sep 17 00:00:00 2001 From: steffennissen Date: Fri, 19 Jun 2020 17:10:02 -0400 Subject: [PATCH 51/63] cleanup + added a new experimental feature to fix unreliable switches like the SwitchBot --- .../virtual-thermostat-device.groovy | 99 ++------------ .../virtual-thermostat-with-device.groovy | 125 ++++++++++++------ 2 files changed, 93 insertions(+), 131 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index b38e589..040a254 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -11,7 +11,6 @@ metadata { capability "Thermostat Mode" capability "Thermostat Heating Setpoint" capability "Thermostat Cooling Setpoint" -// capability "Thermostat Setpoint" capability "Thermostat Operating State" capability "Configuration" capability "Refresh" @@ -227,7 +226,6 @@ private initialize() { setCoolDiff(0) sendCoolingSetpoint(defaultTemp()+2.0) sendHeatingSetpoint(defaultTemp()-2.0) - //sendThermostatSetpoint(defaultTemp()) setThermostatOperatingState("off") setThermostatMode("off") setVirtualTemperature(defaultTemp()) @@ -237,10 +235,8 @@ private initialize() { } def getTempColors() { - def colorMap - //getTemperatureScale() == "C" wantMetric() if(shouldReportInCentigrade()) { - colorMap = [ + return [ // Celsius Color Range [value: 0, color: "#153591"], [value: 7, color: "#1e9cbb"], @@ -251,7 +247,7 @@ def getTempColors() { [value: 36, color: "#bc2323"] ] } else { - colorMap = [ + return [ // Fahrenheit Color Range [value: 40, color: "#153591"], [value: 44, color: "#1e9cbb"], @@ -274,16 +270,6 @@ def getTemperature() { return device.currentValue("temperature") } -/* -def sendThermostatSetpoint(temp) { - def tsp = device.currentValue("thermostatSetpoint") - if(temp != tsp) { - log.debug "sendThermostatSetpoint from " + tsp + " to " + temp - sendEvent(name:"thermostatSetpoint", value: temp, unit: unitString()) - } -} -*/ - def sendCoolingSetpoint(temp) { def csp = device.currentValue("coolingSetpoint") if(temp != csp) { @@ -310,44 +296,6 @@ def sendHeatingSetpoint(temp) { } } -/* -def setThermostatSetpoint(temp) { - def tsp = device.currentValue("thermostatSetpoint") - log.debug "setThermostatSetpoint from " + tsp + " to " + temp - if(tsp != temp) { - def csp = device.currentValue("coolingSetpoint") - def hsp = device.currentValue("heatingSetpoint") - def mode = device.currentValue('thermostatMode') - - if(mode == "heat" && hsp != temp) { - sendHeatingSetpoint(temp) - } else if(mode == "cool" && csp != temp) { - sendCoolingSetpoint(temp) - } - - if(csp < temp) { - sendCoolingSetpoint(temp) - } else if(heat > temp) { - setHeatingSetpoint(temp) - } - sendThermostatSetpoint(temp) - } -} - -def autoThermostatSetPoint() { - if(device.currentValue('thermostatMode') == "auto") { - def temp = device.currentValue("thermostatSetpoint") - def cool = device.currentValue("coolingSetpoint") - def heat = device.currentValue("heatingSetpoint") - - def newTemp = (cool + heat) / 2.0 - if(newTemp != temp) { - sendThermostatSetpoint(newTemp.setScale(1, BigDecimal.ROUND_HALF_EVEN)) - } - } -} -*/ - def inRange(val, low, high) { if(val < low) return low @@ -362,23 +310,11 @@ def setHeatingSetpoint(temp) { temp = inRange(temp, lowRange(), highRange()) if(hsp != temp) { - /*if(device.currentValue('thermostatMode') == "heat") { - sendThermostatSetpoint(temp) - } else if(device.currentValue('thermostatMode') == "auto") { - autoThermostatSetPoint() - }*/ - def targetCool = temp + device.currentValue('heatCoolDelta') if(device.currentValue("coolingSetpoint") < targetCool) { sendCoolingSetpoint(targetCool) } - /* - if(device.currentValue("thermostatSetpoint") < temp) { - sendThermostatSetpoint(temp) - } - */ - sendHeatingSetpoint(temp) } } @@ -389,25 +325,11 @@ def setCoolingSetpoint(temp) { temp = inRange(temp, lowRange(), highRange()) if(csp != temp) { - /* - if(device.currentValue('thermostatMode') == "cool") { - sendThermostatSetpoint(temp) - } else if(device.currentValue('thermostatMode') == "auto") { - autoThermostatSetPoint() - } - */ - def targetHeat = temp - device.currentValue('heatCoolDelta') if(device.currentValue("heatingSetpoint") > targetHeat) { sendHeatingSetpoint(targetHeat) } - /* - if(device.currentValue("thermostatSetpoint") > temp) { - sendThermostatSetpoint(temp) - } - */ - sendCoolingSetpoint(temp) } } @@ -509,12 +431,10 @@ def offbtn() { def coolbtn() { setThermostatMode("cool") - //setThermostatSetpoint(device.currentValue("coolingSetpoint")) } def heatbtn() { setThermostatMode("heat") - //setThermostatSetpoint(device.currentValue("heatingSetpoint")) } def autobtn() { @@ -525,7 +445,6 @@ def autobtn() { def setThermostatMode(mode) { log.trace "setting thermostat mode $mode" if(device.currentValue("thermostatMode") != mode) { - //autoThermostatSetPoint() sendEvent(name: "thermostatMode", value: mode) } } @@ -574,18 +493,16 @@ def setThermostatOperatingState(operatingState) { } } - - +//The idea behind the smart cool and heat is to change the setpoint, so that if it's not cooling/heating now it will start so immediately +// and likewise if it's already cooling/heating it will stop. The idea is to change the setpoint enough for this change to happen right now +// and that it will stay that way at least for a little while. Without moving the setpoint too much. +// Good example of use is of the thermostat is set to cool and it starts cooling, but you don't think it hot enough that it should start right now, +// so you would click smartHeatUp. Alternatively if your thermostat is set to cool, but it's not cooling right now and you would want it to, you would +// press smartCoolDown def smartCoolDown(){ log.debug "smartCoolDown => thermostatMode: ${getThermostatMode()}, operatingState: ${getOperatingState()}" def diff = getCoolDiff().max(0.3) // if diff is too small, this is not doing much - if(getThermostatMode() == "heat" || getOperatingState() == "heating") { - log.debug "todo, smartCoolDown not implemented for HEAT" - //todo need to move setpoint, we don't actually want to switch to cooling in this case - return; - } - if(getOperatingState() == "heating") { def setPointToStopHeating = getTemperature() - 0.1; def targetFromSetPoint = getHeatingSetpoint() - (diff*2) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 624507b..014185b 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -29,14 +29,18 @@ preferences { input "emergencyCoolingSetpoint", "decimal", title: "Emergency Max Temp", required: false } section("The minimum difference between the heating and cooling setpoint, it's recommended to not put this too low to conserve energy") { - input "heatCoolDelta", "decimal", title: "Heat / Cool Delta", required: false, defaultValue: 3.0 + input "heatCoolDelta", "decimal", title: "Heat / Cool Delta", defaultValue: 3.0 } section("The amount that the temperature is allowed to dip below the heating setpoint before engaging heating, it's recommended to not put this too low to avoid heaters turning on and off too frequently") { - input "heatDiff", "decimal", title: "Heat Differential", required: false, defaultValue: 0.3 + input "heatDiff", "decimal", title: "Heat Differential", defaultValue: 0.3 } section("The amount that the temperature is allowed to go above the cooling setpoint before engaging cooling, it's recommended to not put this too low to avoid coolers turning on and off too frequently") { - input "coolDiff", "decimal", title: "Cool Differential", required: false, defaultValue: 0.3 + input "coolDiff", "decimal", title: "Cool Differential", defaultValue: 0.3 } + + section("Fix for unreliable switches to automatically turn them on/off again, if it seems like turning them on/off did not work based on the temperature (Experimental)") { + input "unreliableSwitchFix", "bool", title: "Unreliable switch fix", defaultValue: false + } } def installed() @@ -141,9 +145,7 @@ def getAverageTemperature() { def switchOff(switches) { log.debug "switching off: ${switches}, current values: " + switches.currentValue("switch") for(s in switches) { - //if(s.currentValue("switch") != 'off'){ - s.off() - //} + s.off() } log.debug "done switching off: ${switches}, current values: " + switches.currentValue("switch") } @@ -151,20 +153,72 @@ def switchOff(switches) { def switchOn(switches) { log.debug "switching on: ${switches}, current values: " + switches.currentValue("switch") for(s in switches) { - //if(s.currentValue("switch") != 'on'){ - s.on() - //} + s.on() } log.debug "done switching on: ${switches}, current values: " + switches.currentValue("switch") } +//set the expected direction (heat/cool/none) to be able to monitor if it's working +def setExpectedDirection(direction) { + log.debug "direction change to ${direction}" + state.expectedDirection = direction + state.directionChangeWorked = false + state.directionChangeTime = new Date().getTime() +} + +def temperatureHandler(evt) { + log.debug "temperatureHandler: ${evt.stringValue}" + state.curTemp = getAverageTemperature() + if(!state.directionChangeWorked && state.expectedDirection != 'none') { + //if we haven't proven that the direction change has worked yet, let's confirm that it worked + if(state.expectedDirection == 'cool' && state.curTemp < state.lastTemp) { + log.debug "expecting cool and temp went down from ${state.lastTemp} to ${state.curTemp} all good" + state.directionChangeWorked = true + } + if(state.expectedDirection == 'heat' && state.curTemp > state.lastTemp) { + log.debug "expecting heat and temp went up from ${state.lastTemp} to ${state.curTemp} all good" + state.directionChangeWorked = true + } + + def timeSinceDirectionChange = new Date().getTime() - state.directionChangeTime + if(!state.directionChangeWorked && timeSinceDirectionChange > (60*4)){ + if(!unreliableSwitchFix) { + log.debug "direction change did not work within 4 min, but since 'Unreliable Switch Fix' is off, nothing will be done. Seconds since direction change: ${timeSinceDirectionChange}" + return + } + log.debug "direction change did not work within 4 min, try flipping the switch again and reset the timer. Seconds since direction change: ${timeSinceDirectionChange}" + state.directionChangeTime = new Date().getTime() + def oState = thermostat.getOperatingState() + if(state.expectedDirection == 'cool') { + if(oState == 'cooling') { + switchOn(cooling_outlets) + } else { + switchOff(heating_outlets) + } + } + if(state.expectedDirection == 'heat') { + if(oState == 'heating') { + switchOn(heating_outlets) + } else { + switchOff(cooling_outlets) + } + } + } + } + + state.lastTemp = state.curTemp + handleChange() +} + + def cool() { log.debug "cooling outlets on, current value: " + cooling_outlets.currentValue("switch") - def state = thermostat.getOperatingState() - if(state != 'cooling') { + def oState = thermostat.getOperatingState() + if(oState != 'cooling') { + setExpectedDirection('cool') thermostat.setThermostatOperatingState('cooling') switchOn(cooling_outlets) - if(state == 'heating') { + if(oState == 'heating') { switchOff(heating_outlets) } } @@ -172,11 +226,12 @@ def cool() { def heat() { log.debug "heating outlets on, current value: " + heating_outlets.currentValue("switch") - def state = thermostat.getOperatingState() - if(state != 'heating') { + def oState = thermostat.getOperatingState() + if(oState != 'heating') { + setExpectedDirection('heat') thermostat.setThermostatOperatingState('heating') switchOn(heating_outlets) - if(state == 'cooling') { + if(oState == 'cooling') { switchOff(cooling_outlets) } } @@ -184,12 +239,13 @@ def heat() { def off() { log.debug "off, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") - def state = thermostat.getOperatingState() - if(state != 'off') { + def oState = thermostat.getOperatingState() + if(oState != 'off') { thermostat.setThermostatOperatingState('off') - if(state == 'heating') { + setExpectedDirection('none') + if(oState == 'heating') { switchOff(heating_outlets) - } else if(state == 'cooling') { + } else if(oState == 'cooling') { switchOff(cooling_outlets) } } @@ -197,13 +253,15 @@ def off() { def idle() { log.debug "idle, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") - def state = thermostat.getOperatingState() - if(state != 'idle') { + def oState = thermostat.getOperatingState() + if(oState != 'idle') { thermostat.setThermostatOperatingState('idle') - if(state == 'heating') { - switchOff(heating_outlets) - } else if(state == 'cooling') { - switchOff(cooling_outlets) + if(oState == 'heating') { + setExpectedDirection('cool') + switchOff(heating_outlets) + } else if(oState == 'cooling') { + setExpectedDirection('heat') + switchOff(cooling_outlets) } } } @@ -213,9 +271,8 @@ def handleChange() { if(thermostat) { log.debug "handle change, mode: " + thermostat.currentValue('thermostatMode') + ", operatingState: " + thermostat.currentValue("thermostatOperatingState") + - ", temp: " + getAverageTemperature() + + ", temp: " + getAverageTemperature() + ", coolingSetPoint: " + thermostat.currentValue("coolingSetpoint") + - //", thermostatSetPoint: " + thermostat.currentValue("thermostatSetpoint") + ", heatingSetPoint: " + thermostat.currentValue("heatingSetpoint") /*def attrs = thermostat.supportedAttributes @@ -291,6 +348,7 @@ def updated() subscribe(thermostat, "thermostatMode", thermostatModeHandler) //reset some values + setExpectedDirection('none') thermostat.clearSensorData() thermostat.setVirtualTemperature(getAverageTemperature()) thermostat.setHeatCoolDelta(heatCoolDelta) @@ -298,13 +356,6 @@ def updated() thermostat.setCoolDiff(coolDiff) } -/* -def thermostatSetPointHandler(evt) { - log.debug "thermostatSetPointHandler: ${evt.stringValue}" - //handleChange() -} -*/ - def coolingSetPointHandler(evt) { log.debug "coolingSetPointHandler: ${evt.stringValue}" handleChange() @@ -315,12 +366,6 @@ def heatingSetPointHandler(evt) { handleChange() } -def temperatureHandler(evt) { - log.debug "temperatureHandler: ${evt.stringValue}" -// getThermostat().setVirtualTemperature(getAverageTemperature()) - handleChange() -} - def motionHandler(evt) { log.debug "motionHandler: ${evt.stringValue}" handleChange() From 898a458e70774ace3ba715b90e5c062169550f39 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sat, 20 Jun 2020 07:54:58 -0400 Subject: [PATCH 52/63] fixed a few issues with unreliableSwitchFix --- .../virtual-thermostat-with-device.groovy | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 014185b..cc3c774 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -41,7 +41,7 @@ preferences { section("Fix for unreliable switches to automatically turn them on/off again, if it seems like turning them on/off did not work based on the temperature (Experimental)") { input "unreliableSwitchFix", "bool", title: "Unreliable switch fix", defaultValue: false } -} +} def installed() { @@ -167,8 +167,13 @@ def setExpectedDirection(direction) { } def temperatureHandler(evt) { - log.debug "temperatureHandler: ${evt.stringValue}" state.curTemp = getAverageTemperature() + def now = new Date().getTime() + def minSinceDirectionChange = (now - state.directionChangeTime)/(1000*60) + log.debug "temperatureHandler: ${evt.stringValue}, curTemp: ${state.curTemp}, lastTemp: ${state.lastTemp}" + + ", expectedDirection: ${state.expectedDirection}, directionChangeWorked: ${state.directionChangeWorked}" + + ", minSinceDirectionChange: ${minSinceDirectionChange}, now: ${now}, directionChangeTime: ${state.directionChangeTime}" + if(!state.directionChangeWorked && state.expectedDirection != 'none') { //if we haven't proven that the direction change has worked yet, let's confirm that it worked if(state.expectedDirection == 'cool' && state.curTemp < state.lastTemp) { @@ -180,13 +185,12 @@ def temperatureHandler(evt) { state.directionChangeWorked = true } - def timeSinceDirectionChange = new Date().getTime() - state.directionChangeTime - if(!state.directionChangeWorked && timeSinceDirectionChange > (60*4)){ + if(!state.directionChangeWorked && minSinceDirectionChange > 4){ if(!unreliableSwitchFix) { - log.debug "direction change did not work within 4 min, but since 'Unreliable Switch Fix' is off, nothing will be done. Seconds since direction change: ${timeSinceDirectionChange}" + log.debug "direction change did not work within 4 min, but since 'Unreliable Switch Fix' is off, nothing will be done. Minutes since direction change: ${minSinceDirectionChange}" return } - log.debug "direction change did not work within 4 min, try flipping the switch again and reset the timer. Seconds since direction change: ${timeSinceDirectionChange}" + log.debug "direction change did not work within 4 min, try flipping the switch again and reset the timer. Minutes since direction change: ${minSinceDirectionChange}" state.directionChangeTime = new Date().getTime() def oState = thermostat.getOperatingState() if(state.expectedDirection == 'cool') { @@ -212,7 +216,7 @@ def temperatureHandler(evt) { def cool() { - log.debug "cooling outlets on, current value: " + cooling_outlets.currentValue("switch") + //log.debug "cooling outlets on, current value: " + cooling_outlets.currentValue("switch") def oState = thermostat.getOperatingState() if(oState != 'cooling') { setExpectedDirection('cool') @@ -225,7 +229,7 @@ def cool() { } def heat() { - log.debug "heating outlets on, current value: " + heating_outlets.currentValue("switch") + //log.debug "heating outlets on, current value: " + heating_outlets.currentValue("switch") def oState = thermostat.getOperatingState() if(oState != 'heating') { setExpectedDirection('heat') @@ -238,7 +242,7 @@ def heat() { } def off() { - log.debug "off, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") + //log.debug "off, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") def oState = thermostat.getOperatingState() if(oState != 'off') { thermostat.setThermostatOperatingState('off') @@ -252,7 +256,7 @@ def off() { } def idle() { - log.debug "idle, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") + //log.debug "idle, all outlets off, current value heating: " + heating_outlets.currentValue("switch") + ", cooling: " + cooling_outlets.currentValue("switch") def oState = thermostat.getOperatingState() if(oState != 'idle') { thermostat.setThermostatOperatingState('idle') From b46e762f921842b95a06dcfe81f70727f0e2df61 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sat, 20 Jun 2020 07:55:40 -0400 Subject: [PATCH 53/63] fixed a bug with smart heating --- .../virtual-thermostat-device.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 040a254..9bca377 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -17,7 +17,7 @@ metadata { command "refresh" command "poll" - + command "offbtn" command "coolbtn" command "heatbtn" @@ -579,7 +579,7 @@ def smartHeatUp(){ def setPointToStartHeating = getTemperature() + diff + 0.1; def targetFromSetPoint = getHeatingSetpoint() + (diff*2) - def target = targetFromSetPoint.max(setPointToStartCooling) + def target = targetFromSetPoint.max(setPointToStartHeating) def targetDiff = target - getHeatingSetpoint(); log.debug "smartHeatUp => temp: ${getTemperature()}, heatSetPoint: ${getHeatingSetpoint()}, diff: ${diff}, targetFromSetPoint: ${targetFromSetPoint}, setPointToStartHeating: ${setPointToStartHeating}, target: ${target}, targetDiff: ${targetDiff}" levelChange(targetDiff) From a2916d48b38cdfd7a5da42e19832ca7e5cc82a1f Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 12 Jul 2020 14:08:03 -0400 Subject: [PATCH 54/63] removed leftover code --- .../virtual-thermostat-device.groovy | 6 ------ 1 file changed, 6 deletions(-) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 9bca377..7557ea0 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -390,12 +390,6 @@ def getOperatingState() { return device.currentValue("thermostatOperatingState") } -/* -def getThermostatSetpoint() { - return device.currentValue("thermostatSetpoint") -} -*/ - def getHeatingSetpoint() { return device.currentValue("heatingSetpoint") } From cc9cbcfa621a071e224197bc6ac2106a2611e3b7 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 12 Jul 2020 14:31:03 -0400 Subject: [PATCH 55/63] update to better deal with unreliable switches --- .../virtual-thermostat-with-device.groovy | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index cc3c774..ce5d697 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -162,7 +162,7 @@ def switchOn(switches) { def setExpectedDirection(direction) { log.debug "direction change to ${direction}" state.expectedDirection = direction - state.directionChangeWorked = false + state.tempAtDirectionChange = state.curTemp state.directionChangeTime = new Date().getTime() } @@ -170,47 +170,48 @@ def temperatureHandler(evt) { state.curTemp = getAverageTemperature() def now = new Date().getTime() def minSinceDirectionChange = (now - state.directionChangeTime)/(1000*60) - log.debug "temperatureHandler: ${evt.stringValue}, curTemp: ${state.curTemp}, lastTemp: ${state.lastTemp}" + - ", expectedDirection: ${state.expectedDirection}, directionChangeWorked: ${state.directionChangeWorked}" + - ", minSinceDirectionChange: ${minSinceDirectionChange}, now: ${now}, directionChangeTime: ${state.directionChangeTime}" - - if(!state.directionChangeWorked && state.expectedDirection != 'none') { - //if we haven't proven that the direction change has worked yet, let's confirm that it worked - if(state.expectedDirection == 'cool' && state.curTemp < state.lastTemp) { - log.debug "expecting cool and temp went down from ${state.lastTemp} to ${state.curTemp} all good" - state.directionChangeWorked = true + log.debug "temperatureHandler: ${evt.stringValue}, curTemp: ${state.curTemp}" + + ", expectedDirection: ${state.expectedDirection}" + + ", minSinceDirectionChange: ${minSinceDirectionChange}, now: ${now}, directionChangeTime: ${state.directionChangeTime}, tempAtDirectionChange: ${state.tempAtDirectionChange}" + + if(state.expectedDirection != 'none') { + directionChangeWorked = false; + if(state.expectedDirection == 'cool') { + directionChangeWorked = state.curTemp < state.tempAtDirectionChange } - if(state.expectedDirection == 'heat' && state.curTemp > state.lastTemp) { - log.debug "expecting heat and temp went up from ${state.lastTemp} to ${state.curTemp} all good" - state.directionChangeWorked = true + if(state.expectedDirection == 'heat') { + directionChangeWorked = state.curTemp > state.tempAtDirectionChange } - if(!state.directionChangeWorked && minSinceDirectionChange > 4){ - if(!unreliableSwitchFix) { - log.debug "direction change did not work within 4 min, but since 'Unreliable Switch Fix' is off, nothing will be done. Minutes since direction change: ${minSinceDirectionChange}" - return - } - log.debug "direction change did not work within 4 min, try flipping the switch again and reset the timer. Minutes since direction change: ${minSinceDirectionChange}" - state.directionChangeTime = new Date().getTime() - def oState = thermostat.getOperatingState() - if(state.expectedDirection == 'cool') { - if(oState == 'cooling') { - switchOn(cooling_outlets) - } else { - switchOff(heating_outlets) - } - } - if(state.expectedDirection == 'heat') { - if(oState == 'heating') { - switchOn(heating_outlets) + if(minSinceDirectionChange > 8 && minSinceDirectionChange < 16){ + //If we at any point in the in the period 8-16 min after a direction change see that the temperature is not trending in the right direction, we try to press the button again to ensure that it's truly pressed. + //This is specifically to fix unreliable switches such as switchbot + if(!directionChangeWorked) { + if(!unreliableSwitchFix) { + log.debug "direction change did not work within 8 min, but since 'Unreliable Switch Fix' is off, nothing will be done. Minutes since direction change: ${minSinceDirectionChange}" } else { - switchOff(cooling_outlets) + log.debug "direction change did not work within 8 min, try flipping the switch again and reset the timer. Minutes since direction change: ${minSinceDirectionChange}" + state.directionChangeTime = new Date().getTime() + def oState = thermostat.getOperatingState() + if(state.expectedDirection == 'cool') { + if(oState == 'cooling') { + switchOn(cooling_outlets) + } else { + switchOff(heating_outlets) + } + } + if(state.expectedDirection == 'heat') { + if(oState == 'heating') { + switchOn(heating_outlets) + } else { + switchOff(cooling_outlets) + } + } } } } } - state.lastTemp = state.curTemp handleChange() } @@ -346,7 +347,6 @@ def updated() } //subscribe to virtual device changes - //subscribe(thermostat, "thermostatSetpoint", thermostatSetPointHandler) subscribe(thermostat, "heatingSetpoint", heatingSetPointHandler) subscribe(thermostat, "coolingSetpoint", coolingSetPointHandler) subscribe(thermostat, "thermostatMode", thermostatModeHandler) From 753bfe100c8267a34da0dd1c3ce85f27133c8888 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 12 Jul 2020 14:54:20 -0400 Subject: [PATCH 56/63] fix bug and allow for heating/cooling switches to be optional --- .../virtual-thermostat-with-device.groovy | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index ce5d697..38c945b 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -13,11 +13,11 @@ preferences { section("Choose a temperature sensor(s)... (If multiple sensors are selected, the average value will be used)"){ input "sensors", "capability.temperatureMeasurement", title: "Sensor", multiple: true } - section("Select the heater outlet(s)... "){ - input "heating_outlets", "capability.switch", title: "Heating Outlets", multiple: true + section("Select the heater outlet(s)... (optional, leave blank if heating not required)"){ + input "heating_outlets", "capability.switch", title: "Heating Outlets", multiple: true, required: false } - section("Select the cooling outlet(s)... "){ - input "cooling_outlets", "capability.switch", title: "Cooling Outlets", multiple: true + section("Select the cooling outlet(s)... (optional, leave blank if cooling not required)"){ + input "cooling_outlets", "capability.switch", title: "Cooling Outlets", multiple: true, required: false } section("Only heat/cool when contact(s) aren't open (optional, leave blank to not require contact sensor)..."){ input "motion", "capability.contactSensor", title: "Contact", required: false, multiple: true @@ -143,19 +143,27 @@ def getAverageTemperature() { } def switchOff(switches) { - log.debug "switching off: ${switches}, current values: " + switches.currentValue("switch") - for(s in switches) { - s.off() + if(switches) { + log.debug "switching off: ${switches}, current values: " + switches.currentValue("switch") + for(s in switches) { + s.off() + } + log.debug "done switching off: ${switches}, current values: " + switches.currentValue("switch") + } else { + log.debug "nothing to switch off" } - log.debug "done switching off: ${switches}, current values: " + switches.currentValue("switch") } def switchOn(switches) { - log.debug "switching on: ${switches}, current values: " + switches.currentValue("switch") - for(s in switches) { - s.on() + if(switches) { + log.debug "switching on: ${switches}, current values: " + switches.currentValue("switch") + for(s in switches) { + s.on() + } + log.debug "done switching on: ${switches}, current values: " + switches.currentValue("switch") + } else { + log.debug "nothing to switch on" } - log.debug "done switching on: ${switches}, current values: " + switches.currentValue("switch") } //set the expected direction (heat/cool/none) to be able to monitor if it's working @@ -175,7 +183,7 @@ def temperatureHandler(evt) { ", minSinceDirectionChange: ${minSinceDirectionChange}, now: ${now}, directionChangeTime: ${state.directionChangeTime}, tempAtDirectionChange: ${state.tempAtDirectionChange}" if(state.expectedDirection != 'none') { - directionChangeWorked = false; + def directionChangeWorked = false; if(state.expectedDirection == 'cool') { directionChangeWorked = state.curTemp < state.tempAtDirectionChange } From 89f35d629924b5adaeac7dc4e1293d87656bd26d Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 12 Jul 2020 16:59:14 -0400 Subject: [PATCH 57/63] minor changes and addition of humidity sensor --- .../virtual-thermostat-device.groovy | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy index 7557ea0..c475437 100644 --- a/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy +++ b/devicetypes/piratemedia/smartthings/virtual-thermostat-device.src/virtual-thermostat-device.groovy @@ -7,6 +7,7 @@ metadata { executeCommandsLocally: true, ocfDeviceType: "oic.d.thermostat") { capability "Temperature Measurement" + capability "Relative Humidity Measurement" capability "Thermostat" capability "Thermostat Mode" capability "Thermostat Heating Setpoint" @@ -31,6 +32,7 @@ metadata { command "coolingSetpointUp" command "coolingSetpointDown" command "setVirtualTemperature", ["number"] + command "setVirtualHumidity", ["number"] command "setHeatCoolDelta", ["number"] command "setHeatDiff", ["number"] command "setCoolDiff", ["number"] @@ -84,6 +86,10 @@ metadata { tileAttribute("device.adjustedCoolingPoint", key: "COOLING_SETPOINT") { attributeState("default", label:'${currentValue}') } + + tileAttribute("device.humidity", key: "SECONDARY_CONTROL") { + attributeState("humidity", label:'${currentValue}%', unit:"%", defaultState: true) + } } valueTile("tempmain", "device.temperature", width: 2, height: 2, decoration: "flat") { @@ -229,6 +235,7 @@ private initialize() { setThermostatOperatingState("off") setThermostatMode("off") setVirtualTemperature(defaultTemp()) + setVirtualHumidity(50) sendEvent(name:"supportedThermostatModes", value: thermostatModes(), displayed: false) state.tempScale = "C" @@ -270,9 +277,14 @@ def getTemperature() { return device.currentValue("temperature") } +def roundTemp(temp) { + return Math.round(temp * 100) / 100; +} + def sendCoolingSetpoint(temp) { def csp = device.currentValue("coolingSetpoint") if(temp != csp) { + temp = roundTemp(temp); log.debug "sendCoolingSetpoint from " + csp + " to " + temp sendEvent(name:"coolingSetpoint", value: temp, unit: unitString()) if(device.currentValue("thermostatOperatingState") == "cooling") { @@ -286,6 +298,7 @@ def sendCoolingSetpoint(temp) { def sendHeatingSetpoint(temp) { def hsp = device.currentValue("heatingSetpoint") if(temp != hsp) { + temp = roundTemp(temp); log.debug "sendHeatingSetpoint from " + hsp + " to " + temp sendEvent(name:"heatingSetpoint", value: temp, unit: unitString()) if(device.currentValue("thermostatOperatingState") == "heating") { @@ -447,6 +460,10 @@ def setVirtualTemperature(temp) { sendEvent(name:"temperature", value: temp, unit: unitString(), displayed: true) } +def setVirtualHumidity(humidity) { + sendEvent(name:"humidity", value: humidity, unit: unitString(), displayed: true) +} + def setHeatCoolDelta(delta) { sendEvent(name:"heatCoolDelta", value: delta, unit: unitString(), displayed: true) } From 27e17ecbacf831344fcbc9b3440e377e68e247f5 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 12 Jul 2020 16:59:55 -0400 Subject: [PATCH 58/63] add humidity sensor --- .../virtual-thermostat-with-device.groovy | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 38c945b..3c1c10e 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -10,9 +10,12 @@ definition( ) preferences { - section("Choose a temperature sensor(s)... (If multiple sensors are selected, the average value will be used)"){ + section("Choose temperature sensor(s)... (If multiple sensors are selected, the average value will be used)"){ input "sensors", "capability.temperatureMeasurement", title: "Sensor", multiple: true } + section("Choose humidity sensor(s)... (optional, if multiple sensors are selected, the average value will be used)"){ + input "humidity_sensors", "capability.relativeHumidityMeasurement", title: "Humidity Sensors", multiple: true, required: false + } section("Select the heater outlet(s)... (optional, leave blank if heating not required)"){ input "heating_outlets", "capability.switch", title: "Heating Outlets", multiple: true, required: false } @@ -142,6 +145,22 @@ def getAverageTemperature() { return total / count } + +def getAverageHumidity() { + def total = 0; + def count = 0; + + //total all sensors temperature + for(sensor in humidity_sensors) { + total += sensor.currentValue("humidity") + thermostat.setIndividualTemperature(sensor.currentValue("humidity"), count, sensor.label) + count++ + } + + //divide by number of sensors + return total / count +} + def switchOff(switches) { if(switches) { log.debug "switching off: ${switches}, current values: " + switches.currentValue("switch") @@ -349,6 +368,11 @@ def updated() //subscribe to temperature changes subscribe(sensors, "temperature", temperatureHandler) + //subscribe to temperature changes + if(humidity_sensors) { + subscribe(humidity_sensors, "humidity", humidityHandler) + } + //subscribe to contact sensor changes if (motion) { subscribe(motion, "contact", motionHandler) @@ -363,6 +387,7 @@ def updated() setExpectedDirection('none') thermostat.clearSensorData() thermostat.setVirtualTemperature(getAverageTemperature()) + thermostat.setVirtualHumidity(getAverageHumidity()) thermostat.setHeatCoolDelta(heatCoolDelta) thermostat.setHeatDiff(heatDiff) thermostat.setCoolDiff(coolDiff) @@ -387,3 +412,8 @@ def thermostatModeHandler(evt) { log.debug "thermostatModeHandler: ${evt.stringValue}" handleChange() } + +def humidityHandler(evt) { + log.debug "humidityHandler: ${evt.stringValue}" + thermostat.setVirtualHumidity(getAverageHumidity()) +} \ No newline at end of file From e453ab69dcb439e946a0bec040312e2a5a82a420 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Sun, 12 Jul 2020 20:32:37 -0400 Subject: [PATCH 59/63] allow physical or virtual buttons to trigger smart heat/cool --- .../virtual-thermostat-with-device.groovy | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 3c1c10e..6c6e164 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -23,7 +23,13 @@ preferences { input "cooling_outlets", "capability.switch", title: "Cooling Outlets", multiple: true, required: false } section("Only heat/cool when contact(s) aren't open (optional, leave blank to not require contact sensor)..."){ - input "motion", "capability.contactSensor", title: "Contact", required: false, multiple: true + input "motion", "capability.contactSensor", title: "Motion Contact", required: false, multiple: true + } + section("Button/switch to trigger the smart heat function (optional, good for controlling thermostat from physical buttons or from virtual buttons that can be triggered by other apps or voice commands)"){ + input "smart_heat_button", "capability.switch", title: "Smart heat button", required: false + } + section("Button/switch to trigger the smart cool function (optional, good for controlling thermostat from physical buttons or from virtual buttons that can be triggered by other apps or voice commands)"){ + input "smart_cool_button", "capability.switch", title: "Smart cool button", required: false } section("Never go below this temperature: (optional)"){ input "emergencyHeatingSetpoint", "decimal", title: "Emergency Min Temp", required: false @@ -368,16 +374,24 @@ def updated() //subscribe to temperature changes subscribe(sensors, "temperature", temperatureHandler) - //subscribe to temperature changes + //subscribe to humidity changes if(humidity_sensors) { subscribe(humidity_sensors, "humidity", humidityHandler) } //subscribe to contact sensor changes - if (motion) { + if(motion) { subscribe(motion, "contact", motionHandler) } - + + //smart heat and cool from input switches + if(smart_heat_button) { + subscribe(smart_heat_button, "switch", smartHeatHandler) + } + if(smart_cool_button) { + subscribe(smart_cool_button, "switch", smartCoolHandler) + } + //subscribe to virtual device changes subscribe(thermostat, "heatingSetpoint", heatingSetPointHandler) subscribe(thermostat, "coolingSetpoint", coolingSetPointHandler) @@ -416,4 +430,20 @@ def thermostatModeHandler(evt) { def humidityHandler(evt) { log.debug "humidityHandler: ${evt.stringValue}" thermostat.setVirtualHumidity(getAverageHumidity()) +} + +def smartHeatHandler(evt) { + log.debug "smartHeatHandler: ${evt.stringValue}" + if(smart_heat_button.currentValue('switch') == "on") { + getThermostat().smartHeatUp() + smart_heat_button.off() + } +} + +def smartCoolHandler(evt) { + log.debug "smartCoolHandler: ${evt.stringValue}" + if(smart_cool_button.currentValue('switch') == "on") { + getThermostat().smartCoolDown() + smart_cool_button.off() + } } \ No newline at end of file From 1924ecbd3b4d66a9ec01f35f3bdc540e0537251c Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Fri, 24 Jul 2020 21:55:22 -0400 Subject: [PATCH 60/63] Fix minor issue --- .../virtual-thermostat-with-device.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 6c6e164..545e58d 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -224,7 +224,7 @@ def temperatureHandler(evt) { log.debug "direction change did not work within 8 min, but since 'Unreliable Switch Fix' is off, nothing will be done. Minutes since direction change: ${minSinceDirectionChange}" } else { log.debug "direction change did not work within 8 min, try flipping the switch again and reset the timer. Minutes since direction change: ${minSinceDirectionChange}" - state.directionChangeTime = new Date().getTime() + setExpectedDirection(state.expectedDirection) //resets time and temp def oState = thermostat.getOperatingState() if(state.expectedDirection == 'cool') { if(oState == 'cooling') { From f946a98ce760f99a612d193c16422458e06800ba Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Fri, 24 Jul 2020 21:55:25 -0400 Subject: [PATCH 61/63] Fix minor issue From 041d280aa4cc05dc8a68dc7a057a5e5b8107de11 Mon Sep 17 00:00:00 2001 From: Steffen Nissen Date: Fri, 24 Jul 2020 21:55:27 -0400 Subject: [PATCH 62/63] Fix minor issue From b419c8e670daedaf88228554671266bc713d2550 Mon Sep 17 00:00:00 2001 From: Meredith Mello Date: Sun, 26 Jul 2020 12:33:16 -0700 Subject: [PATCH 63/63] Added check for humidity sensors to stop div. by 0 --- .../virtual-thermostat-with-device.groovy | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy index 545e58d..c6884e8 100644 --- a/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy +++ b/smartapps/piratemedia/smartthings/virtual-thermostat-with-device.src/virtual-thermostat-with-device.groovy @@ -163,8 +163,12 @@ def getAverageHumidity() { count++ } - //divide by number of sensors - return total / count + //only divide by number of sensors if there are more than 0 + if(count > 0) { + return total / count + } else { + return 0 + } } def switchOff(switches) {