Metadata-Version: 2.4
Name: aiolinknlink
Version: 0.2.0
Summary: Asynchronous local client for LinknLink eMotion Ultra devices
Project-URL: Homepage, https://github.com/linknlink/aiolinknlink
Project-URL: Repository, https://github.com/linknlink/aiolinknlink
Project-URL: Issues, https://github.com/linknlink/aiolinknlink/issues
Author: LinknLink
License-Expression: Apache-2.0
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: AsyncIO
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: aioesphomeapi<46.0,>=44.24.1
Requires-Dist: cryptography>=41.0.0
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == 'dev'
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.9; extra == 'dev'
Requires-Dist: twine>=5.1; extra == 'dev'
Provides-Extra: test
Requires-Dist: pytest-asyncio>=0.23; extra == 'test'
Requires-Dist: pytest-cov>=5.0; extra == 'test'
Requires-Dist: pytest>=8.0; extra == 'test'
Description-Content-Type: text/markdown

# aiolinknlink

`aiolinknlink` is an asynchronous Python client for direct local communication with LinknLink eMotion Ultra and Ultra2 devices.

The library implements LinknLink DNA discovery, authentication, encrypted UDP transport, and the eMotion gateway/subdevice protocol. It communicates directly with devices on the local network.

## Requirements

- Python 3.11 or newer
- An eMotion Ultra/Ultra2 already connected to Wi-Fi
- The client and device on the same local network

## Example

```python
import asyncio

from aiolinknlink import UltraClient


async def main() -> None:
    client = UltraClient()
    device = await client.discover_host("192.168.1.8")
    session = await client.connect(device)
    state = await client.refresh(session)
    print(state.values)


asyncio.run(main())
```

## Development

```bash
python3 -m venv .venv
.venv/bin/pip install -e '.[dev]'
.venv/bin/pytest
.venv/bin/ruff check .
.venv/bin/mypy src
```

## License

Apache License 2.0.
