Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.8.5] - 2026-03-13

### Added

- **Model Aliases**: Introduced `MODEL_ALIASES` to support devices whose `PRODUCT_CODE` differs from the model ID used in data keys and mappings
- Replaces the former hardcoded workaround for `PDHC1H1HAR1V1`
- New device supported: **SEKO POOLDOSE pH+ORP CF Group Wi-Fi** (`PDPR1H1HAW102`, FW `539187`) — resolves to `PDPR1H1HAW100` mapping
- **New Device Mapping**: Added `model_PDPH1H1HAW100_FW539176.json` for pH-only devices
- New device supported: **SEKO PoolDose pH** (`PDPH1H1HAW100`, FW `539176`)
- **Extended Mapping**: `model_PDPR1H1HAW100_FW539187.json` extended from 32 to 54 entities
- 11 new binary sensor alarms (secondary overfeed, temperature, pH/chlorine concentration, system standby)
- 6 new sensors with conversions (circulation pump, CL dosing mode, device config, temperature unit, delay statuses)
- 5 new number entities (dosing off-timers, delay timers)

### Fixed

- **Session Consistency**: All functions in `RequestHandler` now use the shared `_get_session()` method, enabling correct session hand-over from Home Assistant
- **Response Parsing**: Fixed double-read bug in `get_access_point()`

### Enhanced

- **Test Coverage**: Added tests for alias resolution, session consistency, and access point parsing
- **Code Quality**: All tests pass (143 total), pylint score 10.00/10

### Contributors

Thanks to [@ronaldvdmeer](https://github.com/ronaldvdmeer) and [@pwntester](https://github.com/pwntester) for their contributions to this release.

## [0.8.2] - 2026-01-12

### Changed
Expand Down
17 changes: 12 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -883,9 +883,13 @@ The `instant_values_structured()` method returns data organized by type:

This client has been tested with:

- **SEKO PoolDose Double** (Model: PDPR1H1HAW100, FW: 539187)
- **VÁGNER POOL VA DOS BASIC** (Model: PDHC1H1HAR1V0, FW: 539224)
- **VÁGNER POOL VA DOS EXACT** (Model: PDHC1H1HAR1V1, FW: 539224)
| Device | PRODUCT_CODE | FW Code | Notes |
|---|---|---|---|
| SEKO PoolDose Double | PDPR1H1HAW100 | 539187 | Extended mapping (54 entities) |
| SEKO POOLDOSE pH+ORP CF Group Wi-Fi | PDPR1H1HAW102 | 539187 | Alias for PDPR1H1HAW100 mapping |
| SEKO PoolDose pH | PDPH1H1HAW100 | 539176 | pH-only device |
| VÁGNER POOL VA DOS BASIC | PDHC1H1HAR1V0 | 539224 | |
| VÁGNER POOL VA DOS EXACT | PDHC1H1HAR1V1 | 539224 | Alias for PDHC1H1HAR1V0 mapping |

Other SEKO or VÁGNER POOL models may work but are untested. The client uses JSON mapping files to adapt to different device models and firmware versions (see e.g. `src/pooldose/mappings/model_PDPR1H1HAW100_FW539187.json`).

Expand Down Expand Up @@ -967,6 +971,9 @@ Data Classification:

For detailed release notes and version history, please see [CHANGELOG.md](CHANGELOG.md).

### Latest Release (0.8.2)
### Latest Release (0.8.5)

- **Type Constants**: centralized runtime constants for platform types
- Added support for **SEKO POOLDOSE pH+ORP CF Group Wi-Fi** (`PDPR1H1HAW102`) and **SEKO PoolDose pH** (`PDPH1H1HAW100`) devices
- Extended `PDPR1H1HAW100` mapping from 32 to 54 entities
- Improved session consistency in `RequestHandler`
- Thanks to [@ronaldvdmeer](https://github.com/ronaldvdmeer) and [@pwntester](https://github.com/pwntester)
2 changes: 1 addition & 1 deletion src/pooldose/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""Async API client for SEKO Pooldose."""
from .client import PooldoseClient

__version__ = "0.8.2"
__version__ = "0.8.5"
__all__ = ["PooldoseClient"]
2 changes: 1 addition & 1 deletion tests/test_request_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ async def test_get_device_language_closes_internal_session(self):
async_cm.__aenter__.return_value = mock_response
mock_session.post = MagicMock(return_value=async_cm)

status, data = await handler.get_device_language("TEST_DEVICE")
status, _ = await handler.get_device_language("TEST_DEVICE")

assert status == RequestStatus.SUCCESS
mock_session.close.assert_awaited_once()
Expand Down
Loading