I couldn’t find a good tutorial on how to migrate an existing Ecobee integration (cloud dependent) to HomeKit Controller (local control) that answered all of my questions, so I wanted to share my experience here. I hope that it will help others who may have similar questions.
Why HomeKit Controller?:
Given the far-too-frequent Ecobee cloud outages, I had enough of the cloud dependent Ecobee automations failing, and decided it was time to move to local control.
My Current Setup
I have 2 Ecobee Thermostats with some remote sensors connected to each.
These were added to Home Assistant (HA) using the cloud-based HA Ecobee integration and I had been using them for a couple of years this way. I already had Siri integration via Home Assistant’s HomeKit Bridge, so I never had to use the HomeKit integration built into the Ecobee thermostat.
After much searching, I discovered that it is possible to add the Ecobees to HomeKit Controller (HC) AND continue using the Ecobee cloud integration from HA.
This was exactly what I wanted, as it would allow me to add local HC capabilities without interrupting my existing setup, providing a nice clean migration path, instead of having to rearchitect the entire solution. Very nice. Let’s get started!
Caveats to HomeKit Controller:
There are a couple of things to know before diving right in.
First, not all components you see in the HA Ecobee cloud integration will be available in HomeKit Controller. Things like Weather, and any custom Ecobee comfort settings are not supported/available. The HomeKit Controller Ecobee does have support for the following modes: “Home” “Away” “Sleep” but these are called differently using a dropdown
select.select_option helper instead of the
climate.set_preset_mode service that I was used to. Note the only valid options you can use are ‘home’ ‘away’ or ‘sleep’ and these values are case-sensitive too.
Knowing this ahead of time is important, as new automations, scripts, and/or UI items will need to be built if you want to use the supported HomeKit Controller presets, and any custom presets you wish to use must be called using the cloud-based Ecobee integration.
Migrating / Adding HomeKit Controller:
Adding the Ecobee thermostats to HA HomeKit Controller is actually pretty easy.
First, you need to be on the same network in order for the HomeKit Controller to see the device via ZeroConf. This seems obvious, but can be easily overlooked. My t-stats were on a separate IoT network, so I had to re-IP-address them onto the same network as HA.
Also, if you used the Ecobee HomeKit integration directly on the thermostat, you will need to disconnect this service first (I hear). Again, I did not have this configured, so I did not need to complete this step.
Once I changed the IP on the first Ecobee to join the same network as HA, it showed up immediately as a newly discovered device in the HA notifications area, and was ready to be configured by the setup wizard. Nice!
NOTE: DO NOT start the setup wizard until you are standing in front of the Ecobee thermostat you wish to add, as doing so will invoke the setup process at the thermostat screen, and you need to be able to see the HomeKit code displayed. If this times out, it can be a little tricky to get it to display the code again. Best to avoid this if you can by starting the setup wizard from your phone while standing in front of the unit…much easier!
Configuring Ecobee on HomeKit Controller:
Once the Ecobee is discovered by HA, grab your phone, head to the unit, fire up HA and start the setup process. This will invoke the HomeKit setup wizard in HA and will display the HomeKit code on the Ecobee’s screen. When you enter this code in HA, you need to add the dashes, so pay attention to the format in the HA instructions “xxx-xx-xxx”
Once you enter the code, the Ecobee thermostat and any remote sensors you have connected to it will appear in HA and ask you which area you want them in.
Now all that is left to do is to modify any frontend settings and automations you have.
If you already have the cloud-based Ecobee integration configured, just rename these entities so they can coexist with the HomeKit Controller entities.
I named all my new HomeKit Controller entities to match what I already had, from the format
domain.entity_2 entries automatically created by the HC integration, then renamed all of the cloud-based Ecobee entities using the prefix
ecobee_ to clearly differentiate them:
Remember, you can still use any existing automations or scripts you’ve built using the cloud-based Ecobee integration, then slowly build new or modify existing items to suit your needs using local control at your own pace.
In my original setup for example, I used some custom Ecobee comfort settings and triggered these via scripts or automations. HomeKit Controller does not support custom comfort settings, and calls the built-in ones (Home, Away, Sleep) differently, so it was nice not having to re-configure the entire climate setup immediately.
After migrating, HomeKit Controller now handles all supported functions locally.
I still use the cloud-based Ecobee integration to call any ecobee-specific service calls such as custom ecobee comfort settings, control any
ecobee_ entities directly if needed, or to use the ecobee weather data. I then watched my logs for any errors and adjusted anything I missed as necessary.