Skip to main content

pyzephyrconnect

Python client for Zephyr / Gemtek range hoods.

These hoods expose no local API. All communication is a cloud round-trip through AWS IoT Core device shadows. See PROTOCOL.md for how the protocol was reverse-engineered.

Install

pip install pyzephyrconnect

Read state

import aiohttp
from pyzephyrconnect import ZephyrClient

async with aiohttp.ClientSession() as session:
    client = ZephyrClient.from_credentials("you@example.com", "password", session)
    try:
        for hood in await client.async_setup():
            print(hood.capabilities.model, hood.capabilities.max_fan_speed)
            await hood.async_start()
            print(hood.state)
    finally:
        await client.async_stop()

Persisting tokens

The library never persists credentials - storage is yours. Supply tokens from a previous session and a callback to save new ones, and a restart skips the SRP login entirely:

from pyzephyrconnect import ZephyrClient, ZephyrTokens, ZephyrDataError

try:
    tokens = ZephyrTokens.from_dict(saved) if saved else None
except ZephyrDataError:
    # from_dict validates rather than coercing, so a corrupted or partial
    # record raises here instead of failing much later as a SECRET_HASH
    # Cognito rejects. Discard it - a full SRP login rebuilds it.
    tokens = None

client = ZephyrClient.from_credentials(
    username, password, session,
    tokens=tokens,
    token_updater=lambda t: save(t.as_dict()),
)

To keep the password out of the library completely, subclass AbstractAuth and implement async_get_tokens().

Probe CLI

The write path actuates a physical fan and light. The CLI writes one field at a time, refuses anything outside an allowlist, and requires --confirm:

export ZEPHYR_USER=you@example.com
python -m pyzephyrconnect --watch
python -m pyzephyrconnect --set light=1 --confirm

Destructive writes need --force as well. resetgreasefilter zeroes a usage counter that cannot be reconstructed.

Status

Read path verified against a Zephyr AK7400AS. Write path is under validation; field semantics for act and the units of the use*time counters are not yet established.

License

GPL-3.0-or-later

Download files

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

Source Distribution

pyzephyrconnect-0.1.0.tar.gz (188.8 kB view details)

Uploaded Source

Built Distribution

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

pyzephyrconnect-0.1.0-py3-none-any.whl (75.3 kB view details)

Uploaded Python 3

File details

Details for the file pyzephyrconnect-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for pyzephyrconnect-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5380bee65a59ab8108560208f92d00f35da4b0d9808d99404c751dbf15ff5e0e
MD5 e8eb2f624c7d220616ccaabcdd708e21
BLAKE2b-256 66f20e265e3d3fda16b6a2f0c45a4ae88b046db0b06bbd98fddb1ce6971259b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyzephyrconnect-0.1.0.tar.gz:

Publisher: release.yml on RyanMorash/pyzephyrconnect

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

File details

Details for the file pyzephyrconnect-0.1.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for pyzephyrconnect-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 805aef22f8549f4942b0180e8143fa4c744fea6c786229553ebf91180dd00f19
MD5 ceb44b611200c27164bca56e5de52cac
BLAKE2b-256 2ea1482a65cae1dd84f0a7bc88a0a077c84ccc2c59a6370d6797f9fb9ec66587

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyzephyrconnect-0.1.0-py3-none-any.whl:

Publisher: release.yml on RyanMorash/pyzephyrconnect

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

Release history Release notifications | RSS feed

0.2.0

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page