Skip to main content

evohome-async

ruff mypy pytest PyPI PyPI - Python Version PyPI - Downloads License

Python client to asynchronously access the Total Connect Comfort RESTful API.

It provides support for Resideo TCC-based systems, such as Evohome, Round Thermostat, VisionPro and others:

  • it supports only EU/EMEA-based systems, please use (e.g.) somecomfort for US-based systems
  • it provides Evohome support for Home Assistant and other automation platforms

NOTE: the vendor API available to this library does not currently support cooling.

This client requires the aiohttp library. If you prefer a non-async client, evohome-client uses requests instead.

CLI for schedules (currently WIP)

To install a basic CLI:

pip install 'evohome-async[cli]'

evo-client --help

For example, to backup schedules (including DHW, if any):

evo-client -u username@gmail.com -p password get-schedules --loc-idx 2 > schedules.json

... and to restore:

evo-client -u username@gmail.com -p password set-schedules --loc-idx 2 -f schedules.json

To avoid exceeding the vendor's API rate limit, it will restore the access token cache, unless you use the --no-load-tokens switch.

NOTE: the client may save your access tokens to .evo-cache.tmp: this presents a small security concern.

Example code

websession = aiohttp.ClientSession()
token_manager = TokenManager(username, password, websession)
await token_manager.load_access_token()

evo = EvohomeClient(token_manager)
await evo.update()

...

await token_manager.save_access_token()
await websession.close()

Differences from non-async version

It is loosely based upon https://github.com/watchforstock/evohome-client, but async-aware.

The difference between the evohome-async and evohome-client libraries are significant, but it should be relatively straightforward to port your code over to this async library should you wish.

For example, entity ID attrs are .id and no longer .dhwId, zoneId, etc.

Other differences include (but are not limited to):

  • namespace is refactored (simpler), and attrs are snake_case rather than camelCase
  • all datetimes are now TZ-aware internally, and exposed as such
  • can import schedule JSON by name as well as by zone/dhw id
  • newer API exposes a TokenManager class (for authentication) and an Auth class (for authorization)
  • older API exposes a SessionManager (for authentication) and an Auth class (for authorization)
  • exceptions are parochial (e.g. AuthenticationFailedError) rather than generic (TypeError)
  • improved logging: better error messages when things do go wrong
  • additional logging: e.g. logs a warning for any active faults
  • is now fully typed, including TypedDicts and py.typed
  • uses best of class linting/typing via ruff/mypy
  • more extensive testing via pytest
  • (WIP) extended compatibility beyond pure evohome systems (e.g. VisionPro)

Development

This is how to set up a development environment.

Prerequisites

  • Python 3.14 for local dev (HA stable requires 3.14); Python 3.13 is also tested in CI
  • uv

Setup

git clone https://github.com/zxdavb/evohome-async
cd evohome-async

uv sync --all-extras  # creates .venv/ Python pinned via .python-version

prek install  # install pre-commit git hooks

Running tests and linting

source .venv/bin/activate

ruff check .
ruff format --check .
mypy
pytest --cov=src --cov-report=term-missing
prek run --all-files  # all pre-commit hooks

Alternatively, prefix each command with uv run to skip activation.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evohome_async-2.1.0.tar.gz (254.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evohome_async-2.1.0-py3-none-any.whl (107.0 kB view details)

Uploaded Python 3

File details

Details for the file evohome_async-2.1.0.tar.gz.

File metadata

  • Download URL: evohome_async-2.1.0.tar.gz
  • Upload date:
  • Size: 254.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for evohome_async-2.1.0.tar.gz
Algorithm Hash digest
SHA256 0ca4a08e1d9a64cbdb54088122d6ce6fcf938f3bb01ad623a438fe522be45410
MD5 82c4648e06eca444d0a891987f2eef0f
BLAKE2b-256 a4ceb326064e3422c5e9c87385ed886becd3fbbfad5e47f94d5e26d8ec885a15

See more details on using hashes here.

Provenance

The following attestation bundles were made for evohome_async-2.1.0.tar.gz:

Publisher: publish-release.yml on zxdavb/evohome-async

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file evohome_async-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: evohome_async-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 107.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for evohome_async-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4f6e9ac67a169e7f866abc0df3bb3563259840c09a8c1e9cea3c63503db11833
MD5 f75dd266ea25e33238cb9ed9a7635dde
BLAKE2b-256 f6e9f6f8c7bfe4a2414b0873ad131892ff6808a299d9a6d9f8f87d95980c3e20

See more details on using hashes here.

Provenance

The following attestation bundles were made for evohome_async-2.1.0-py3-none-any.whl:

Publisher: publish-release.yml on zxdavb/evohome-async

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

2.1.0 This release

2 files

2.0.1

2 files

1.3.3

2 files

1.2.0

2 files

1.1.3

2 files

1.0.6

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

0.4.21

2 files

0.4.20

2 files

0.4.19

2 files

0.4.18

2 files

0.4.17

2 files

0.4.16

2 files

0.4.15

2 files

0.4.13

2 files

0.4.12

2 files

0.4.11

2 files

0.4.9

2 files

0.4.8

2 files

0.4.7

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.3.15

2 files

0.3.8

2 files

0.3.5.post2

1 file

0.3.5.post1

1 file

0.3.4b1

1 file

0.3.3b5

1 file

0.3.3b4

1 file

0.3.3b3

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page