Metadata-Version: 2.3
Name: tecnosystemi-unofficial
Version: 1.0.0
Summary: Unofficial Python library for controlling Tecnosystemi devices (Pico, etc.) via UDP
Keywords: tecnosystemi,pico,iot,udp,hvac
Author: Karim Ramadan
Author-email: Karim Ramadan <karim.r.emam@gmail.com>
License: MIT
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: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Dist: jinja2>=3.1
Requires-Dist: pytest>=8 ; extra == 'dev'
Requires-Dist: pytest-timeout ; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23 ; extra == 'dev'
Requires-Python: >=3.10
Provides-Extra: dev
Description-Content-Type: text/markdown

# tecnosystemi-unofficial

Unofficial Python library + CLI for controlling **Tecnosystemi** IoT devices over the local network.

Supported devices:
- **Pico / Pico Pro** — decentralised heat-recovery ventilation units
- **Polaris 5X** — multi-zone Wi-Fi HVAC control unit (heating, cooling, dehumidification, ventilation)

> [!WARNING]
> This is a community reverse-engineering effort based on the decompiled Android app. It is not affiliated with or endorsed by Tecnosistemi S.r.l.

## Documentation

| | |
|---|---|
| 📦 [**Library / API**](docs/library.md) | Use `TecnoClient`/`PolarisClient`, `PicoDevice` and `Polaris5XDevice` in your own Python code |
| 🖥️ [**CLI**](docs/cli.md) | Interactive terminal tool to discover, inspect and control devices |

## Installation

```bash
pip install tecnosystemi-unofficial
```

For the CLI:

```bash
pipx install tecnosystemi-unofficial
tecno --help
```

## Quick examples

**Pico ventilation unit:**

```python
from tecnosystemi_unofficial import TecnoClient
from tecnosystemi_unofficial.devices import PicoDevice

with TecnoClient(ip="192.168.1.16") as client:
    pico = PicoDevice(client, pin="1234")
    print(pico.get_state())
    pico.turn_on()
    pico.set_speed(3)
    pico.set_mode(1)  # 1 = Recupero (heat-recovery)
```

**Polaris 5X multi-zone HVAC (TCP port 1235):**

```python
import asyncio
from tecnosystemi_unofficial import PolarisClient
from tecnosystemi_unofficial.devices import Polaris5XDevice, OPERATING_MODE_COOLING

async def main():
    async with PolarisClient(ip="192.168.1.100", pin="1234") as client:
        polaris = Polaris5XDevice(client)
        state = await polaris.get_state()
        print(state)
        await polaris.turn_on()
        await polaris.set_mode(OPERATING_MODE_COOLING)

asyncio.run(main())
```

## Running Tests

```bash
uv run pytest
```
