3M Filtrete Thermostat (RTCoA CT-50)

Forum rules

This is a legacy forum which is locked for new topics. New topics should be started in one of the other forums under Extending Indigo

Posted on
Mon Feb 27, 2012 11:03 am
jay (support) offline
Site Admin
User avatar
Posts: 18200
Joined: Mar 19, 2008
Location: Austin, Texas

3M Filtrete Thermostat (RTCoA CT-50)

We're releasing proof-of-concept plugin for the 3M Filtrete WiFi thermostat (model 3M50) - it's the $100 WiFi thermostat you can get at Home Depot. The company that actually makes the thermostats is Radio Thermostat Corporation of America (RTCoA) and they have some other models as well but we're only supporting the 3M50 (aka CT-50). We aren't adding the plugin to the standard Indigo release because of the non-trivial problems we experienced while developing the plugin. To summarize, the old adage "you get what you pay for" seems to apply to this thermostat. Read the long version of our experiences with this thermostat down below for details.

For those that want to just start using the plugin, you can download it from the File Library. Some things that you should be aware of (all are limitations in the thermostat and it's WiFi adaptor so we can't change the behavior until the underlying problems are fixed):

  1. This thermostat works differently from the Venstar (if you're used to that one): the thermostat is always in program mode - so it will adjust according to the program that's active. We've provided a custom action that will allow you to specify the programs.
  2. AUTO mode is very unreliable. Temporarily changing setpoints by hitting the up/down button on the thermostat itself or in the controls in Indigo Touch and IWS will change the mode from AUTO to whatever the thermostat last was doing (cool or heat). We highly recommend just avoiding AUTO and setting the thermostat to HEAT and COOL as appropriate for the conditions.
  3. When you adjust the setpoints via the up/down buttons on the thermostat itself, we may not be able to see those changes.
  4. When you adjust the setpoints via the up/down buttons on the thermostat, in the UI, or by using the standard thermostat actions, that will change the temporary setpoints - in other words, the setpoints will only be active until the next program change boundary is crossed.
  5. The above rule is not true if you set the thermostat to HOLD - which you can do via custom actions. Bottom line - if you want to change the setpoints then make them stick forever, change them then turn on HOLD and they should stay that way until you turn off HOLD.
  6. Changes to the thermostat and status updates are relatively slow (about every 30 seconds). The WiFi adaptor in the thermostat is underpowered and it will lock up quite quickly if you try to ask it to do too much. So, if you do multiple changes to the thermostat in a short time, those commands will be spaced appropriately so that we won't lock up the adaptor. You'll periodically see timeout errors in the Event Log with multiple retries spaced further apart when it gets confused.
  7. RTCoA is releasing firmware updates - at some point in the future they may expose a way via the API to update firmware and we'll consider adding it to the plugin. For the time being, you will get new firmware pushed to your thermostat if you have it's cloud capabilities activated so we recommend that you do that even if you don't intend to use their web UI. Contact RTCoA for details.

Because of the problems we've experienced with this thermostat, we can't in good conscience recommend it over the Venstar. We really wanted to but it is just not completely reliable yet. And because of this we won't be offering the same level of support as we do for the built-in devices or the included plugins - thus the proof-of-concept moniker (vs Alpha or Beta). We'll try to help when there's an issue but because of the unreliable nature of the thermostat it will be really hard to put much more effort into it at the moment given all of our other priorities.

Perhaps some day it will be more reliable - if/when that happens we will consider including it with the standard Indigo install and offer the same level of support as we do with all the included plugins. We'll also look at supporting the other RTCoA thermostats at that time.

--------------------------
-- The long story --
--------------------------

After hearing about the 3M Filtrete WiFi thermostat (model 3M50) available for $100 at Home Depot - we got understandably excited. The prospect of a cheap thermostat that didn't require a separate interface to control would mean that Indigo is even more valuable to those who don't have existing HA technologies. So, we immediately began doing some research and found the API documents on their website. They looked quite complete and well documented. SCORE!

The company that actually makes the thermostats is Radio Thermostat Corporation of America (RTCoA) and they have some other models as well. Feeling pretty confident that we could kick out a plugin for this thermostat pretty quickly, and having just finished up the thermostat implementation in the API, we thought this would be the perfect plugin to work on immediately. I ran over to Home Depot and purchased one. I got it home and began experimenting with it using curl.

And that's where the problems began.

The first approach that we were going to take was to have the thermostat behave like the Venstar. It's what we're familiar with and seemed the right approach. Specifically: keep the thermostat in non-program mode (they call it absolute mode), where Indigo controls it directly. We could also add in program mode since the API supports editing programs, but since we don't do that on the Venstar we would probably leave that for later.

The first major problem we found was that the thermostat didn't actually support AUTO when in non-program mode. That is, you could have the mode of the thermostat set to HEAT or COOL - but when you set it to AUTO (where both heat and cool setpoints were active) it simply didn't work. Exacerbating the issue is that you can't actually get the setpoints from the thermostat unless the hvac system is actually running - so you can't get the heat setpoint unless the heater is running. Same for cool.

At this point, I was already a couple of weeks into it, so we discussed it and decided that the right approach with this thermostat would be to just mimic the physical UI behavior - so stay in program mode all the time. Any setpoint adjustments with the up/down arrows (in the Mac client, IWS, and Indigo Touch) would cause a temporary change - until the next program boundary was crossed the temporary setpoint would be in effect. After the program boundary was crossed it would be back on the program. We would add the ability to set the programs through a custom action that would make the setpoint changes permanent. And AUTO would work as expected. So, with the new direction, I began coding in earnest.

Unfortunately, there were more issues that I'd yet to run across. AUTO doesn't seem to work particularly reliably when in program mode either. It seems to want to cross a program boundary before it will change from heat to cool and vice versa (though going from cool to heat works less frequently). Also, the up/down button on the thermostat itself as well as setting the temporary setpoint via the API (which mimics the button presses) will switch the thermostat from AUTO into whichever mode was the last mode used. So, for instance, if your HVAC system was cooling (but then turned off) and you hit the UP button, it changes the thermostat to COOL and sets the temporary setpoint. So now you're in COOL instead of AUTO. I believe the fundamental problem here is with the thermostat itself (rather than the WiFi adaptor) - it doesn't appear to actually have 2 active setpoints - only 1. And for AUTO, they hacked in some way to switch between off/heat/cool. Not sure that will ever be able to be fixed via firmware patch.

Another problem is one I mentioned earlier - if the setpoint changes at the thermostat, you can only get the changed setpoint if the compressor or heater is actually running. Any other time you can't get the setpoint. I did in fact get an email from their support guy saying that a new version of the firmware would solve that issue. He sent it to me and I installed it but it doesn't appear to be fixed. It is nice to be able to upgrade the firmware for the WiFi adaptor. So, as a workaround we attempt to get the setpoints when they are initially empty (when you first add a thermostat) by reading the programs for the current day and getting what it should be (though if it's in override you can't tell).

However, this brings us to the last big problem: you can't actually communicate with the thermostat too often or you'll hang it up. Apparently the WiFi adaptor is pretty underpowered and just can't handle too many requests. They recommend at least 15 seconds between each communication - I found that 30 causes fewer issues.

There are other issues which are less major (the reboot command hangs the thermostat rather than rebooting), but the main point is that without actually having one to test with we would have never figured out what works and what doesn't. That's the reason why we're only supporting the 3M50 (aka CT-50) model thermostat - it's the only one we had to test with and by their own admission the firmware for the other thermostats is different.

Jay (Indigo Support)
Twitter | Facebook | LinkedIn

Posted on
Mon Feb 27, 2012 7:42 pm
bob.banks offline
Posts: 27
Joined: Feb 27, 2012

Re: 3M Filtrete Thermostat (RTCoA CT-50)

Thanks Jay. Plug-in didn't pickup the stat during the first scan but a rescan found it. I'm used to this stat's issues having used it with another home automation suite.

When attempting to change the Heat Setpoint, I received the following error message in the event log. Appears to be a plug-in issue and not hardware related.

Radio Thermostat Error Error in plugin execution ExecuteAction:

Traceback (most recent call last):
File "plugin.py", line 384, in actionControlThermostat
<type 'exceptions.AttributeError'>: 'module' object has no attribute 'kThermostatActoin'

Also, when attempting to set the fan mode to "Always On"

Radio Thermostat Error An unknown error occurred in thermostat "HVAC - Living Room":
Traceback (most recent call last):
File "/Library/Application Support/Perceptive Automation/Indigo 5/Plugins/Radio Thermostat.indigoPlugin/Contents/Server Plugin/commThread.py", line 408, in run
elif action.actionMode == indigo.kHvacMode.AlwaysOn:
AttributeError: type object 'kHvacMode' has no attribute 'AlwaysOn'

Posted on
Mon Feb 27, 2012 8:03 pm
matt (support) offline
Site Admin
User avatar
Posts: 21411
Joined: Jan 27, 2003
Location: Texas

Re: 3M Filtrete Thermostat (RTCoA CT-50)

It looks like you might not be running the latest version of Indigo (5.0.4). Try updating it and I think those errors will go away.

Image

Posted on
Tue Feb 28, 2012 10:14 am
jay (support) offline
Site Admin
User avatar
Posts: 18200
Joined: Mar 19, 2008
Location: Austin, Texas

Re: 3M Filtrete Thermostat (RTCoA CT-50)

Matt's right about the second error, but the first error is a typo. I've fixed it and will release an updated plugin in the next hour. Just redownload it from the File Library.

Jay (Indigo Support)
Twitter | Facebook | LinkedIn

Posted on
Fri Mar 09, 2012 9:53 pm
bob.banks offline
Posts: 27
Joined: Feb 27, 2012

Re: 3M Filtrete Thermostat (RTCoA CT-50)

I confirmed that I've been running 5.0.4. Error still occurring when setting fan mode to "always". Here's a capture of the Event Log with debugging on:

Radio Thermostat Debug logging enabled
Ignored device "HVAC - Living Room" action request (communication is disabled)
Radio Thermostat Debug deviceStartComm: starting thread for 'HVAC - Living Room'
Radio Thermostat Debug deviceStartComm: adding device "HVAC - Living Room" to the active thread queue
Radio Thermostat Debug commThread:run - processing action queue for thermostat "HVAC - Living Room"
Radio Thermostat Debug commThread:run - Action queue processing complete
Radio Thermostat Debug commThread:run - getting status for thermostat "HVAC - Living Room"
Radio Thermostat Debug commThread:messageThermostat - sending GET to /tstat/ with data: None
Radio Thermostat Debug commThread:messageThermostat - received response to request (status code): 200
Radio Thermostat Debug commThread:messageThermostat - reading data
Radio Thermostat Debug commThread:messageThermostat - loading JSON
Radio Thermostat Debug commThread:messageThermostat - reply: {u'fstate': 0, u'temp': 71.5, u't_heat': 72.0, u'tmode': 1, u'fmode': 0, u'time': {u'minute': 50, u'day': 4, u'hour': 22}, u'override': 0, u'hold': 0, u'tstate': 0, u't_type_post': 0}
Radio Thermostat Debug commThread:messageThermostat - returning status object: {u'fstate': 0, u'temp': 71.5, u't_heat': 72.0, u'tmode': 1, u'fmode': 0, u'time': {u'minute': 50, u'day': 4, u'hour': 22}, u'override': 0, u'hold': 0, u'tstate': 0, u't_type_post': 0}
Radio Thermostat Debug commThread:run - got status reply
Radio Thermostat Debug commThread:run - processing status reply
Radio Thermostat Debug commThread:run - finished setting built-in state values
Radio Thermostat Debug commThread:run - finished setting custom state values
Radio Thermostat Debug commThread:run - resetting self.timeToNextComm to 15 seconds
SQLite exception logging device change: float() argument must be a string or a number
Radio Thermostat Debug commThread:run - next comm in 10 seconds
Radio Thermostat Debug commThread:run - next comm in 9 seconds
Radio Thermostat Debug commThread:run - next comm in 8 seconds
Radio Thermostat Debug commThread:run - next comm in 7 seconds
Radio Thermostat Debug commThread:run - next comm in 6 seconds
Radio Thermostat Debug commThread:run - next comm in 5 seconds
Radio Thermostat Debug commThread:run - next comm in 4 seconds
Radio Thermostat Debug commThread:run - next comm in 3 seconds
Radio Thermostat Debug commThread:run - next comm in 2 seconds
Radio Thermostat Debug commThread:run - next comm in 1 seconds
Radio Thermostat Debug commThread:run - processing action queue for thermostat "HVAC - Living Room"
Radio Thermostat Error An unknown error occurred in thermostat "HVAC - Living Room":
Traceback (most recent call last):
File "/Library/Application Support/Perceptive Automation/Indigo 5/Plugins/Radio Thermostat.indigoPlugin/Contents/Server Plugin/commThread.py", line 408, in run
elif action.actionMode == indigo.kHvacMode.AlwaysOn:
AttributeError: type object 'kHvacMode' has no attribute 'AlwaysOn'

Radio Thermostat Debug commThread:run - getting status for thermostat "HVAC - Living Room"
Radio Thermostat Debug commThread:messageThermostat - sending GET to /tstat/ with data: None
Radio Thermostat Debug commThread:messageThermostat - received response to request (status code): 200
Radio Thermostat Debug commThread:messageThermostat - reading data
Radio Thermostat Debug deviceStopComm: stopping thread for 'HVAC - Living Room'
Radio Thermostat Debug commThread:messageThermostat - loading JSON
Radio Thermostat Debug commThread:messageThermostat - reply: {u'fstate': 0, u'temp': 71.5, u't_heat': 72.0, u'tmode': 1, u'fmode': 0, u'time': {u'minute': 50, u'day': 4, u'hour': 22}, u'override': 0, u'hold': 0, u'tstate': 0, u't_type_post': 0}
Radio Thermostat Debug commThread:messageThermostat - returning status object: {u'fstate': 0, u'temp': 71.5, u't_heat': 72.0, u'tmode': 1, u'fmode': 0, u'time': {u'minute': 50, u'day': 4, u'hour': 22}, u'override': 0, u'hold': 0, u'tstate': 0, u't_type_post': 0}
Radio Thermostat Debug commThread:run - got status reply
Radio Thermostat Debug commThread:run - processing status reply
Radio Thermostat Debug commThread:run - finished setting built-in state values
Radio Thermostat Debug commThread:run - finished setting custom state values
Radio Thermostat Debug commThread:run - resetting self.timeToNextComm to 15 seconds
Radio Thermostat Thermostat "HVAC - Living Room" finished shutting down
SQLite exception logging device change: float() argument must be a string or a number

Posted on
Fri Mar 09, 2012 11:48 pm
gtreece offline
Posts: 171
Joined: Sep 26, 2011

Re: 3M Filtrete Thermostat (RTCoA CT-50)

There's a typo in line 408 of commThread.py. instead of

elif action.actionMode == indigo.kHvacMode.AlwaysOn

it should be

elif action.actionMode == indigo.kFanMode.AlwaysOn

I don't know if that completely solves the problem, but it's definitely why the error message about line 408 is coming up.

Posted on
Sat Mar 10, 2012 9:48 pm
gtreece offline
Posts: 171
Joined: Sep 26, 2011

Re: 3M Filtrete Thermostat (RTCoA CT-50)

I'm also seeing the

"SQLite exception logging device change: float() argument must be a string or a number"

messages any time a value or setting changes on a thermostat. Twice now, I've also had (communications is disabled) to all but one thermostat. I've had to go back to edit the devices and re-check the box to allow Indigo to communicate with them. I'm not familiar yet with the plugin process, to know what triggers Indigo to write data to sqlite.

I'm wondering if the two are related. I can't seem to find any information about how the check box on the device setup could change on it's own.

Posted on
Sun Mar 11, 2012 7:46 pm
gtreece offline
Posts: 171
Joined: Sep 26, 2011

Re: 3M Filtrete Thermostat (RTCoA CT-50)

Changing both kCycleSkips and kLongCycleSkips to 300, in commThread.py, seems to have resolved the communication is disabled issue for me. I may even increase it to a longer time. From a thermostat, I probably don't need an update more than once a minute.

I have not figured out yet, what is feeding bad data to sqlite.

Posted on
Tue Mar 13, 2012 5:06 pm
jay (support) offline
Site Admin
User avatar
Posts: 18200
Joined: Mar 19, 2008
Location: Austin, Texas

Re: 3M Filtrete Thermostat (RTCoA CT-50)

Thanks for the feedback.

1) Yes, that was a copy/paste error. I'll fix it in the next release.
2) We'll look into this one - I suspect it's a bug in the SQL logger rather than in the plugin.
3) I fine-tuned the communication to what I'm experiencing here with the one thermostat I have - I had a feeling that it would behave differently on different networks. I'll probably change kCycleSkips and kLongCycleSkips to plugin configuration options so it's easier to configure for different networks. The comm issues around this thermostat are quite bothersome. Increasing time is acceptable for some people but others will want as short a time as possible between updates.

