{"id":16148834,"url":"https://github.com/zxdavb/evohome-async","last_synced_at":"2025-04-04T11:13:45.665Z","repository":{"id":49599309,"uuid":"202971643","full_name":"zxdavb/evohome-async","owner":"zxdavb","description":"An asyncio Python client to access the Evohome web service","archived":false,"fork":false,"pushed_at":"2024-10-29T13:00:58.000Z","size":919,"stargazers_count":11,"open_issues_count":1,"forks_count":13,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-29T15:55:16.868Z","etag":null,"topics":["comfort","connect","evohome","honeywell","honeywell-evohome","round","thermostat","total"],"latest_commit_sha":null,"homepage":"http://evohome-client.readthedocs.org/en/latest/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zxdavb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"buy_me_a_coffee":"zxdavb"}},"created_at":"2019-08-18T07:09:18.000Z","updated_at":"2024-10-29T13:01:02.000Z","dependencies_parsed_at":"2023-10-25T01:22:08.053Z","dependency_job_id":"a8ad9bc9-e88b-4b48-ae34-22cb491a914b","html_url":"https://github.com/zxdavb/evohome-async","commit_stats":{"total_commits":221,"total_committers":13,"mean_commits":17.0,"dds":0.6108597285067874,"last_synced_commit":"333223df05b7881d6d9b831eb41d209846dd9a98"},"previous_names":[],"tags_count":62,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxdavb%2Fevohome-async","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxdavb%2Fevohome-async/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxdavb%2Fevohome-async/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxdavb%2Fevohome-async/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zxdavb","download_url":"https://codeload.github.com/zxdavb/evohome-async/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247166168,"owners_count":20894654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["comfort","connect","evohome","honeywell","honeywell-evohome","round","thermostat","total"],"created_at":"2024-10-10T00:35:00.186Z","updated_at":"2025-04-04T11:13:45.624Z","avatar_url":"https://github.com/zxdavb.png","language":"Python","funding_links":["https://buymeacoffee.com/zxdavb"],"categories":[],"sub_categories":[],"readme":"![ruff](https://github.com/zxdavb/evohome-async/actions/workflows/check-lint.yml/badge.svg)\n![mypy](https://github.com/zxdavb/evohome-async/actions/workflows/check-type.yml/badge.svg)\n![pytest](https://github.com/zxdavb/evohome-async/actions/workflows/check-test.yml/badge.svg)\n![PyPI](https://img.shields.io/pypi/v/evohome-async?label=pypi%20package)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/evohome-async)\n\nevohome-async\n==============\n\nPython client to _asynchronously_ access the [Total Connect Comfort](https://international.mytotalconnectcomfort.com/Account/Login) RESTful API.\n\nIt provides support for Resideo TCC-based systems, such as **Evohome**, **Round Thermostat**, **VisionPro** and others:\n - it supports _only_ EU/EMEA-based systems, please use (e.g.) [somecomfort](https://github.com/mkmer/AIOSomecomfort) for US-based systems\n - it provides Evohome support for [Home Assistant](https://www.home-assistant.io/integrations/evohome) and other automation platforms\n\n\u003e **NOTE:** the TCC API used by the library does not currently support cooling.\n\nThis client _requires_ the [aiohttp](https://pypi.org/project/aiohttp/) library. If you prefer a non-async client, [evohome-client](https://github.com/watchforstock/evohome-client) uses [requests](https://pypi.org/project/requests/) instead.\n\n### CLI for schedules (currently WIP)\nIf you download the git repo you can use a basic CLI for backup/restore of schedules (incl. DHW, if any), for example:\n```\npython client.py -u username@gmail.com -p password get-schedules --loc-idx 2 \u003e schedules.json\n```\n... and to restore:\n```\npython client.py -u username@gmail.com -p password set-schedules --loc-idx 2 -f schedules.json\n```\n\nTo avoid exceeding the vendor's API rate limit, it will restore the access token cache, unless you use the the `--no-tokens` switch.\n\n\u003e **NOTE:** the client may save your access tokens to **.evo-cache.tmp**: this presents a small security concern.\n\n### Example code...\n```python\nwebsession = aiohttp.ClientSession()\ntoken_manager = TokenManager(username, password, websession, cache_file=CACHE_FILE_PATH)\nawait token_manager.load_access_token()\n\nevo = EvohomeClient(token_manager)\nawait evo.update()\n\n...\n\nawait token_manager.save_access_token()\nawait websession.close()\n```\n\n### Differences from non-async version\nIt is loosely based upon https://github.com/watchforstock/evohome-client, but async-aware.\n\nThe 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.\n\nFor example, entity ID attrs are `.id` and no longer `.dhwId`, `zoneId`, etc.\n\nOther differences include:\n* namespace is refactored (simpler), and attrs are `snake_case` rather than `camelCase`\n* all datetimes are now TZ-aware internally, and exposed as such\n* can import schedule JSON by name as well as by zone/dhw id\n* newer API exposes a **TokenManager** class (for authentication) and an **Auth** class (for authorization)\n* older API exposes a **SessionManager** (for authentication) and an **Auth** class (for authorization)\n* exceptions are parochial (e.g. `AuthenticationFailedError`) rather than generic (`TypeError`)\n* improved logging: better error messages when things do go wrong\n* additional logging: e.g. logs a warning for any active faults\n* is now fully typed, including TypedDicts and py.typed\n* uses best of class linting/typing via **ruff**/**mypy**\n* more extensive testing via **pytest**\n* (WIP) extended compatibility beyond pure evohome systems (e.g. VisionPro)\n\n\u003e **TIP:** the non-async documentation (from **evohome-client**) is available at http://evohome-client.readthedocs.org/en/latest/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzxdavb%2Fevohome-async","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzxdavb%2Fevohome-async","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzxdavb%2Fevohome-async/lists"}