How to replicate the Ecobee Minimum FAN Runtime

I have an Ecobee 3 in a rental unit (nicer and simpler user UI than CT100). One feature that we like about it is being able to set a minimum fan runtime so during those days were the temperature doesn’t kick off the HVAC you can still move/filter the air. Has anyone had success writing luup or other code to replicate this on the CT100? Thanks - Jack

I have reproduced this behavior in some what even more sophisticated fashion but it is essentially a custom plugin for which I never created an interface for you to interact with. Maybe if I get some time I will do it but it may be overkill for what you are looking for as I coordinate motion, windows/doors and HVAC vent along with temperature in each room and outdoor to determine what to do (which vents to close, which to open to how much and whether to turn on heat/cool or simply recycle the air with the fan from upstairs to downstairs and vice versa.)

You can do this in PLEG and probably reactor.

My pleg is rusty but essentially you would set a trigger on exterior temperature range where you want to run the fan (like 65-75F) using either weather app or your own sensor.

You would add other triggesr for HVAC on and HVAC off, and hvac fan only mode.

Your fan condition would require the exterior temp to be true, HVAC off, and that hvac has been off for >(x) time.

That would be the trigger for a scene that runs the fan.

A second scene will turn off the fan.
It will run when HVAC is on, HVAC in fan only mode, and EITHER exterior temp to be false OR hvac fan only time > (y) time.

Pleg has a way to capture the time a trigger became true so you can use that to get durations. It’s been a year since I used pleg so I am not even going to try and write the code.

The Reactor version of this could be similar to that described for PLEG (i.e. you could use the same approach in logic), but ReactorSensors also keep a useful accumulator of their tripped time–so if one makes a ReactorSensor trip when the AC is running, it accumulates actual runtime. One can then use (for example) a two-hour interval, and if the fan has run for fewer than X minutes during each interval, trigger an activity to run the fan for Y minutes.

Just as an example/prototype, to make sure the fan runs at least 15 minutes every two hours, Reactor conditions could look something like this:

The first condition will cause the ReactorSensor to trip when heating or cooling is running. When the ReactorSensor is tripped, the runtime accumulator will be adding up time.

We can use an expression to grab the accumulated runtime and convert to minutes:

Activities, very basic, just reset the accumulator and run the fan for 15 minutes, like this:

This is just the bones, not all of the fit and finish, but a functional starting point/illustration.