I'm working on getting a custom driver working for my Honeywell thermostats via they Total Connect Comfort API. I started with existing code for SmartThings (which csteele took a pass at converting for Hubitat). Turns out this code is a mess and I'm not sure if I'll keep it as a starting point or just start again from scratch. Regardless, I'd like to figure out if I can programmatically populate the devices.
I have 5 of these thermostats (mini-split setup with 5 heads) and manually populating them is an ugly process of scraping device IDs from the Honeywell website and putting in my credentials 5 times. It would be a lot cleaner to enter my credentials once, "discover devices", and have it create the virtual thermostats for me. I also would like to share some amount of state (specifically auth tokens) between devices.
Is there a way to support this sort of "driver/app" that can create virtual devices semi-dynamically and manage their shared state efficiently?
edit: I see that there is support for "composite devices", which seems relevant. Looking into that now. You guys need better docs.
Will do. That one seems pretty sloppy. It performs a login for every action, along with a lot of duplicated code. :\ I haven't worked out how I should maintain login state yet in a HE driver yet, but I'm confident that re-authenticating on every request is not the proper way to do it.
Honeywell actually has a public API now, but it looks like they only support it for Lyric thermostats. My Total Connect Comfort account is bounced with a "not recognized" error, which is disappointing. Sticking with reverse-engineered TCC, I guess.
I have clicked a few buttons when I first found it but mostly I need to flip between Heat-Off-Cold since that's not covered in my Thermostat's programming. I guess that means I use the driver twice a year. I'm not sure the "extra" login hurts much
For anyone else wanting to do this, here's a super-stripped down example of a composite (parent/child) driver. The parent has a single command (recreateChildDevices). It creates two devices that present as switches (but no-op). So it's a skeleton to plug into.
Add the parent and child driver code and then create a virtual Parent device. Once completed, you'll see the two children nested under the parent in your devices page.