Metadata-Version: 2.5
Name: brink-flair-modbus
Version: 0.4.0
Summary: A Python library for reading and writing Brink Flair ventilation units over Modbus
Project-URL: Repository, https://github.com/ysmilda/brink-flair-modbus
Project-URL: Issues, https://github.com/ysmilda/brink-flair-modbus/issues
Author: Yorick Smilda
License-Expression: MIT
License-File: LICENSE
Keywords: brink,flair,home-assistant,modbus,ventilation
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Home Automation
Requires-Python: >=3.12
Requires-Dist: modbus-connection<5,>=4.8.1
Provides-Extra: cli
Requires-Dist: modbus-connection[tmodbus]<5,>=4.8.1; extra == 'cli'
Provides-Extra: dev
Requires-Dist: aioesphomeapi<47,>=46.4.1; extra == 'dev'
Requires-Dist: mypy>=1.15; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.25; extra == 'dev'
Requires-Dist: pytest>=8.3; extra == 'dev'
Requires-Dist: ruff>=0.9; extra == 'dev'
Description-Content-Type: text/markdown

# brink-flair-modbus

A Python library for reading and writing **Brink Flair** (and compatible) ventilation units over Modbus, on top of [`modbus-connection`](https://pypi.org/project/modbus-connection/). It follows the spec given by [brink](https://www.brinkclimatesystems.nl/documenten/modbus-uwa2-b-uwa2-e-installation-regulations-614882.pdf).

## Usage

`BrinkFlair` contains the full implementation of the devices capabilities. It uses a `ModbusUnit` for connection with the device.

```python
import asyncio

from modbus_connection import ModbusTcpParams
from modbus_connection._protocol import ModbusUnit, connect

from brink_flair_modbus import BrinkFlair


async def main() -> None:
    unit: ModbusUnit = await connect(ModbusTcpParams(host="192.0.2.10", port=502))
    device = BrinkFlair(unit)

    await device.async_update()
    print(device.info.model)  # "Brink Flair 300"
    print(device.measurements.supply_temperature)
    print(device.flow_limits)  # (FlowLimits(300, 280))

    await unit.close()


asyncio.run(main())
```

## Development

Requires Python 3.12+ and [uv](https://docs.astral.sh/uv/).

```console
uv sync --extra dev
uv run ruff check .
uv run mypy brink_flair_modbus
uv run pytest
uv build
```

Type checking (`mypy --strict`) and linting (`ruff`) are enforced in CI.

## License

MIT

## Inspiration taken from

 - https://github.com/fonske/Brink-flair-modbus
 - https://github.com/jarcovlieger/brink-hrv-modbus
