When Thermal Comfort makes setpoint changes, are they made as a Hold or is it actually changing the setpoints within the given Comfort Settings itself?
Thermal Comfort changes the actual setpointsā¦
This generally corrects itself after a few minutesā¦if not, try removing the sensor from the ES list of devices, and then add it backā¦
What is the proper way for me to use WebCoRE to turn on the HVAC fan for 10 minutes? It seems everything I try ends up resetting the āminimum fan runtimeā feature to 0 minutes.
@flyize Iām doing something similar, just with a virtual switch instead of a time limit.
If I was going to do this with a āturn off after Xmā Iād do:
That doesnāt work. As soon as you set the fan to On, it sets the minimum fan runtime to 0 mintes.
Thanks for clarifying. Just so i understand and to confirm this is set up correctly to change fan runtime differently based on if the thermostat (set in auto) is cooling or heating:
- in the Fan Circulation app i have cooling fan on time = 30, heating fan on time = 0 and change fan on time only when location mode = Home, Night
- in the mode program helpers (one for away, home, sleep) i have the fan min min per hour field empty
If i understand correctly, the fan runtimes will only change to 0 or 30 min for home and night modes with this configured this way. Please confirm. Thanks again for both apps, the suite manager is a fantastic app.
Just set the fanMinOnTime back to the desired value after you turn the fan back to Auto mode (fanMinOnTime only works when the fan is in Auto/Circulate mode).
You are correct, except that there is a bug in the code I provided. Please replace with this version:
/**
* fanMinOnTime by Thermostat Operating State
* Copyright 2019 Barry A. Burke
*
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
* for the specific language governing permissions and limitations under the License.
*
*/
String getVersionNum() { return "1.0.0" }
String getVersionLabel() { return "Ecobee Fan Circulation, version ${getVersionNum()}" }
import groovy.json.*
definition(
name: "Ecobee Fan Circulation",
namespace: "sandood",
author: "Barry A. Burke (storageanarchy at gmail dot com)",
description: "Change Ecobee fanMinOnTime based on Thermostat Operating State changes",
category: "Convenience",
iconUrl: "https://s3.amazonaws.com/smartapp-icons/Partner/ecobee.png",
iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Partner/ecobee@2x.png",
singleInstance: false,
pausable: true
)
preferences {
page(name: "mainPage")
}
// Preferences Pages
def mainPage() {
dynamicPage(name: "mainPage", title: "${getVersionLabel()}", uninstall: true, install: true) {
section(title: '') {
String defaultLabel = app.name
label(title: "Name for this ${defaultLabel} instance", required: true, defaultValue: defaultLabel)
input(name: "thermostats", type: "device.ecobeeSuiteThermostat", title: "Ecobee Thermostat(s)", required: true, multiple: true, submitOnChange: true)
input(name: "coolFanOnTime", type: "number", title: "Cooling Fan On Time (0-55 minutes)", required: false, submitOnChange: true, range: "0..55")
input(name: "heatFanOnTime", type: "number", title: "Heating Fan On Time (0-55 minutes)", required: false, submitOnChange: true, range: "0..55")
input(name: "fanOnlyOnTime", type: "number", title: "Fan Only Fan On Time (0-55 minutes)", required: false, submitOnChange: true, range: "0..55")
input(name: "theModes", type: "mode", title: "Change Fan On Time only when the Location Mode is", multiple: true, required: false)
}
}
}
def installed() {
initialize()
}
def updated() {
unsubscribe()
initialize()
}
def initialize() {
subscribe(thermostats, 'thermostatOperatingState', operatingStateHandler)
}
def operatingStateHandler(evt) {
log.info "${evt.device.displayName} Operating State changed to ${evt.value}"
if (!settings.theModes || settings.theModes.contains(location.mode)) {
// We're in the right mode
if (evt.value.contains('cool')) {
if (settings.coolFanOnTime) {
thermostats.each {
if (it.currentValue('fanMinOnTime') != settings.coolFanOnTime) {
it.setFanMinOnTime(settings.coolFanOnTime.toInteger())
log.info "Setting ${it.displayName}'s fanMinOnTime to ${settings.coolFanOnTime}"
}
}
}
}
else if (evt.value.contains('heat')) {
if (settings.heatFanOnTime) {
thermostats.each {
if (it.currentValue('fanMinOnTime') != settings.heatFanOnTime) {
it.setFanMinOnTime(settings.heatFanOnTime.toInteger())
log.info "Setting ${it.displayName}'s fanMinOnTime to ${settings.heatFanOnTime}"
}
}
}
}
else if (evt.value == 'fan only') {
if (settings.fanOnlyOnTime) {
thermostats.each {
if (it.currentValue('fanMinOnTime') != settings.fanOnlyOnTime) {
it.setFanMinOnTime(settings.fanOnlyOnTime.toInteger())
log.info "Setting ${it.displayName}'s fanMinOnTime to ${settings.fanOnlyOnTime}"
}
}
}
}
}
}
Is there a way to turn on the fan without having to hard code the minimum fan time in the piston?
Sure is - just use thermostat.currentValue("fanMinOnTime")
in your piston to get the value before you turn the fan on, then use `setFanMinOnTime(āminutesā) to set it afterwards.
Orā¦you can try this TEST VERSION of ES Thermostat. It should maintain the current fanMinOnTime
as follows:
- setFanMode(āonā), fanOn()
fanMinOnTime
is set to current value at time of call
- setFanMode(āoffā), fanOff()
- 'fanMinOnTime` is set to 0 (this is the only way to totally disable the fan)
- setFanMode(āautoā), fanAuto()
fanMinOnTime
is set to 0 (see also ācirculateā)
- setFanMode(ācirculateā), fanCirculate()
fanMinOnTime
set to current value, unless current value is (null) or 0 - thenfanMinOnTime
is set to 20 (default setting)
NOTE: This means that if you use fanOn(), you MUST use fanCirculate() when you want to end the āonā period and return back to thermostat-controlled circulation. If you call fanOff() or fanAuto(), the `fanMinOnTime will be set to 0, and automated circulation will ceaseā¦
You can get this TEST VERSION here: https://raw.githubusercontent.com/SANdood/Ecobee-Suite/master/devicetypes/sandood/ecobee-suite-thermostat.src/ecobee-suite-thermostat.groovy
Let me know if it works for youā¦
edit: So this is the piston I tested. The fan turned on, but stayed āfan on and holdingā. It didnāt seem that the resumeProgram() worked. Am I doing something wrong?
Is this with the test version of ES Thermosts that I provided?
Either way, try āset fan to circulateā instead of āresumeProgramā.
I did not try the test version. I prefer to wait until its pushed over to your github master, mostly because Iām lazy and will never know about updates if I just C&P code. However, if youād like for me to test it, Iād be more than happy to do so.
That said, I removed the resumeProgram and used āset fan to circā. That did not seem to help, the program stayed as āfan on and holdingā.
Please try the test version. If it works, Iāll push it over to master; if not, you can simply restore from the master.
Also relevant - what is your Ecobee cycle time? If itās 2 minutes or more, then your test will likely always fail because thereās too much time between cyclesā¦
That did not appear to work. When I set it back to circulate, the tstat showed the mode as āfan auto and holdingā.
Iām not sure what you mean by cycle time. For testing purposes, I have the fan set to turn on, wait 2 minutes, then set to circulate. And the minFanTime is set to 10 minutes.
āCycle timeā for Ecobee Suite Manager - how frequently it communicates with the Ecobee servers. This is set in Ecobee Suite Manager preferences. For your use case, I recommend setting it to 1 minute.
Then re-run your testsā¦
Also - please check the ES Thermostat device in the SmartThings Classic UI - it should reflect the changed fanMinOnTime in the 3rd box from the left just above the Fan iconsā¦ āCirculate N min/hrā. Watch to see if the number changes, and if the fan mode changes (left-most Fan icon).
If you donāt see changes, your test is trying to change things too quickly for the changes to be reflected to the Ecobee servers and backā¦
I set the cycle time to 1 minute. Then changed the piston to turn the fan on, wait 10 minutes, then set it to circulate.
The result was that it stayed in the āfan auto and holdingā mode.
Weirdā¦
Could you please run the test with Live Logging enabled, and look for any errors in ES Manager and/or ES Thermostat?
Thanksā¦