Skip to content

Hass: Multiple Evohome Locations

David Bonnes edited this page Dec 20, 2023 · 26 revisions

Home Assistant's (HA) integration for Honeywell/Resideo Total Connection Comfort (EU), evohome, was written for systems with only a single Temperature Control System (TCS).

This wiki item describes a means to have multiple TCC TCSs (evohome systems) per HA instance. The instructions are intended for evohome systems, but should work with any TCC system available via the Honeywell/Resideo TCC website.

Note: If you use the technique described here to add a second evohome location, do not submit an issue to HA if there you have a problem.

If you have multiple evohome controllers (either via multiple accounts, or multiple locations, or simply multiple TCSs per location), then you can only have one of them available by the integration. Which TCS is defined by the location_idx parameter:

# Example configuration.yaml entry
evohome:
  username: !secret TCC_USERNAME
  password: !secret TCC_PASSWORD
  location_idx: 3  # location_idx is only required if non-zero

NOTE: The high precision feature (temps measured to 0.01 C rather than 0.5 C) only works with location_idx 0.

How to Setup a Secondary evohome Integration

To work around this limitation, you must:

  • create a custom control for each additional TCS/controller, and keep the copy up-to-date as you update HA

NOTE: Every time you upgrade HA, you should expect to upgrade the custom_components folder too.

Step 0: Prerequisites...

Have HA up and running with a terminal (SSH) installed. Write down what version of HA you're running. You may want to upgrade to the latest version.

Have the evohome integration setup/working OK, with a set location_idx: 0 and a default scan_interval:.

TIP: I recommend you create a secondary account on the TCC website, and give it access to your other location. This is to minimise your chances of exceeding the rate limits for authentication at the TCC website via the Grant Access button.

Step 1: Start with a clean setup...

The intention here is to remove any evohome integrations in the custom_components folder that were left over from before. It is important to start afresh each time you upgrade HA, so that the evohome code is synchronous with your version of HA.

NOTE: Permissions will be an issue. If required, ensure you are running as root.

Go to the terminal, and change to the config directory, then:

  • cd /config
  • mkdir -p custom_components
  • cd custom_components

The above will create the custom_components folder if required, and not complain it it already exists.

Ensure that there are no other evohome custom integrations left over from before:

  • cd /config/custom_components
  • ls -al | grep evo*

... if you do have any such folders, you should remove them (they contain only code, not data):

  • rm -rf evohome_*

Be careful to delete only the evohome folders, and not the folders that contain any other integrations.

Step 2: Then copy across the relevant HA files...

NOTE: You only need to do this step the one time.

Copy the integration folder:

  • cd /config/custom_components
  • git clone --filter=blob:none --sparse https://github.com/home-assistant/core
  • cd core
  • git sparse-checkout add homeassistant/components/evohome

The above will require approx. 200 MB of disk space.

Step 3: Create the custom component...

NOTE: In this step, you need to know the exact version of HA that you have (below, it is 2023.8.2).

Now (and whenever you upgrade HA) you can checkout the specific version you need:

  • cd /config/custom_components/core
  • git fetch --all
  • git checkout 2023.8.2

... and copy it across to the custom components folder (you can repeat this with evohome_2, etc.):

  • cd /config/custom_components
  • rm -rf evohome_1
  • cp -r core/homeassistant/components/evohome evohome_1

Step 4: Then make the necessary changes...

Make the necessary changes to get the integration working as a custom component:

  • cd /config/custom_components/evohome_1
  • sed -i '/domain/ s/evohome/evohome_1/' manifest.json
  • sed -i '/{/a \ \ "version": "0.0.1",' manifest.json
  • sed -i '/DOMAIN/ s/evohome/evohome_1/' const.py

Step 5: Then check those changes...

You can check the above via (notice how they beginning of each line):

  • cat manifest.json
{
  "version": "0.0.1",
  "domain": "evohome_1",
  "name": "Honeywell Total Connect Comfort (Europe)",
  "codeowners": ["@zxdavb"],
  "documentation": "https://www.home-assistant.io/integrations/evohome",
  "iot_class": "cloud_polling",
  "loggers": ["evohomeasync", "evohomeasync2"],
  "requirements": ["evohome-async==0.3.15"]
}
  • cat const.py | grep 'DOMAIN'
DOMAIN = "evohome_1"
STORAGE_KEY = DOMAIN

See: update-evohome.sh for an example script (tested on HA OS 2023.12.1).

Step 6: Finally, enable the new integration

Ensure you have set your location_idx correctly (it defaults to 0). Below, the two integrations do not share a common username/password (but could), as you're better off creating an account for each location on the TCC website, to avoid some API rate limits for authentication (see below).

Add the following to HA via configuration.yaml:

# this account has multiple locations
evohome:  
  username: !secret TCC_USERNAME
  password: !secret TCC_PASSWORD
  location_idx: 0  # value depends upon your configuration

# this secondary account has only one location
evohome_1: 
  username: !secret TCC_USERNAME_1
  password: !secret TCC_PASSWORD_1

The alternative is to use the one account, and leverage the multiple locations of that account (i.e. location_idx: 1).

How to Grant Access to the TCC Location

Create a secondary TCC account

Grant access to your Location via your original account

References: