mirror of
https://github.com/mtan93/SmartThingsPublic.git
synced 2026-03-08 05:31:56 +00:00
Merge pull request #337 from kwarodom/ecobee
Ecobee: round temperature value, add ability to set temperature setpoint temporarily or permanently
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user