[RELEASE] Honeywell TCC Total Connect Comfort Parent/Child Drivers

Today I'm releasing a new version of the HoneywellThermo-TCC driver.
It's main purpose is for multiple thermostats on one account as discussed:

The original driver uses an old, perhaps obsolete, certainly deprecated, unpublished Honeywell Cloud API. The Honeywell server(s) reject automated logins regularly. The solution seems to be "don't hit the login server too rapidly". Adding multiple copies of the original driver would certainly allow logins virtually on top of each other, causing more rejects than a single thermostat would encounter.

The goal of converting the original driver to Parent / Child was to take advantage of a single code thread for any number of child thermostats. Collisions in the login path are avoided. There's no mechanism to prevent Honeywell from rejecting connections, but we don't have to hammer the connection either. :smiley:

A significant upgrade in this driver is the accumulation of changes into one message to Honeywell. If you want to change a temperature setpoint by 4 degrees, for example, you can click the button 4 times and after 1.6 seconds of no more clicks, the the message is sent.

This driver is available via HPM:

Screen Shot 2022-05-10 at 10.56.00 PM

and via Import using these two URLs:
Parent:
https://raw.githubusercontent.com/HubitatCommunity/HoneywellThermoParent/main/HoneywellThermoParent.groovy

Child:
https://raw.githubusercontent.com/HubitatCommunity/HoneywellThermoParent/main/HoneywellWiFiThermostatComponent.groovy

After adding the driver code using either of the methods above, follow these instructions:

Honeywell Thermo Parent / Child

This works by contacting Honeywell over the Internet using your Honeywell ID/PW and Thermostat ID. Yes, CLOUD.

  • Import or copy both drivers into Driver Code section.
  • Create a Virtual Device and select the Honeywell Thermo Parent driver from User section of the drop down. The initial Child will be created.
  • Add your Honeywell Username and password to the parent. Then add the Honeywell Device ID to the Child.
  • To add a another thermostat, click the Add Thermostat button in the parent and then add a different Honeywell Device ID to the new Child.

If you never setup TCC, then you won't have that info. Browse to:

https://www.mytotalconnectcomfort.com/portal/

Create an account if you don't have one, or just login.

The Honeywell Device ID is found as the last 6 or 7 digits on the end of the TCC URL after login.

5 Likes
v2.0.8   corrected "refresh()" in "refreshFromRunin" to be "componentDoRefresh()"
v2.0.7   corrected "nextChild" to correctly increment as a number, not ascii increment
 	      used the same split("[-_]") string to prevent future typos
v2.0.6   added Delete Outdoor Child and Delete Thermostat
	       fixed cron string to run the whole hour (x mod y / y) 
v2.0.5   login returns true/false allowing refresh to retry login
1 Like

This has been working great. Thanks for the updated driver!

1 Like

@csteele - I just installed the driver and it looks like it is working well. A quick question for you - I currently have the driver set for 5 minute updates (see below). If I don't see and entry for "thermostatOperatingState" or "fanOperatingState", does that mean that there is no change in the fan/thermostat status?

Looking at the log entries above, can I assume that at 6:27PM, the thermostat and fan were idle. Then they both turned on at 6:37 and turned off at 6:52. I know the status at the times may not be exact, but should be correct to within 5 minutes?

Thanks for your help and also, thanks for the quick turnaround on publishing this updated driver!

Hubitat filters duplicate events (isStateChange).

If the AC comes on, then off in that 5 min poll cycle, then it would get missed.

1 Like

Thanks - I'm just trying to get a rough idea of how long/when the AC is running and plot it against the power draw from my Tesla Solar panels/battery/grid. If I miss a quick cycle, I don't think it will matter much.

Just noticed something strange...

I have my refresh set at 5 minutes, but it seems to be scheduling the refresh every 20 minutes? It should have updated at 8:03 PM, but there was no change. I thought it could be because Honeywell rejected the connection, but the next scheduled run is exactly 20 minutes after the last update and the time I took the screenshot was 8:06 PM

Refresh setting:

Scheduled Job and Last activity:
Screen Shot 2022-05-14 at 8.05.24 PM

State variables and current time:

I had mine running at 3 mins, so I switched it over to 5 mins and at least the first cycle is right:

Screen Shot 2022-05-14 at 8.32.57 PM
Screen Shot 2022-05-14 at 8.32.46 PM

They all show at 8:32. Save Preferences was clicked at 8:27, which means the cycles should be every :x7 and every :x2 in my case.

Please be reminded that only the Current States section of the Device Info page is dynamic. Scheduled Jobs won't refresh "magically."

Edit:
Another cycle ran and after manually refreshing the page, it still looks correct:

Screen Shot 2022-05-14 at 8.39.15 PM
Screen Shot 2022-05-14 at 8.39.09 PM

Ok, I understand what this is. It's cron :slight_smile:

What I'm going to have to do is "round up". Cron is amazing, except when it isn't. :slight_smile:

1 Like

v2.0.6 added Delete Outdoor Child and Delete Thermostat
fixed cron string to run the whole hour (x mod y / y)

1 Like

I have a few of this error in logs.

[error] Bad manifest for HoneywellThermo-TCC. java.lang.NullPointerException: Cannot get property 'betaLocation' on null object Please notify the package developer.

what's generating that error? HPM? "Manifest" is a word I instantly associate with HPM. "betaLocation" is another. I'm not intending that there be any "beta" for that driver, but I'll look at the HMP manifest to see if there's a typo.

Edit: Typo indeed. Fixed.

Oops, sorry to include that. Yes it is HPM.

I had simply pasted the releasenote in. There were quotes inside the quote. Easy fix, easy to miss too. :slight_smile:

"releaseNotes": "v1.3.21 Added 'accumulation' feature to setStatus.\n login returns true/false allowing get/setStatus to retry login",

those quotes around accumulation were the problem, I suspect. I changed them from double to single as shown.

1 Like

v2.0.6 has added two DELETE buttons.. they are labeled CAUTION, but they are just as easy to click as any other button. They do what they say, instantly with no additional "Are you sure?"

Screen Shot 2022-05-15 at 11.27.19 AM

You've been warned !!

It's not hard to recover from, if you accidentally delete the Outdoor children, the next poll will recreate them BUT any automation you had will be broken. If you accidentally delete the whole thermostat (includes the Outdoor children as well) just add a new thermostat and re-select the 6 options. :smiley:

What do you think i did wrong?

I've released an ultra minor update -- because I am hoping I can call it "done". I went through the code catching things that might bite me (or you) in the coming months.

v2.0.7   corrected "nextChild" to correctly increment as a number, not ascii increment
         used the same split("[-_]") string to prevent future typos

The increment thing will bite you when you hit your 11th Thermostat, so for all of you with that many thermostats, you'll want this fix :smiley: :smiley:

@csteele - I saw the following error in the log this morning:

groovy.lang.MissingMethodException: No signature of method: user_driver_csteele_Honeywell_Thermo_Parent_988.refresh() is applicable for argument types: (com.hubitat.app.ChildDeviceWrapper, java.lang.Boolean) values: [Guest Room Thermostat, true] Possible solutions: every() on line 852 (method refreshFromRunin)

Everything seems to be working correctly, so not sure if this is a "normal" error or something to be concerned about. Below is a screenshot of the log entries related to the thermostats around this time

It's a real typo, caught.

It's part of @kahn-hubitat recovery that I was never able to see happen. I've updated github. v2.0.8

1 Like

Download the Hubitat app