Thermostat Fan Recirculate

Hello All- I couldn’t find an app out there, but I was wondering if someone might already have or would be able to write one up for me? My problem is that my current thermostat does not have a recirculate mode for the fan. What I’m hoping to do is have a smartapp that can just turn the fan on at certain times of day for a specific amount of time. Let me know if you have any questions or ideas.

Thanks!
Jeff

1 Like

This can definitely be done.

Can you give me the parameters around which you want this app to do its thing?

@chevyman142000 @tslagle13 Here’s some code I’ve borrowed and tweaked that can be used as a basis for what you want (except the amount of time parameter):

https://github.com/constjs/SmartThings-Apps/blob/master/Programmable_thermo.app.groovy

1 Like

Thanks for the replies already guys! I guess my parameters are I don’t need a device type or anything…I already have my 3M-50 added to SmartThings and working. I’m just looking for an app that can toggle the fan on to mimick a thermostat that has a recirculate mode. I would like to be able to set the time it comes up and tell it to run for say hour, hour and a half…something like that. I think it would be cool to be able to do multiple schedules though so that maybe I have a different one for the weekends and maybe a second schedule for sometime during the workday. Let me know if that sort of answers your question.

Thanks again!!
Jeff

So you just want to be able to say come on xyz time and run this long?

Or come on every X hours and run for this long?

Yes, the first option sounds like the best!

1 Like

FYI, I just won an auction on ebay for a new Honeywell RTH9580WF thermostat. Don’t put too much time into this smartapp if you haven’t already as this thermostat has the recirc function built in. I very much appreciate your help on this though!

Jeff

1 Like

Turning the fan on for x min every hour with a mode selection would be useful to me as well. I have my nest fan running (not with ST) 15 min every hour but I have to choose the start and end times. I would rater do it in “Night” mode.

2 Likes

I’ve been thinking about doing something like this as well. It can get stuffy in our master bedroom at night. I’d love to be able to run the fan on the Nest for 15 mins any time the CO2 level goes over 1000, but I’m not quite sure how to get at the CO2 level since it isn’t one of the standard capabilities.

ST programming gods, how do you access the custom capabilities in a device type? I see it listed in the IDE, so can I just call “capability.carbonDioxide”?

That’s actually a really good idea! I have my Netatmo connected and it reports the CO2.

Here’s another way to look at this . . .

If the fan is running because the system is heating or cooling often enough, you probably don’t need to worry about a recirculation mode. So, maybe what you want is a SmartApp that turns the fan on for x minutes if it hasn’t otherwise been on anyway for a heating or cooling call in y minutes.

I think this could be done in a SmartApp that is subscribed to the thermostatOperatingState attribute. You could watch for ‘idle’ and schedule a handler y minutes in the future to run the fan (switch to fan on mode) for x minutes. If a thermostatOperatingState that involves fan operation pops up in the meantime, you can unschedule the handler and again start watching for ‘idle’.

I’m not sure I know how to execute this in code as I am fairly new to this but I’m pretty sure this is quite possible.

@geko - I found this in your 3M Filtrete thread. I wanted to share with you my thought for how automatic recirculation could/should work. See next post up on this thread.

You’d have write a smart app for that. I also want to automate fan cycling, so it’s on a to-do list, but I cannot give you an estimate.

I would be interested in contributing to the extent I can. I am new here and still riding the steep part of the learning curve.

You’re on the right track with respect to the app’s business logic. You can look at my “Remind to Lock” app as an example: https://github.com/statusbits/remindtolock. It has both event subscription and task scheduling that you need for this kind of app.

I have the basic app ready to go, but need to build in some logic so it doesn’t turn the fan off when its in “heating” mode etc… stay tuned.

@tslagle13 - are you trying to implement the logic I suggested? I don’t think you have to worry about turning the fan off during heating mode. I think all you would be doing is switching from fanOn() and fanAuto(). In HVAC-speak, ‘auto’ just means the fan is off unless it needs to be on for a heating or cooling call. I don’t think you can turn off the fan during a call even if you wanted. The thermostat and/or the controls in the equipment handle this.

You are correct. But on my hvac if i move from on to auto while it’s heating it will turn the fan off. (it isn’t smart enough to do the logic apparently, so im buliding it in.) along with all others in this thread.

. . .hmmmm, well that ain’t right. Well. It is what it is and I can see no drawback to forcing the fan mode to stay ‘on’ until the end of a call if its on at the start of the call. Looking forward to seeing what you come up with!

I have been working on this for a little while. This is my second SmartApp so feedback would be great!

Here is my Circulate HVAC SmartApp: http://goo.gl/a3lkMt

Seems to work for me. The heat or AC kicks in and it kills the cron job.

bs

@midyear66, first, big disclaimer: at 2, you have done one more SmartApp than I so this may be the blind leading the blind . . . .
In this code:

. . . it seems like, once you hit line 96 and ‘unsubscribe()’, there would be no more triggers and nothing more would happen.

What I would do (and, remember the disclaimer above) would be to subscribe and remain subscribed to thermostatOperatingState. Watch for ‘idle’ and ‘heating’ or ‘cooling’ and execute your logic from there.

Also, in the code I pasted above, I’m not sure how the compiler figures out if the second ‘if’ statement is supposed to nest under the first or executed in series. Seems like you need some closures in your code.

You are correct! Thanks! I changed the git file. Please have a look!