Metadata-Version: 2.4
Name: aiolanbon
Version: 0.2.1
Summary: Async Python client for the frozen LOIP 1.0.0 local HTTP/WebSocket API
Author-email: LANBON <lanbon@lanbon.cn>
License: MIT
Project-URL: Homepage, https://github.com/LANBON2026/aiolanbon
Project-URL: Repository, https://github.com/LANBON2026/aiolanbon
Keywords: lanbon,loip,aiohttp
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: AsyncIO
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiohttp<4,>=3.9.0
Requires-Dist: yarl<2,>=1.9.0
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.24; extra == "dev"
Requires-Dist: build==1.5.0; extra == "dev"
Provides-Extra: discovery
Requires-Dist: zeroconf>=0.132; extra == "discovery"
Dynamic: license-file

# aiolanbon

Async Python client for **LOIP 1.0.0**. It talks to a LANBON gateway over local HTTP and optional WebSocket. It does not depend on Home Assistant and does not branch on L8/L9/L10.

```python
import os
import aiohttp
from aiolanbon import LanbonClient

token = os.environ["LOIP_TOKEN"]  # never hard-code or log

async with aiohttp.ClientSession() as session:
    client = LanbonClient("192.168.0.10", 8765, token, session)
    info = await client.get_info()
    snapshot = await client.get_devices()
```

- Auth: `Authorization: Bearer <token>` only.
- Events: `ws://host:port/api/v1/events` (no token in the URL).
- mDNS: `_lanbon._tcp`. Token is not read from TXT.

PyPI: `aiolanbon==0.2.0` (LOIP). `0.1.0` was the Mesh client.


Version 0.2.1 adds IPv6-safe HTTP and WebSocket URL construction. Release candidates must pass the Linux test matrix before publication.
