Skip to content

Add climate/select platforms, parallel API, weather sensors v0.10.0#1

Merged
trcyberoptic merged 3 commits intomasterfrom
feature/improvements-v0.10
Feb 15, 2026
Merged

Add climate/select platforms, parallel API, weather sensors v0.10.0#1
trcyberoptic merged 3 commits intomasterfrom
feature/improvements-v0.10

Conversation

@trcyberoptic
Copy link
Copy Markdown
Owner

Summary

Major feature and quality release for the Hoval Connect integration:

  • Climate platform for HK (heating) circuits — HEAT/OFF/AUTO modes with target temperature control
  • Select entity for week program switching (week1, week2, ecoMode, standby, constant)
  • Parallel API calls with asyncio.gather() for significantly faster polling cycles
  • Program cache (5min TTL) reduces redundant API calls
  • Weather sensors — condition and temperature from Hoval's weather API
  • Operation mode sensor (diagnostic) for each circuit
  • Request timeout (30s) and automatic token retry on 401 for robustness
  • Configurable polling interval (30/60/120/300s) via options flow
  • DeviceInfo helpers — eliminates duplicate device info construction across platforms
  • EntityCategory.DIAGNOSTIC on program/event/operation sensors
  • Code quality: replaced deprecated ensure_future, added debounce cleanup, extracted constants
  • 16 unit tests for pure coordinator functions (fan speed resolution, program scheduling)

Files changed (16 files, +837 / -123)

File Change
climate.py New — HK heating circuit climate entity
select.py New — Week program select entity
tests/test_coordinator.py New — 16 unit tests
coordinator.py Parallel API, program cache, weather data
__init__.py DeviceInfo helpers, configurable polling, options listener
api.py Request timeout, token retry, public invalidate method
sensor.py Weather + operation mode sensors, diagnostic categories
fan.py DeviceInfo helper, constants, async_create_task, cleanup
const.py New constants (timeout, cache TTL, scan interval, circuit names)
config_flow.py Polling interval option
binary_sensor.py DeviceInfo helper
strings.json / translations/en.json New entity translations
manifest.json Version bump to 0.10.0
CLAUDE.md Updated documentation

Test plan

  • Ruff lint passes (no errors)
  • 16 unit tests pass (pytest tests/)
  • Manual test: HK climate entity shows current/target temperature
  • Manual test: Select entity switches between week programs
  • Manual test: Weather sensors display condition and temperature
  • Manual test: Options flow allows changing polling interval
  • Manual test: Token retry works when session expires mid-poll

🤖 Generated with Claude Code

trcyberoptic and others added 3 commits February 15, 2026 13:42
…nsors v0.10.0

Major improvements to the Hoval Connect integration:

**New platforms:**
- Climate platform for HK (heating) circuits with HEAT/OFF/AUTO modes
- Select entity for week program switching (week1/week2/ecoMode/standby/constant)

**API & coordinator improvements:**
- Parallel API calls with asyncio.gather() for faster polling
- Program cache with 5-minute TTL (reduces API calls)
- Request timeout (30s) on all API calls
- Automatic token retry on 401 responses
- Public invalidate_plant_token() method (replaces private cache access)
- Weather data fetching from get_weather() API

**New sensors:**
- Operation mode sensor (diagnostic)
- Weather condition and temperature sensors (plant-level)

**Code quality:**
- DeviceInfo helper functions (plant_device_info, circuit_device_info)
- EntityCategory.DIAGNOSTIC on program/event/operation sensors
- OPERATION_MODE_REGULAR constant (replaces string literals)
- async_create_task replaces deprecated ensure_future
- Debounce task cleanup in async_will_remove_from_hass
- Configurable polling interval (30/60/120/300s) in options flow
- strings.json synced with translations/en.json
- 16 unit tests for pure coordinator functions

Co-Authored-By: Claude Opus 4.6 <[email protected]>
HA translation keys must match [a-z0-9-_]+. Map between HA option
keys (eco_mode) and API program names (ecoMode) in select entity.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
… discovery

- Fan entities now only created for HV (ventilation) circuits
- Select entities only created for HV/HK circuits
- Climate control methods wrapped in try/except with HomeAssistantError
- Climate + Fan use translation_key instead of hardcoded _attr_name
- Dynamic entity discovery: new circuits detected at runtime trigger
  async_dispatcher_send, all platforms listen and add entities without restart
- Added climate/fan translations to strings.json and en.json

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@trcyberoptic trcyberoptic merged commit a9366c2 into master Feb 15, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant