Skip to content

Releases: nodomain/ha-rain-warner

v0.7.0 — Camera entity, interactive radar map, robust motion tracking

Choose a tag to compare

@nodomain nodomain released this 16 Jun 14:39

Highlights

  • Radar camera entity (camera.radarbild) — a rendered local radar crop with a motion-direction arrow, color-coded by intensity.
  • Interactive Leaflet radar map — dark basemap + DWD WMS overlay (same-origin proxy, no API key) with a geo-scaled motion arrow projecting the rain field up to 6 h, with hour ticks and arrival timestamps. Scales with zoom.
  • Fullscreen map view — tap the "Radarkarte" heading to open the map full-screen for better overview.
  • Robust motion tracking — multi-pair TREC estimation with parabolic sub-pixel refinement, search-boundary railing rejection, outlier filtering, and temporal EMA smoothing. The arrow no longer jitters between updates.

Fixed

  • Alarm fatigue: rain_imminent no longer fires on trace radar echoes. The "raining" threshold is now 0.1 mm/h (WMO measurable precipitation) and the imminent alert requires a forecasted peak of >= 0.3 mm/h within 30 min.
  • WMS proxy 502 when DWD returns a Content-Type with a charset parameter.

Full changelog: https://github.com/nodomain/ha-rain-warner/blob/main/CHANGELOG.md

v0.6.7 — Path-based cache busting for the Lovelace card

Choose a tag to compare

@nodomain nodomain released this 05 Jun 05:17

Changed

  • The Lovelace card is now deployed under a content-hashed filename (/config/www/rain-warner-card.<hash>.js) and the registered Lovelace resource URL points at that exact path — no more ?v=<hash> query string. Aggressive PWA / mobile-app caches (notably the HA Companion app on iOS) sometimes ignore query parameters when matching cached responses, so the only reliable way to force a re-fetch is a different filename.
  • deploy.sh now also removes stale hashed copies and the legacy unhashed file from www/ on every deploy so nothing piles up over time.
  • tools/ha_update_card_resource.py now takes a stem URL (/local/rain-warner-card) instead of a full filename and reconciles whichever variant is currently registered (legacy unhashed, old query-string cache-bust, or older hashed path) into the new hashed path. Idempotent on repeat runs.
  • Bumped CARD_VERSION in the card source to 1.0.1 so the console banner reflects the change.

Full Changelog: v0.6.6...v0.6.7

v0.6.6 — Stop retrying failed pysteps installs every boot

Choose a tag to compare

@nodomain nodomain released this 04 Jun 22:01

Changed

  • When the auto-install of pysteps fails on async_setup_entry, the integration now persists a sticky pysteps_install_failed flag in the entry's options and skips the install attempt on subsequent reloads / restarts. This avoids a wasted ~30 s wheel-build (and the resulting error spam in the log) every time HA boots on a system where pysteps cannot be built — most notably HA OS on Python 3.14 with Alpine's noexec /tmp, where pysteps has no musllinux wheels and source builds fail at Cython load time.
  • The simple engine fallback continues to work as before, so sensors keep producing data.
  • Submitting the Configure dialog again clears the flag and retries the install on the next reload — useful after a HA OS upgrade or a pysteps wheel release.

Documentation

  • README now explicitly calls out the Python 3.14 + Alpine HA OS incompatibility and explains how to retry the install once a compatible wheel is available.

Full Changelog: v0.6.5...v0.6.6

v0.6.5 — Actually fix the options-flow 500

Choose a tag to compare

@nodomain nodomain released this 04 Jun 21:52

Fixed

  • The Configure cog still 500'd in 0.6.4 because async_get_options_flow was still calling RainWarnerOptionsFlow(config_entry). With the constructor gone, the parent OptionsFlow.__init__ (= object.__init__) rejects the positional argument and raises TypeError: RainWarnerOptionsFlow() takes no arguments. Modern Home Assistant injects self.config_entry on the handler itself, so the factory now returns RainWarnerOptionsFlow() with no args and the options dialog finally opens.

Verified live: POST /api/config/config_entries/options/flow now returns HTTP 200 with the expected schema (data_source / radius / nowcast_engine).

Full Changelog: v0.6.4...v0.6.5

v0.6.4 — Fix 500 in options flow on modern HA

Choose a tag to compare

@nodomain nodomain released this 04 Jun 21:43

v0.6.4 — Fix 500 in options flow on modern HA

Fixed

  • Removing __init__ from the options flow handler. Modern Home
    Assistant (2024.11+) injects self.config_entry itself and writing
    to that attribute from our own constructor produced a 500 error
    when the user clicked the Configure cog. With the constructor gone
    the framework wires everything up correctly and the options dialog
    loads as expected.

