diff --git a/devicetypes/smartthings/ecobee-thermostat.src/ecobee-thermostat.groovy b/devicetypes/smartthings/ecobee-thermostat.src/ecobee-thermostat.groovy index 560adbf..dac3df7 100644 --- a/devicetypes/smartthings/ecobee-thermostat.src/ecobee-thermostat.groovy +++ b/devicetypes/smartthings/ecobee-thermostat.src/ecobee-thermostat.groovy @@ -98,19 +98,12 @@ metadata { details(["temperature", "upButtonControl", "thermostatSetpoint", "currentStatus", "downButtonControl", "mode", "resumeProgram", "refresh"]) } + preferences { + input "holdType", "enum", title: "Hold Type", description: "When changing temperature, use Temporary or Permanent hold", required: false, options:["Temporary", "Permanent"] + } + } -/* - - preferences { - input "highTemperature", "number", title: "Auto Mode High Temperature:", defaultValue: 80 - input "lowTemperature", "number", title: "Auto Mode Low Temperature:", defaultValue: 70 - input name: "holdType", type: "enum", title: "Hold Type", description: "When changing temperature, use Temporary or Permanent hold", required: true, options:["Temporary", "Permanent"] - } - -*/ - - // parse events into attributes def parse(String description) { log.debug "Parsing '${description}'" @@ -208,7 +201,8 @@ void setHeatingSetpoint(Double setpoint) { log.debug "Sending setHeatingSetpoint> coolingSetpoint: ${coolingSetpoint}, heatingSetpoint: ${heatingSetpoint}" - if (parent.setHold (this, heatingSetpoint, coolingSetpoint, deviceId)) { + def sendHoldType = holdType ? (holdType=="Temporary")? "nextTransition" : (holdType=="Permanent")? "indefinite" : "indefinite" : "indefinite" + if (parent.setHold (this, heatingSetpoint, coolingSetpoint, deviceId, sendHoldType)) { sendEvent("name":"heatingSetpoint", "value":heatingSetpoint) sendEvent("name":"coolingSetpoint", "value":coolingSetpoint) log.debug "Done setHeatingSetpoint> coolingSetpoint: ${coolingSetpoint}, heatingSetpoint: ${heatingSetpoint}" @@ -242,7 +236,8 @@ void setCoolingSetpoint(Double setpoint) { log.debug "Sending setCoolingSetpoint> coolingSetpoint: ${coolingSetpoint}, heatingSetpoint: ${heatingSetpoint}" - if (parent.setHold (this, heatingSetpoint, coolingSetpoint, deviceId)) { + def sendHoldType = holdType ? (holdType=="Temporary")? "nextTransition" : (holdType=="Permanent")? "indefinite" : "indefinite" : "indefinite" + if (parent.setHold (this, heatingSetpoint, coolingSetpoint, deviceId, sendHoldType)) { sendEvent("name":"heatingSetpoint", "value":heatingSetpoint) sendEvent("name":"coolingSetpoint", "value":coolingSetpoint) log.debug "Done setCoolingSetpoint>> coolingSetpoint = ${coolingSetpoint}, heatingSetpoint = ${heatingSetpoint}" @@ -608,10 +603,11 @@ void alterSetpoint(temp) { } log.debug "alterSetpoint >> in mode ${mode} trying to change heatingSetpoint to ${targetHeatingSetpoint} " + - "coolingSetpoint to ${targetCoolingSetpoint}" + "coolingSetpoint to ${targetCoolingSetpoint} with holdType : ${holdType}" + def sendHoldType = holdType ? (holdType=="Temporary")? "nextTransition" : (holdType=="Permanent")? "indefinite" : "indefinite" : "indefinite" //step2: call parent.setHold to send http request to 3rd party cloud - if (parent.setHold(this, targetHeatingSetpoint, targetCoolingSetpoint, deviceId)) { + if (parent.setHold(this, targetHeatingSetpoint, targetCoolingSetpoint, deviceId, sendHoldType)) { sendEvent("name": "thermostatSetpoint", "value": temp.value.toString(), displayed: false) sendEvent("name": "heatingSetpoint", "value": targetHeatingSetpoint) sendEvent("name": "coolingSetpoint", "value": targetCoolingSetpoint) diff --git a/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy b/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy index 790820d..3ff0ee6 100644 --- a/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy +++ b/smartapps/smartthings/ecobee-connect.src/ecobee-connect.groovy @@ -404,7 +404,7 @@ def pollChildren(child = null) { // } if(resp.status == 200) { - log.debug "poll results returned" + log.debug "poll results returned resp.data ${resp.data}" atomicState.remoteSensors = resp.data.thermostatList.remoteSensors atomicState.thermostatData = resp.data updateSensorData() @@ -423,7 +423,9 @@ def pollChildren(child = null) { coolingSetpoint: stat.runtime.desiredCool / 10, thermostatMode: stat.settings.hvacMode ] - data["temperature"] = data["temperature"] ? String.format("%.1f", data["temperature"]) : data["temperature"] + data["temperature"] = data["temperature"] ? data["temperature"].toDouble().toInteger() : data["temperature"] + data["heatingSetpoint"] = data["heatingSetpoint"] ? data["heatingSetpoint"].toDouble().toInteger() : data["heatingSetpoint"] + data["coolingSetpoint"] = data["coolingSetpoint"] ? data["coolingSetpoint"].toDouble().toInteger() : data["coolingSetpoint"] // debugEventFromParent(child, "Event Data = ${data}") collector[dni] = [data:data] @@ -547,9 +549,8 @@ def updateSensorData() { it.capability.each { if (it.type == "temperature") { temperature = it.value as Double - temperature = temperature / 10 - } - if (it.type == "occupancy") { + temperature = (temperature / 10).toInteger() + } else if (it.type == "occupancy") { if(it.value == "true") occupancy = "active" else @@ -658,7 +659,7 @@ def resumeProgram(child, deviceId) { return result } -def setHold(child, heating, cooling, deviceId) { +def setHold(child, heating, cooling, deviceId, sendHoldType) { int h = heating * 10 int c = cooling * 10 @@ -666,7 +667,7 @@ def setHold(child, heating, cooling, deviceId) { // log.debug "setpoints____________ - h: $heating - $h, c: $cooling - $c" // def thermostatIdsString = getChildDeviceIdsString() - def jsonRequestBody = '{"selection":{"selectionType":"thermostats","selectionMatch":"' + deviceId + '","includeRuntime":true},"functions": [{ "type": "setHold", "params": { "coolHoldTemp": '+c+',"heatHoldTemp": '+h+', "holdType": "indefinite" } } ]}' + def jsonRequestBody = '{"selection":{"selectionType":"thermostats","selectionMatch":"' + deviceId + '","includeRuntime":true},"functions": [{ "type": "setHold", "params": { "coolHoldTemp": '+c+',"heatHoldTemp": '+h+', "holdType": '+sendHoldType+' } } ]}' // def jsonRequestBody = '{"selection":{"selectionType":"thermostats","selectionMatch":"' + thermostatIdsString + '","includeRuntime":true},"functions": [{"type": "resumeProgram"}, { "type": "setHold", "params": { "coolHoldTemp": '+c+',"heatHoldTemp": '+h+', "holdType": "indefinite" } } ]}' def result = sendJson(child, jsonRequestBody) // debugEventFromParent(child, "setHold: heating: ${h}, cooling: ${c} with result ${result}")