How to Migrate from Ecobee Cloud Integration to Local HomeKit Controller

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 helper instead of the climate.set_preset_mode command that I was used to.

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.

1 Like

Good info. It’s nice to know the two integrations can coexist.

Given the rate of outages, one thing I’ve done is subscribed to the RSS feed using the feedparser integration (via HACS) along with the custom list-card (GitHub - iantrich/list-card: 📰 Display sensor list data in a table). It reduces the frustration of trying to figure out what’s happening when things stop working. Here’s a snippet from yesterday:

Also good info!
I didn’t know about this in HACS, but definitely looks useful. Thank you for sharing!

Here’s the configuration info. I have a hybrid of YAML and GUI, so it might not exactly fit your installation.

Here are the entries in configuration.yaml:

  mode: yaml
    - url: /local/community/list-card/list-card.js
      type: module

    - platform: feedparser
      name: ecobee Status - Incident History
      feed_url: ""
      date_format: "%a, %b %d %I:%M %p"
        hours: 0.25
      show_topn: 1
        - title
        - summary
        - summary_detail

Here are the entries for ui-lovelace.yaml:

      - type: custom:list-card
        entity: sensor.ecobee_status_incident_history
        title: ecobee RSS feed
        feed_attribute: entries
        row_limit: 5
          - title: ""
            #            prefix: title_detail
            #            field: title
            field: summary

I just changed the scan_interval for the feedparser yesterday, so I’m not sure a decimal value will work. That said, there’s no entry in the system log to indicate there’s any problem.

Ah, thanks - was going to ask you to share that!
Appreciated. Between the local control and this status, we should have the Ecobee users pretty well covered.

list-card appears to be broken in HACS…
Adding iantrich/list-card as a custom repo within HACS works and installs, but the developer page is blank (uncommon)

Further, when attempting to use the card in the frontend, home assistant is not recognizing it as valid card type:

There appear to be some open issues along these lines and the repo has not been updated/maintained in some time…perhaps it is deprecated?

The list card needs to be added as a custom repository. While I haven’t added it to my own instance of HACS, I’ve been successful adding everything on a friend’s system using configuration GUIs. I’d have to look at his system to validate what I’m providing here, but the following should work.

You need to open HACS and look for the stacked dots in the upper right corner of its dashboard and add the list repository like this:

You’ll then need to install both the RSS feedparser and the list card by adding them using the + EXPLORE AND DOWNLOAD REPOSITORIES button on the HACS dashboard. The feedparser should be an integration and the list card should be a front-end card (lovelace). Once you add the list card repository, use the search feature of the EXPLORE page to find the card:

After you get the feedparser and list cards downloaded, they should appear on the HACS dashboard list. At that point, you can reload your resources or use an HA Restart to load them. Verify the list card is loaded by going to http://homeassistant.local:8123/config/lovelace/dashboards, clicking on the stacked dots at the upper right, and then clicking on Resources. You should see something like this if it’s properly loaded:


The final configuration step might require you to find the SHOW CODE EDITOR feature of a dashboard object so you can paste in what I’ve provided.

FYI, I’ve done most of the above steps manually while in YAML mode, so it’s likely a bit different versus a GUI setup. If you need more guidance, I’ll have to get access to my friends system.

Thanks for this!

I can confirm that if you used the Ecobee HomeKit integration directly on the thermostat, you will need to disconnect this service. That is exactly what I had to do as I had previously integrated the thermostat directly with HomeKit.

I do have a question about HomeKit code however. The instructions you have listed appear to have 7 digits with dashes after digit 2 and 5. When set this up, the HomeKit code that came up on the Ecobee’s screen was 8 digits and configuring in Home Assistant I did not enter any dashes. Just the 8 digit number.

Is it possible this is different depending on model of Ecobee? If so, it might be good information to add to the instructions.

HomeKit pairing codes are 8 digits in the format: XXX-XX-XXX

HomeKit controller is smart enough to reformat them if you enter it without dashes

Appreciate the detailed response. It helped to ensure the modules were loaded correctly.

I did all of the above steps initially, but I decided to run thru it once more and discovered something a little different about this particular card, in that it is very picky about the formatting.

I had to use the following to get it to finally work:

type: custom:list-card
entity: sensor.ecobee_cloud_status
title: ecobee RSS feed
feed_attribute: entries
row_limit: 5
  - title: Ecobee Cloud Status
    field: summary

resulting in:

When creating a manual card using the following code, it would always throw the error I posted previously:

  - type: custom:list-card
    entity: sensor.ecobee_cloud_status
    title: ecobee RSS feed
    feed_attribute: entries
    row_limit: 5
      - title: Ecobee Cloud Status
        field: summary

Further, I would expect the custom card to be visible in the new card configuration menu, but it is not there:

1 Like


The original post mentioned a format of “xx-xxx-xx” which was only 7 digits and that it was required to put in the dashes. Just wanted to point it out in case OP wants to edit the instructions for clarity.

Oh yeah; you’re right. The CODE EDITOR in the GUIs doesn’t like comments or indenting.

Glad to see it working.

Updated, thanks.
I was going from memory but the main point is the dashes are required, because HA does not do it for you and will allow you to input them incorrectly, as far as I can tell.

No problem!

For reference, when I set mine up, I did not put in the dashes and everything appears to be working correctly.

I currently have both the HomeKit Integration and the Ecobee Integration running for comparison purposes at the moment. I am definitely seeing quicker response from the HomeKit Integration. It’s unfortunate that any custom comfort settings don’t pull through the HomeKit integration as it would eliminate the need for me to run both integrations. I don’t use the weather portion of the Ecobee integration, but I do have some custom comfort settings that I need to be able to access. Here’s to hoping for an update to that in the future!

Thanks again for putting this together!