v0.6.3 — Options flow for switching engines / data sources

Choose a tag to compare

@nodomain nodomain released this 04 Jun 21:39

v0.6.3 — Options flow for switching engines / data sources

Added

  • The integration now exposes an OptionsFlow so existing config
    entries can be reconfigured via Settings → Devices & Services → Rain
    Warner → Configure
    . Switching the nowcast engine, data source or
    monitoring radius no longer requires deleting and re-adding the
    integration (which would wipe the persisted rain statistics). Picking
    the pysteps engine here triggers the same automatic dependency
    install introduced in 0.6.2.

v0.6.2 — Auto-install pysteps on HA OS

Choose a tag to compare

@nodomain nodomain released this 04 Jun 21:36

v0.6.2 — Auto-install pysteps on HA OS

Changed

  • Selecting the pysteps engine now triggers an automatic dependency
    install
    via Home Assistant's async_process_requirements API.
    HA OS / Supervised / Container users no longer need shell access to
    pip install pysteps — picking the engine in the config flow is
    enough. First install takes 30–60 s on x86 (numpy + scipy + opencv
    wheels download). Subsequent restarts reuse the installed package.
    Falls back to the simple engine and logs a warning if the install
    fails (e.g. missing wheel for an unusual architecture).
  • README and config-flow help text updated to reflect the new
    zero-shell install path.

v0.6.1 — Robust notification card templates

Choose a tag to compare

@nodomain nodomain released this 04 Jun 21:24

v0.6.1 — Robust notification card templates

Fixed

  • The walldisplay notification cards now read values from the
    triggering binary sensor's own attributes rather than from
    separate sensor entities. The integration writes the alert flag and
    its supporting attributes in the same coordinator pass, so the card
    never has to handle a half-populated state. Also fixes the
    empty-card render that happened when manually overriding the alert
    state for testing.
  • Templates fall back gracefully ("Regen ab gleich" / "Glatteis-Risiko"
    without temperature) when an attribute is unexpectedly missing,
    rather than blowing up silently.

How to test

In Developer Tools → States, set
binary_sensor.rain_warner_rain_imminent to on with attributes:

rain_starts_in_minutes: 18
rain_starts_at: "2026-06-04T21:38:00+00:00"

The notification card should appear within a second showing
"🟦 🌧️ Regen ab 23:38 (in 18 min)".

v0.6.0 — Alert binary sensors, walldisplay cards, iPhone push, mDNS deploy fix

Choose a tag to compare

@nodomain nodomain released this 04 Jun 21:20

v0.6.0 — Alert binary sensors, walldisplay cards, iPhone push, mDNS deploy fix

Added

  • Four derived alert binary sensors that pre-compute the
    conditions users actually want to react to:
    • binary_sensor.rain_warner_rain_imminent — dry now, rain in ≤ 30 min
    • binary_sensor.rain_warner_severe_weather — heavy / violent rain or hail likelihood
    • binary_sensor.rain_warner_winter_weather — snow / sleet / freezing rain
    • binary_sensor.rain_warner_extended_dry_spell — ≥ 7 days dry with no rain in the 6 h forecast
  • automations/rain-warner-push.yaml — reference iOS push
    automations for rain_imminent and severe_weather. Both use
    interruption-level: time-sensitive, share a rain-warner tag
    group so iOS stacks notifications, and are gated to 07:00–22:00
    local time so nothing wakes you up at night.
  • dashboard/notification-cards.yaml — four conditional markdown
    cards (🌧️ rain coming / ⛈️ severe / ❄️ winter / 🌵 dry spell) that
    drop into any walldisplay notification stack. Each card stays
    invisible until its alert flag flips on.
  • New alerts.py module with the pure-stdlib flag logic, separated
    from the coordinator so it's unit-testable without HA imports.

Fixed

  • deploy.sh --restart no longer falsely reports a recovery timeout
    on macOS hosts with flaky mDNS. The script now resolves the HA
    hostname to an IP once at startup and uses that for every
    subsequent probe, dashboard push and cache-bust.

v0.5.1 — Hide rain-start/-end tiles when irrelevant

Choose a tag to compare

@nodomain nodomain released this 04 Jun 20:54

v0.5.1 — Hide rain-start/-end tiles when irrelevant

Fixed

  • The 'Regen ab' tile no longer shows 'Unbekannt' while it's already
    raining — it's hidden via a visibility condition (raining = off).
    Symmetric treatment for 'Regen endet' (visible only when raining =
    on). Cleaner than chasing sentinel values in the sensor itself.