Metadata-Version: 2.4
Name: pycomap
Version: 1.1.0
Summary: Async Python client for ComAp controllers: LAN discovery and the native ECDH/AES-encrypted control protocol
Author: Igor Panteleyev
Author-email: Igor Panteleyev <panteleev.igor69@gmail.com>
License-Expression: MIT
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Home Automation
Classifier: Topic :: System :: Hardware
Classifier: Framework :: AsyncIO
Classifier: Typing :: Typed
Requires-Dist: cryptography>=42
Requires-Dist: pytz>=2026.2
Requires-Python: >=3.14
Project-URL: Homepage, https://github.com/igor-panteleev/pycomap
Project-URL: Documentation, https://igor-panteleev.github.io/pycomap/
Project-URL: Source, https://github.com/igor-panteleev/pycomap
Project-URL: Issues, https://github.com/igor-panteleev/pycomap/issues
Project-URL: Changelog, https://github.com/igor-panteleev/pycomap/releases
Description-Content-Type: text/markdown

# pycomap

Async Python client for ComAp controllers (InteliLite AMF25 and likely compatible
siblings): LAN discovery and the native ECDH/AES-encrypted control protocol on port 23.

## Quick start

```python
from pycomap import Controller, EthernetTransport
from pycomap.protocol import ComApClient

async with Controller(
    ComApClient(EthernetTransport("192.168.1.9")),
    access_code="0",   # factory default (drives ECDH key derivation)
    password=1234,     # write-protection password (0-9999); omit for read-only
) as ctrl:
    values = await ctrl.read_values()
    print(values)

    await ctrl.set_setpoint("Nominal RPM", 1500)
    await ctrl.set_setpoint("Summer Time Mode", "Winter")  # STRING_LIST by label
```

See the [API docs](https://igor-panteleev.github.io/pycomap/) for full reference. `just docs-serve` to browse locally.

## Development

```sh
just format       # ruff check --fix + ruff format
just typecheck    # ty check
just unit         # tests/unit (no hardware needed)
just integration  # tests/integration (requires .env with PYCOMAP_TEST_HOST)
just docs-serve   # browse API docs locally
just ai-docs      # regenerate llms.txt and CLAUDE.md
```

`pre-commit` runs format + typecheck on every commit:

```sh
uv run pre-commit install
```
