Piston to circulate furnace fan


I am trying to create a rule that will turn on the furnace fan and circulate air for 5 minutes, if I’m home and the furnace has been idle for 60 minutes. What I’ve created here does nothing. Something tells me my triggers or conditions aren’t quite right. Can someone set me on the right path?

All the logs I have:
9/8/2017, 4:28:22 PM +519ms
+1ms ╔Starting piston… (v0.2.0e7.20170906)
+143ms ║╔Subscribing to devices…
+154ms ║║Subscribing to ecobee Thermostat.thermostatOperatingState…
+203ms ║╚Finished subscribing (62ms)
+233ms ║Comparison (string) :9f34787902a666d5a96a8b824ccc1c8b: is_any_of (string) :9f34787902a666d5a96a8b824ccc1c8b:,:3b318b1c0198e4edcc94624cf5fbf466: = true (2ms)
+257ms ║Comparison (enum) idle stays_away_from_any_of (string) cooling,fan only,heating = true (11ms)
+259ms ║Cancelling condition #8’s schedules…
+260ms ║Cancelling condition #2’s schedules…
+277ms ╚Piston successfully started (277ms)


You have this in a while loop. If you move that if statement outside of the while loop and add a condition of location mode is any of home or night then I think you will get the result you are looking for.


I ditched the while loop, but things still aren’t happening. Is there a way to see what’s going on under the hood, like the ‘stay away from any’ timer?

9/8/2017, 8:11:30 PM +536ms
+0ms ╔Received event [Home].test = 1504919490528 with a delay of 6ms
+132ms ║RunTime Analysis CS > 24ms > PS > 81ms > PE > 29ms > CE
+141ms ║Runtime (36503 bytes) successfully initialized in 81ms (v0.2.0e7.20170906) (140ms)
+142ms ║╔Execution stage started
+169ms ║║Comparison (enum) idle stays_away_from_any_of (string) cooling,fan only,heating = true (9ms)
+182ms ║║Adding a timed trigger schedule for condition 8
+187ms ║║Cancelling condition #8’s schedules…
+188ms ║║Condition #8 evaluated false (38ms)
+189ms ║║Cancelling condition #9’s schedules…
+190ms ║║Condition group #9 evaluated false (state changed) (41ms)
+199ms ║╚Execution stage complete. (57ms)
+205ms ║Setting up scheduled job for Fri, Sep 8 2017 @ 9:11:30 PM CDT (in 3599.978s)
+221ms ╚Event processed successfully (221ms)


I can tell you that i haven’t had much luck using thermostatoperatingstate. I once had a piston to tell me when it changed, but it never worked. Not webcores’ fault. I think it’s the DH that my Honeywell thermostat uses. My ac would be running, but no changes were ever noted to the thermostatoperatngstate. When idle, I got the same results…

EDIT: I believe that an operating state of Heating simply means you have it set on Heating versus set to cooling. When the system kicks on to maintain a certain temp, I don’t believe this will affect the thermostatoperatingstate. When you switch your system from heat to cool or vice versa (or off), then I think that’s when you’ll get the thermostatoperatingstate to change.


I have the ecobee4 and tested your theory regarding ‘thermostatoperatingstate’ and not reporting to a piston by creating the following rule:

I set the thermostat temp down to kick on the AC and received the text message as expected. I set it back to normal temp and also received the expected text message. So that part is working ok.

I think my problem may circle around the transition from ‘away’ to ‘home’ doesn’t trigger anything and so the timer never starts. I have some more playing to do…


Thought I would reply to this with my final fully working piston, in case someone else tries to do something similar. I basically re-wrote the whole thing into ‘while true’ statements. I found that to be the most efficient solution that I could come up with, and could do away with any kind of looping statements. It works as a great solution to make the furnace fan circulate after 54 minutes of HVAC inactivity and ONLY when I’m home.


And the ecobee fan/AC runtime history using this piston. Thanks to ecobee and all the smart folks who have made the thermostat a reliable product and able to query using SmartThings when it changes to heat, AC, fan ON or fan IDLE!


Hey, this is great, and I’ve been using if fully for about a week, I have two ecobee’s and would like to just have one piston. Anyone know if this could be done to use like current device? I dont want to turn on the upstairs fan if the downstairs is idle, or visa versa. I can create two pistons if needed, It’s not that big of a deal, just like to optimize if possible


Out of curiosity, why webCore instead of just native ecobee functionality?

I use a lot of duct tape and baling wire myself, but prefer simple where I can.


I would use the ecobee built in minimum fan runtime, but I am gone from the house for extended periods of time and find it a waste of electricity to have it continue to circulate even while nobody is home. With the piston it only circulates when someone is home.


This is awesome, thank you for sharing! Any idea why I can’t seem to be able to select “Vacation Mode” in this piston? I see night, away, and home…