Jay (Indigo Support)
Twitter | Facebook | LinkedIn

Posted on
Tue Mar 13, 2012 7:32 pm
matt (support) offline
Site Admin
User avatar
Posts: 21411
Joined: Jan 27, 2003
Location: Texas

Re: 3M Filtrete Thermostat (RTCoA CT-50)

The SQL Logging error will be fixed in Indigo 5.0.5. Note that problem is specific to the SQL logging client and doesn't cause any problems with the thermostat plugin or Indigo Server.

Image

Posted on
Tue Mar 13, 2012 11:09 pm
gtreece offline
Posts: 171
Joined: Sep 26, 2011

Re: 3M Filtrete Thermostat (RTCoA CT-50)

Thanks guys. The plugin is working to what I need at the moment, and I appreciate your time to put it together and make it available.

I can't really figure the communication issue. I run Zabbix, and I also have it checking the thermostats, and logging temps. While the Indigo plugin was saying that the thermostats were not responding at all, zabbix was happily logging away without complaint or lost data points. The iPhone app from Radio Thermostat also never seemed to lose connection to the thermostats, and continued to register temp changes while the plugin was saying that the thermostats were not responding.

Posted on
Mon Sep 24, 2012 8:06 pm
hoffy97 offline
Posts: 2
Joined: Sep 24, 2012

