Skip to content

v1.8.6

Choose a tag to compare

@eXPerience83 eXPerience83 released this 10 Dec 07:01
1c1d38c

🌼 Pollen Levels v1.8.6

Stable release since 1.8.3.
Focus: map-based setup, safer coordinates and titles, faster manual refresh, and cleaner tooling/runtime alignment.


🚀 Highlights (since 1.8.3)

🗺️ Map-first setup & safer coordinates (1.8.5)

  • The setup flow now uses a map-based location selector instead of raw latitude/longitude fields.
  • Defaults to your Home Assistant location (name + coordinates) when valid, and validates coordinates using HA helpers.
  • Invalid or missing HA coordinates are dropped instead of pre-filling the map at (0,0) or empty locations, and when HA has no usable location the selector simply stays empty until you pick a point.
  • invalid_coordinates errors and translations have been updated to talk about choosing a valid map location, not typing numeric values.
  • Config and re-auth flows still expose short, sanitized error messages for cannot_connect, while setup errors no longer show raw HTTP status codes and options flows use generic localized connectivity messages.

🏷️ Cleaner device titles & options UX (1.8.5–1.8.6)

  • Device names now include the config entry title (for example, Home – Pollen Types) while keeping existing identifiers intact.
  • Empty or whitespace-only titles are normalized to a sensible default name, avoiding blank device labels.
  • Options flow descriptions also display the entry title and map unexpected validation errors to a generic unknown message instead of implying connectivity failures.

⚡ Faster manual refresh for multi-location setups (1.8.6)

  • The pollenlevels.force_update service now refreshes all entry coordinators in parallel, so manual updates are much faster when multiple locations are configured.
  • Per-entry results and failures are logged against the right entries, even if some coordinators are missing, and a single failure no longer aborts other refreshes.

🐍 Python & Home Assistant alignment (1.8.6)

  • Runtime integration code remains compatible with Home Assistant’s Python 3.13 floor.
  • Tooling (formatters, linters, etc.) targets Python 3.14+, and tests enforce requires-python = ">=3.14".
  • The minimum Home Assistant version is now 2025.3.0, and the integration version is finalized at 1.8.6.

🧪 Stronger tests & simpler runtime validation (1.8.4–1.8.6)

  • Added Home Assistant type hints for sensor setup and coordinator helpers, guarded so the lightweight test harness works without a full HA install.
  • Hardened the asyncio test hook and HA stubs to better mirror entity callbacks, fail fast on unexpected running loops, and restore prior loops once tests finish.
  • Stub coordinators now stamp a placeholder last_updated on initial refresh to better match HA semantics.
  • Runtime revalidation of coordinates and forecast ranges has been simplified: config and options flows now enforce these values, leaving just a minimal guard for corrupted entries.
  • Per-day cleanup coverage for D+1/D+2 sensors is consolidated into a single parametrized test, keeping coverage while reducing duplication.
  • Test helpers gained bounds checks and manifest metadata consistency checks to catch misconfigurations earlier in CI.

🔧 Detailed changes

1.8.6 – Parallel force_update, Python/HA alignment, simplified validation

Changed

  • Parallelized the pollenlevels.force_update service so it refreshes all entry coordinators concurrently and logs per-entry failures without aborting other updates.
  • Aligned force_update result logging with the entries that spawned refresh tasks so errors are attributed to the correct location.
  • Clarified tooling-versus-runtime Python guidance: integration code targets Home Assistant’s Python 3.13 floor, while tooling targets Python 3.14+.
  • Added Home Assistant type hints for sensor setup and coordinator helpers and guarded imports so the lightweight test harness can run without the full Home Assistant package installed.
  • Hardened tests by:
    • enforcing requires-python >= 3.14,
    • verifying sensor device metadata trims or defaults titles,
    • strengthening the asyncio test hook and stubs,
    • and stamping stub coordinators with placeholder last_updated values.
  • Raised the minimum Home Assistant requirement to 2025.3.0 and finalized the integration version at 1.8.6.
  • Simplified runtime validation by relying on config and options flows for coordinates and forecast ranges, keeping only a minimal guard for missing/corrupted entries.
  • Consolidated per-day cleanup coverage into a single parametrized test covering D+1/D+2 removal combinations without duplicating setup code.

