3.6.0 is the consolidation of the 3.6 alpha + beta + rc line. Two big new overlays (lightning + DWD wind), a request-architecture rework that cuts wind-data HTTP traffic by ~100×, and a long tuning pass on the streamline visuals.
What's new
Lightning overlay (3.6.0-alpha1)
Live lightning strikes from the Blitzortung HA integration, rendered with no extra HTTP from the card — the integration handles all the data plumbing.
- Each strike appears as a brief lightning-bolt flash (the "happening now!" indicator), and after 30 s settles into a coloured + sign.
- Fill colour ages through Blitzortung's web-map gradient (white → yellow → orange → coral → red → dark red), mirroring their map.
- Click any strike for a popup with distance / cardinal-bearing from map centre, relative time, and a deep link into the Blitzortung web map at the strike location.
- Two-pane outline-vs-fill rendering — overlapping strikes don't dissolve into a "black blob" at low zoom; the topmost colour fill stays clean on top.
- Editor toggle is disabled + dimmed when the Blitzortung integration isn't loaded, with a tooltip explaining how to enable it.
type: custom:weather-radar-card
show_lightning: true
lightning_max_age_minutes: 30 # card-side cap; integration's own setting is the upper bound
lightning_pulse: true # appearance flash; honours prefers-reduced-motion
# lightning_icon_size: 14 # YAML-only; pixel size for the + signDWD wind overlay (3.6.0-beta1, refined through rc4)
Three independent styles, all client-rendered from the same ICON-D2 10 m wind layer DWD's WarnWetter app uses:
dwd_wind: barbs— meteorological wind barbs (NH convention, feathers CCW of staff). Calm cells render as open circles.dwd_wind: arrows— discrete downwind arrows colour-coded by Beaufort-ish bands (calm grey → light green → fresh teal → orange → storm red).dwd_wind_flow: true— animated streamlines à la earth.nullschool.net / WarnWetter. Canvas2D with per-particle trail buffers, ~1500 particles. Stacks with barbs/arrows.
The ICON-D2 model is global, so the overlay is available regardless of data_source — stack it on RainViewer / NOAA radar too. The editor has a new Wind Overlay subpage under MARKERS AND OVERLAYS. dwd_time_override and forecast_minutes anchoring is still DWD-only.
Streamlines respect OS-level prefers-reduced-motion (decorative — barbs/arrows still convey direction & speed).
type: custom:weather-radar-card
data_source: DWD
dwd_wind: arrows
dwd_wind_flow: true
dwd_wind_density: 1 # 0.25–4, on-screen barb/arrow grid density
dwd_wind_size: 1 # 0.5–2, independent multiplier on icon size
# YAML-only colour overrides for streamlines:
# dwd_wind_flow_color_light: 'rgb(25,30,45)'
# dwd_wind_flow_color_dark: 'rgba(255,255,255,0.85)'
# dwd_wind_flow_color_sat: 'rgb(255,255,255)'Other new features
- Static-frame radar mode (3.6.0-alpha2) —
past_minutes: 0/ "Off (static frame, no animation)" preset shows a single frame that still refreshes every 5 minutes, no animation loop. - NWS alert paint order (3.6.0-alpha3) — now lexicographic over (severity, urgency, certainty), so a Tornado Warning Observed correctly paints over a Tornado Warning Radar-Indicated. CAP-standard fields, no event-name regex.
- DWD coverage-overlay theme variables (3.6.0-alpha4) —
--dwd-coverage-dim-colorand--dwd-coverage-outline-color(set either totransparentto hide).
Architecture: bulk WCS fetch
Wind data is now fetched in one WCS GetCoverage call per refresh (was up to 290 parallel WMS GetFeatureInfo calls in the alpha line). When both static icons and streamlines are active, a request-coalescing cache means they share one fetch. Hour-aligned scheduling fires at HH:00:30 — exactly when the model bucket changes — instead of polling on a fixed interval. For continental viewports, WCS Scaling adaptively downsamples server-side (~2 MB max vs. ~25 MB at native).
Bug fixes
- DWD coverage-mask cross-fade pulse (3.6.0-alpha4) — the grey "no-data" wash and magenta outline that DWD bakes into every tile were stacking during cross-fade, producing a visible pulse on the boundary every animation tick. Fixed by stripping the mask at fetch time and re-rendering the boundary as a snap-switched overlay. Contributed by @genericJE.
- Edit-mode regression — radar tiles disappearing when entering Lovelace edit mode.
- Dateline wrap on the wind layer — Pacific-centred low-zoom views previously left the wrapped strip without wind data.
- Wind streaks render below markers / popups (the streak canvas used to overlay everything).
- Static-frame mode (
past_minutes: 0): radar layer no longer disappears on first pan. - Tab-hidden particle jump: returning to a backgrounded tab no longer paints multi-second-long streak segments.
- z9+ density and length plateau at z8: city-zoom views were ~70% denser and streaks ~3× longer than the calibrated z8 reference. Now plateaus.
Security
Defensive escapeHtml on all three popup href interpolations (NWS, wildfire, lightning). Closes a theoretical attribute-breakout via NWS props.uri; wildfire / lightning were safe by construction but hardened against future refactors.
Streamline visual tuning (cumulative across the rc line)
- Explicit per-particle ring buffer (60 positions) replaces
destination-outaccumulation. - 15 fps target with motion compensation — ~4× lower CPU than uncapped raf.
- Cubic ease-in fade-out (~1 sec) at end-of-life and at the canvas edge.
- Per-basemap colour defaults (satellite white, light basemaps deeper grey-blue, dark basemaps near-white) + YAML overrides.
- Low-zoom density taper, line-width compensation, sharper trail decay.
Internal
- Tests: 314 → 403 across the 3.6 line (lightning helpers, WCS parsing, sampler bilinear/nearest, fetcher URL building, request coalescing, DWD pixel classification, NWS three-axis sort).
- New custom Leaflet panes:
wrc-lightning/wrc-lightning-outline(z 499/500),wrcWindFlow(z 250) — clean stacking between basemap and markers.
Upgrade notes
No breaking changes. Existing configs work unchanged. To enable the new overlays:
- Lightning: install the Blitzortung integration, then add
show_lightning: true(or use the editor toggle). - Wind: add
dwd_wind: arrows(orbarbs) and/ordwd_wind_flow: true— works on anydata_source.
Full Changelog: v3.5.0...v3.6.0