Re: 3M Filtrete Thermostat (RTCoA CT-50)

Hey, anyone still playing with this? I was going to play with the plugin, but for complicated reasons, my thermostats are on a different subnets. I can get to them through port mapping on my router, so they are on the same subnet that way, but the plugin can't find them that way.

Is there any way to specify these addresses manually? I wrote some perl scripts and a CGI web interface to get to them so I can access them directly instead of through the cloud, but would prefer to have access to them through Indiglo without spending money on the Venstars.

Anyway, just curious if there's anyway to do this or anyone who might know. I don't mind digging in to the code if that's what it takes, but not sure if this is compiled or something else.

Posted on
Mon Sep 24, 2012 9:24 pm
jay (support) offline
Site Admin
User avatar
Posts: 18200
Joined: Mar 19, 2008
Location: Austin, Texas

Re: 3M Filtrete Thermostat (RTCoA CT-50)

The source is all there inside the plugin bundle.

At some point we may circle back to this plugin but its going to be a while. Any patches are certainly welcome. You should be able to modify it to accept an IP address directly.

Jay (Indigo Support)
Twitter | Facebook | LinkedIn

Posted on
Tue Sep 25, 2012 8:46 pm
hoffy97 offline
Posts: 2
Joined: Sep 24, 2012

Re: 3M Filtrete Thermostat (RTCoA CT-50)

Yeah, saw that it's all open. Now I just have to learn Python... :)

I'll do some digging and see what I can figure out.

Thanks

Page 1 of 1

Who is online

Users browsing this forum: No registered users and 1 guest

cron