Metadata-Version: 2.4
Name: aiolinknlink
Version: 0.1.1
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: 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 and does not require
`linknlink-device-bridge`, DeviceHub, MQTT, or a cloud service.

## 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()
    devices = await client.discover()
    if not devices:
        return

    session = await client.connect(devices[0])
    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.

