Forwarders (Windy / Pocasi):
- `enabled` becomes a property reading the option live. Toggling it does not
reload the entry, so the cached copy left the diagnostics sensor reporting a
stale value indefinitely for a disabled forwarder.
- Reject empty credentials explicitly: an empty string is still a `str`, so
`checked` alone let an unconfigured forwarder send a request that could only
ever be refused.
- Use `persistent_notification.async_create` instead of the sync variant.
- Use WINDY_MAX_RETRIES consistently; add POCASI_CZ_MAX_RETRIES.
Utils:
- `voc_level_to_text` / `battery_5step_to_pct` go through `to_int` like every
other value_fn. A bare `int()` raised on a garbage payload value, which
`WeatherSensor.native_value` then logged with a full traceback on every push.
Out-of-range battery steps are clamped to a valid percentage.
- Simplify `check_disabled` (drop the redundant camelCase flag).
Config flow:
- `retain_data` re-reads SENSORS_TO_LOAD at submit time. Auto-discovery appends
to it from the webhook handler, so writing back the snapshot taken when the
step opened silently rolled back any sensor discovered meanwhile.
Coordinator:
- Drop the per-push staleness recalculation; the hourly timer already covers it.
Ecowitt:
- Tolerate aioecowitt moving/renaming the internal SENSOR_MAP rather than
failing the whole module import; unit-variant dedup degrades instead.
Translations:
- Battery state key `unknown` -> `drained`: the entity emits UnitOfBat.UNKNOWN,
whose value is "drained", so the old key never matched and the raw state
leaked into the UI. cs.json was already correct.
- Remove the dead `migration` step; `async_step_migration` does not exist.
Also: remove verified-dead constants/helpers and fix ~30 docstring typos.
integration
- Introduce HealthDiagnosticSensor for device health status reporting
- Add new constants and data keys for health sensor integration
- Wire health_sensor module into sensor platform setup
- Refactor sensor descriptions to improve derived sensor handling
- Implement pytest fixtures and comprehensive tests covering:
- Config flows and options validation
- Data reception and authentication
- Sensor platform setup and dynamic sensor addition
- Push integration with Pocasi.cz and Windy API
- Route dispatching and error handling
- Utilities, conversions, and translation functions