Metadata-Version: 2.4
Name: arwn-client
Version: 0.1.0
Summary: Python client library for parsing ARWN weather station MQTT messages
Author-email: Sean Dague <sean@dague.net>
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/sdague/arwn-client
Project-URL: Repository, https://github.com/sdague/arwn-client
Project-URL: Bug Tracker, https://github.com/sdague/arwn-client/issues
Project-URL: Changelog, https://github.com/sdague/arwn-client/blob/main/CHANGELOG.md
Keywords: arwn,weather,mqtt,home-assistant
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.0
Requires-Dist: paho-mqtt>=2.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: ruff>=0.4.0; extra == "dev"
Provides-Extra: test
Requires-Dist: pytest>=7.0; extra == "test"
Requires-Dist: pytest-cov>=4.0; extra == "test"
Dynamic: license-file

# pyarwn

Python client library for parsing [ARWN](https://github.com/sdague/arwn) weather station MQTT messages.

## Installation

```bash
pip install pyarwn
```

## Usage

```python
from pyarwn import parse_message

readings = parse_message("arwn/temperature/BackYard", {"temp": 72.5, "units": "F"})
for r in readings:
    print(f"{r.sensor_name}: {r.value} {r.unit}")
# BackYard Temperature: 72.5 °F
```

## API

### `parse_message(topic, payload) -> list[ArwnReading]`

Parse an ARWN MQTT message. Returns an empty list for unknown topics.

### `ArwnReading`

| Field | Type | Description |
|---|---|---|
| `device_type` | `ArwnDeviceType` | `LOCATION` or `STATION` |
| `device_name` | `str` | e.g. `"BackYard"`, `"Weather Station"` |
| `sensor_key` | `str` | e.g. `"temp"`, `"speed"` |
| `sensor_name` | `str` | e.g. `"BackYard Temperature"` |
| `value` | `float \| int` | The reading value |
| `unit` | `str` | Unit string e.g. `"°F"`, `"mph"` |

### `ArwnDeviceType`

- `ArwnDeviceType.LOCATION` — sensor at a named location (temperature, moisture)
- `ArwnDeviceType.STATION` — weather station sensor (wind, rain, barometer)

## License

Apache 2.0