1.8.5 – Map-based setup & UX improvements

Changed

  • Sanitized map selector defaults and suggested values to drop invalid Home Assistant coordinates instead of pre-filling the map at (0,0) or an empty location, keeping setup reliable even when core location settings are missing.
  • Normalized config entry titles and device translation placeholders to fall back to the default name when users supply blank or whitespace-only titles, preventing empty device labels in the UI.
  • Cleared stale error_message placeholders when unexpected errors surface as unknown in the config flow to avoid misleading details in the setup form.
  • Trimmed whitespace-only names in the ConfigEntry test stub to mirror runtime title handling and keep test behavior aligned with production.
  • Avoided suggesting null map coordinates when Home Assistant has no valid location, keeping the selector empty until the user picks a point.
  • Simplified user-facing connection errors during setup by removing raw HTTP status codes from the error_message placeholder while retaining detailed logging for debugging.
  • Hardened the map selector defaults to validate Home Assistant coordinates and fall back to a safe entry title when core configuration values are missing or invalid, keeping setup usable in edge cases.
  • Expanded the Home Assistant constant test stub with common config keys to improve isolation of sensor tests without altering runtime behavior.
  • Fixed legacy coordinate validation to surface invalid_coordinates on the appropriate field:
    • the map location when present,
    • base-level only for legacy lat/lon reauth forms;
      and aligned the longitude test stub with Home Assistant’s invalid-type behavior. Unexpected validation errors now map to unknown.
  • Simplified options-flow connectivity errors to use generic localized messages without the error_message placeholder, keeping detailed HTTP context limited to setup and reauthentication flows.
  • Updated invalid_coordinates translations across all locales to reference selecting a valid location on the map instead of entering raw latitude/longitude values.
  • Removed the unused entry-name constant and cleaned up import declarations to drop dead code without altering entity identifiers.
  • Removed the unused options.error.invalid_coordinates translation key across all locales to keep translation strings aligned with the current options flow.
  • Updated options flow descriptions so they:
    • show the config entry title, and
    • map unexpected validation errors to the generic unknown message instead of implying connectivity failures.
  • Switched the setup form to a map-based location selector that defaults to the Home Assistant location name and coordinates while validating latitude/longitude with Home Assistant helpers.
  • Updated config-flow messaging and translations to reflect the new map selector and include richer connection and location validation errors.
  • Added sanitized error_message placeholders to cannot_connect responses in the config and reauthentication flows so users see short reasons for HTTP, timeout, and malformed response failures without exposing secrets.
  • Updated the remaining locale setup descriptions to reference selecting a location on the map instead of entering latitude and longitude manually.
  • Replaced Home Assistant common translation placeholders with explicit labels across all locales so the custom integration strings render correctly in setup and options.
  • Updated device names to include the config entry title (for example, Home – Pollen Types) while keeping identifiers unchanged for existing entities.

Added

  • Expanded config flow tests to cover:
    • map selector input,
    • coordinate edge cases,
    • connectivity failures,
      while ensuring normalized coordinates are stored in entries.
  • Added regression coverage ensuring error_message is set when validation maps to cannot_connect, keeping the new placeholder behavior guarded.

1.8.4 – Test helpers & manifest hygiene

Fixed

  • Added a bounds check to the sensor test SequenceSession helper so exhausting the fake response list raises a clear AssertionError instead of an IndexError.
  • Added metadata consistency tests to keep the package name/version aligned with the manifest and catch missing fields early in CI.
  • Corrected the manifest JSON formatting so metadata parses cleanly without trailing separators.

If you’re upgrading from 1.8.3 or earlier, pay special attention to:

  • The new map-based setup and error messages in config/options flows.
  • The minimum Home Assistant 2025.3.0+ requirement.
  • pollenlevels.force_update behavior with multiple locations and the new per-entry logging.

As always, bug reports and feedback are very welcome. 💬

What's Changed

New Contributors

Full Changelog: v1.8.3...v1.8.6