🙏 Both feature PRs in this release are contributions from @genericJE — really substantial work and patient iteration through the review cycles. Thank you!
This is a prerelease for soak-testing before the 3.4.0 stable. Two big new features and one important crossfade fix.
Added
- DWD radar source (#114) —
data_source: DWDuses Deutscher Wetterdienst'sNiederschlagsradarWMS atmaps.dwd.de. 5-minute frame steps (vs. RainViewer's public 10-minute tier), ~3 days of history, +2 hours of forecast available via theRadar_*-product_*layers. Coverage is the German radar network footprint (Germany + immediate neighbours). dwd_layer— DWD-only WMS layer name override. DefaultNiederschlagsradar(mm/h). Set toRadar_wn-product_1x1km_gerfor reflectivity (dBZ) with 2-hour nowcast frames included.dwd_time_override— DWD-only ISO timestamp to anchor frames at a fixed point in time instead of "now". Useful for verifying the overlay renders when current weather is dry.dwd_forecast_hours— DWD-only. Includes this many hours of nowcast forecast in the playback range as if they were "current". Auto-switches to the analysis+nowcast layer that carries +2h frames.- DWD-coloured colour bar —
data_source: DWDshows a horizontal strip using DWD'sNiederschlagsradarpalette (15 bands sampled from DWD's official legend), replacing the misleading universal-blue scale used as a fallback before. - DWD coverage check — emits a one-shot
console.warnwhen HA's configured location falls outside the bounding box of Germany and its immediate neighbours, so the inevitable no-data grey wash isn't mistaken for a broken card. smooth_animation(#113) — when `true`, the crossfade fully spans the inter-frame interval so the radar appears to flow continuously instead of stepping. Overrides `transition_time`.
Changed
- DWD rate limiter raised to 500/min (from the initial conservative 120/min). DWD's
maps.dwd.deis fronted by Akamai with no documented per-IP limit; 120 was visibly throttling pan/zoom bursts without ever seeing 429s. 500/min matches RainViewer. - DWD tiles requested at 512×512 instead of the default 256×256 — quarters the request count for the same coverage.
Fixed
- Crossfade no longer pulses against light basemaps (#113). The previous symmetric crossfade animated outgoing 1→0 while incoming 0→1; mid-transition, both at 0.5 alpha-composited to ~0.75 visibility — letting 25% of the basemap show through every transition. Replaced with a three-layer z-stack: new frame snaps to opacity 0 above the previous one, fades to
radar_opacity; the immediately-previous frame stays fully visible underneath (so transparent pixels in the new frame don't briefly expose the basemap); the frame before that simultaneously fades from full opacity to 0 (so old data dissolves smoothly instead of snapping out). At the loop boundary — when the player wraps from the last frame back to the first after the restart pause — transitions snap instead of fading, since a smooth crossfade across the loop reads as "time ran backwards" given the natural pause has already broken perceived continuity. - Internal options no longer leak into WMS GetMap URLs.
FetchWmsTileLayerwas passing its full options object to Leaflet'sL.TileLayer.WMS.initialize, which appends any unrecognised option as a query parameter — requests carried tail-ends like&rateLimiter=[object%20Object]&on429=...&animationOwnsOpacity=true. Now strips internal fields before delegating. Affects both NOAA and DWD WMS layers.
Testing
Please install the prerelease via HACS (toggle "Show beta versions") or by manually copying dist/weather-radar-card.js into /config/www/community/weather-radar-card/. Issues to watch for:
- DWD users: confirm the colour bar matches DWD's standard palette, the rate limiter no longer throttles normal panning, and forecast frames render when
dwd_forecast_hours > 0. - All users: confirm the crossfade is smooth with no white pulse on light basemaps, and that the loop-boundary snap reads cleanly.
- Browser DevTools network tab: WMS URLs for NOAA / DWD should be clean, no leaked internal options.
Bug reports → issues.