Python API for Yale Access (formerly August) Smart Lock and Doorbell
Project description
yalexs

Python API for Yale Access (formerly August) Smart Lock and Doorbell. This is used in Home Assistant but should be generic enough that can be used elsewhere.
Yale Access formerly August
This library is a fork of Joe Lu's excellent august library from https://github.com/snjoetw/py-august
API status
This is an unofficial library. As of v9, only the async API (yalexs.api_async.ApiAsync, yalexs.authenticator_async.AuthenticatorAsync) is supported — the synchronous Api / Authenticator classes were removed in v8 (see #141).
The public API key historically embedded in this library is no longer accepted by either backend. Both Brand.AUGUST (Fortune Brands / Yale Access) and Brand.YALE_HOME (Assa Abloy) now require an official partner key issued by the vendor. See #167 for context. The usage example below is illustrative — you will need to supply a working key via the brand/API plumbing for it to authenticate against the live service.
Install
pip install yalexs
Classes
AuthenticatorAsync
AuthenticatorAsync handles authentication: signing in, sending a verification code to email or phone, and validating the returned code.
Constructor
| Argument | Description |
|---|---|
| api | An ApiAsync instance. |
| login_method | Login method, either "phone" or "email". |
| username | If login_method is phone, your full phone number including + and country code; otherwise your email address. |
| password | Account password. |
| install_id* | ID generated when the Yale Access app is installed. If not specified, the authenticator generates one. Providing a previously provisioned install ID skips the verification step. |
| access_token_cache_file* | Path to a token cache file. If set, authentication state is persisted to disk so subsequent runs can skip the login step until the token expires. |
* optional
Methods
async_setup_authentication()
Loads cached credentials from access_token_cache_file if present. Call once before async_authenticate().
async_authenticate() -> Authentication
Authenticates with the API. The returned Authentication.state is one of:
AuthenticationState.AUTHENTICATED— logged in,access_tokenis valid.AuthenticationState.REQUIRES_VALIDATION— callasync_send_verification_code()thenasync_validate_verification_code(code).AuthenticationState.BAD_PASSWORD— credentials rejected.AuthenticationState.REQUIRES_AUTHENTICATION— no cached token; callasync_authenticate()to obtain one.
If a valid token is already cached, this returns it without contacting the API.
async_send_verification_code() -> bool
Sends a 6-digit verification code to the phone or email tied to the account.
async_validate_verification_code(code: str) -> ValidationResult
Validates the code. Returns ValidationResult.VALIDATED on success or ValidationResult.INVALID_VERIFICATION_CODE otherwise.
async_refresh_access_token(force: bool = False) -> Authentication | None
Refreshes the access token if it is within the renewal threshold (default 7 days before expiry). Pass force=True to refresh unconditionally.
Usage
import asyncio
from aiohttp import ClientSession
from yalexs.alarm import ArmState
from yalexs.api_async import ApiAsync
from yalexs.authenticator_async import AuthenticationState, AuthenticatorAsync
from yalexs.const import Brand
async def main() -> None:
async with ClientSession() as session:
api = ApiAsync(session, timeout=20, brand=Brand.AUGUST)
authenticator = AuthenticatorAsync(
api,
"email",
"EMAIL_ADDRESS",
"PASSWORD",
access_token_cache_file="auth.txt",
)
await authenticator.async_setup_authentication()
authentication = await authenticator.async_authenticate()
if authentication.state is AuthenticationState.REQUIRES_VALIDATION:
await authenticator.async_send_verification_code()
code = input("Verification code: ")
await authenticator.async_validate_verification_code(code)
authentication = await authenticator.async_authenticate()
access_token = authentication.access_token
locks = await api.async_get_locks(access_token)
for lock in locks:
print(lock)
# Alarms (Yale Home brand only)
if api.brand_supports_alarms:
alarms = await api.async_get_alarms(access_token)
if alarms:
await api.async_arm_alarm(access_token, alarms[0], ArmState.Away)
asyncio.run(main())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yalexs-9.2.6.tar.gz.
File metadata
- Download URL: yalexs-9.2.6.tar.gz
- Upload date:
- Size: 45.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bce2c19ce50c067d420f9948f3c0c0821d0b95a89828e10ed10a4ae157aa910c
|
|
| MD5 |
8b8b4fa4139379739d9c78f5b21d3ee9
|
|
| BLAKE2b-256 |
485c45f79be1eb081343e18b86153c20ee8a45468e029cb90bb1fea15b8dc492
|
Provenance
The following attestation bundles were made for yalexs-9.2.6.tar.gz:
Publisher:
ci.yml on Yale-Libs/yalexs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yalexs-9.2.6.tar.gz -
Subject digest:
bce2c19ce50c067d420f9948f3c0c0821d0b95a89828e10ed10a4ae157aa910c - Sigstore transparency entry: 1671833060
- Sigstore integration time:
-
Permalink:
Yale-Libs/yalexs@9f0b45e9edcd0305be952bb6ec749e94f381fbc7 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Yale-Libs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@9f0b45e9edcd0305be952bb6ec749e94f381fbc7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yalexs-9.2.6-py3-none-any.whl.
File metadata
- Download URL: yalexs-9.2.6-py3-none-any.whl
- Upload date:
- Size: 53.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11c40ece9b712194cab3f12f0b714017bfd5ee03796f73bd6f16ea39f113d03f
|
|
| MD5 |
a66cf3bd75eaf4d3855efd75392bfdb7
|
|
| BLAKE2b-256 |
250bfe0729da0811f6e8b3c5b10935fd2d13bbf8880b4854ffe1a3f4c8816b1f
|
Provenance
The following attestation bundles were made for yalexs-9.2.6-py3-none-any.whl:
Publisher:
ci.yml on Yale-Libs/yalexs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yalexs-9.2.6-py3-none-any.whl -
Subject digest:
11c40ece9b712194cab3f12f0b714017bfd5ee03796f73bd6f16ea39f113d03f - Sigstore transparency entry: 1671833069
- Sigstore integration time:
-
Permalink:
Yale-Libs/yalexs@9f0b45e9edcd0305be952bb6ec749e94f381fbc7 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Yale-Libs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@9f0b45e9edcd0305be952bb6ec749e94f381fbc7 -
Trigger Event:
push
-
Statement type: