SWS-12500-custom-component/custom_components/sws12500
SchiZzA 5e4b02fd6e
fix: address remaining review findings across forwarders and utils
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.
2026-07-25 21:47:54 +02:00
..
translations fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
__init__.py fix: block enabling legacy and Ecowitt protocols together 2026-07-25 21:47:53 +02:00
battery_sensors.py feat(device): merge all entities into one shared device with station-type model 2026-07-25 21:47:53 +02:00
battery_sensors_def.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
binary_sensor.py fix(correctness): reload-window guards, rate-limit races, ecowitt flush, dt_util 2026-07-25 21:47:52 +02:00
config_flow.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
conflicts.py fix: block enabling legacy and Ecowitt protocols together 2026-07-25 21:47:53 +02:00
const.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
coordinator.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
data.py fix: block enabling legacy and Ecowitt protocols together 2026-07-25 21:47:53 +02:00
diagnostics.py fix(security)+i18n: stop health-attribute leak, mask secrets in logs, sync translations 2026-07-25 21:47:52 +02:00
ecowitt.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
health_coordinator.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
health_sensor.py feat(device): merge all entities into one shared device with station-type model 2026-07-25 21:47:53 +02:00
icons.json Refactor SWS12500 integration for push-based updates 2026-07-25 21:45:07 +02:00
legacy.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
manifest.json chore(quality): manifest keys, ConfigEntryNotReady, remove dead sqlite code 2026-07-25 21:47:52 +02:00
pocasti_cz.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
routes.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
sensor.py feat(device): merge all entities into one shared device with station-type model 2026-07-25 21:47:53 +02:00
sensors_common.py fix: coordinator reuse, route dispatcher, binary sensor translations & test suite alignment 2026-07-25 21:47:50 +02:00
sensors_weather.py fix: address review findings across forwarders and helpers 2026-07-25 21:47:51 +02:00
sensors_wslink.py fix: address review findings across forwarders and helpers 2026-07-25 21:47:51 +02:00
staleness.py Add stall sensor detection. 2026-07-25 21:47:50 +02:00
strings.json fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
sws12500 Add health diagnostic sensor and extensive tests for sws12500 2026-07-25 21:45:08 +02:00
utils.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00
windy_func.py fix: address remaining review findings across forwarders and utils 2026-07-25 21:47:54 +02:00