Skip to main content

An async client for connecting to Honeywell's TCC RESTful API.

Project description

ruff mypy pytest PyPI PyPI - Downloads

evohome-async

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 TCC API used by 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)

If you download the git repo you can use a basic CLI for backup/restore of schedules (incl. DHW, if any), for example:

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 the --no-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, cache_file=CACHE_FILE_PATH)
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:

  • 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)

TIP: the non-async documentation (from evohome-client) is available at http://evohome-client.readthedocs.org/en/latest/


Development

Prerequisites

  • Python 3.13.2+ (on *nix recommended, use WSL on Windows)
  • uv (recommended) or pip

Setup

Clone the repository and set up your development environment (using uv):

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

# Create virtual environment and install dependencies
uv venv --python 3.13  # or: python3.13 -m venv venv
source .venv/bin/activate

uv pip install -e .

Using the CLI

... then, to use the CLI:

uv pip install -r requirements_cli.txt

evo-client --help

Doing test/dev

... or, to do development:

uv pip install -r requirements_dev.txt

prek install  # install pre-commit git hooks

Running tests and linting

# Run linting
ruff check .
ruff format --check .

# Run type checking
mypy

# Run tests
pytest --log-cli-level=DEBUG --cov=src --cov-report=term-missing

# Run pre-commit hooks (includes ruff)
prek run --all-files

Project details


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-1.1.3.tar.gz (166.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-1.1.3-py3-none-any.whl (90.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: evohome_async-1.1.3.tar.gz
  • Upload date:
  • Size: 166.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.3 cpython/3.13.9 HTTPX/0.28.1

File hashes

Hashes for evohome_async-1.1.3.tar.gz
Algorithm Hash digest
SHA256 d8aaffaff448dbb32686f7e936de6c3d2d5e42e736ab88b89928bfcefca59d1a
MD5 150318f4e6657fc4832c3accb8d9b028
BLAKE2b-256 8dece060ffb791481cfec8ac80a0696c4e7376b5410102c2da35e64d0276fd1a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: evohome_async-1.1.3-py3-none-any.whl
  • Upload date:
  • Size: 90.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.3 cpython/3.13.9 HTTPX/0.28.1

File hashes

Hashes for evohome_async-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1cd4b30992f52e0953106ea1f7fc0e0793cef002ba45696ed41477ffbe034bd0
MD5 c9f4a832d90e0224fcad2bec7b875286
BLAKE2b-256 a115e3afd472dd9b8771cb89a22949c3c6fec6421fd4902dac88e0db87bff806

See more details on using hashes here.

Supported by

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