Hi all ![]()
I’ve been working on a custom integration and companion Lovelace card that take a different approach to severe weather alerts, and I’d love feedback from people running HA in regions with active weather.
The problem
If you use Home Assistant for severe weather notifications (NWS, MeteoAlarm, ECCC), you’ve probably run into the same structural limits that motivated this effort. The maintainers of the existing integrations do excellent work, but they’re all fighting the same constraints in the HA state machine:
- The 16 KB attribute limit. The recorder won’t store a state attribute payload larger than ~16 KB. When a big storm rolls in with detailed multipolygon geometry and long-form text, that data can get dropped before it’s persisted.
- The single-sensor bottleneck. Packing several concurrent alerts into one sensor’s attributes means a complex regional outbreak has to share one payload, which compounds the size problem above and makes per-alert automations awkward.
- Lifecycle continuity. When a provider upgrades a watch to a warning (or cancels it), it’s hard to track that as one evolving event without churning state history or spawning duplicate entities.
The experiment: cap_alerts
Instead of cramming everything into sensor attributes, cap_alerts uses an event-driven model that creates exactly one entity per active alert, spawned and removed as alerts come and go. Alert data is modeled on CAP (Common Alerting Protocol) field names, so the same shape works across providers.
The goal here is NOT to replace the existing integrations. I’m aiming to field-test an architectural pattern and see whether it holds up across providers and regions. If it does, I’d like to write it up as a proposal that could make life easier for all weather integration maintainers.
How it works
- Externalized payloads. Heavy data like GeoJSON polygons and long descriptions is held in a bounded in-memory cache and served over a lightweight HTTP endpoint the integration registers, rather than stuffed into state attributes. This sidesteps the 16 KB limit and avoids hammering the recorder (and your SD card) with large writes.
- Lifecycle-aware identity. Each alert gets a stable ID hashed from its event identity rather than the message URL (for NWS that’s the VTEC event tuple, for ECCC a language-independent key). That keeps one entity (and its state history) intact across the New → Update → Cancelled/Expired lifecycle, instead of churning a new entity on every revision.
- Normalized severity. Severity is mapped to canonical CAP tiers (
extreme,severe,moderate,minor) across providers, so a single automation can react to “anything severe or above” regardless of source. - Real-time ingestion where the provider offers it. ECCC alerts arrive over NAAD’s TCP streaming feed as they’re issued, rather than on a poll cycle. Polling is retained as reconnect backfill and a periodic safety resync.
Seven providers as of 0.6.0: NWS (US), ECCC (Canada), MeteoAlarm (EUMETNET / Europe), WMO severe-weather feeds for the ~100 national services without a provider of their own, GDACS (worldwide disasters), BBK (Germany’s civil-protection channels, the backend of the NINA app) and AU (NSW RFS, Queensland, WA and Tasmania under one provider).
New in 0.6.0: Germany and Australia
Two providers landed in 0.6.0, both for places where the existing HA path is about to run out or never existed.
Germany. The card’s adapter over the core nina integration reads attributes that HA 2026.11 removes (home-assistant/core#161882). BBK’s own API is CAP 1.2 as JSON, public and unauthenticated, and it carries what no other HA path has: MoWaS, KATWARN, BIWAPP and the LHP flood portal, alongside the DWD relay. Setup takes a district, a GPS point or a device tracker. If you’re on NINA today, this is the move before 2026.11.
Australia. NSW RFS, Queensland Fire Department, DFES Emergency WA and TasALERT all publish the same EDXL-DE envelope carrying CAP-AU, so it’s one provider with one entry per state. Severity comes from the Australian Warning System tier, not from CAP <severity>, which is uniform on every feed. Most alerts on NSW and QLD are a marker, not a polygon (44 of 99 and 53 of 73 when I profiled them), so markers ship as points and the card draws them and filters by radius. That needs weather_alerts_card 3.5.0 or later. Victoria is GeoJSON and will be its own provider, SA, NT and ACT publish no CAP at all.
The companion card
I also maintain weather_alerts_card, which consumes this entity model natively: severity-driven theming and badges for phase transitions.
Here’s what that looks like in practice; several concurrent placeholder alerts in a single card:
Two color themes side by side (left to right: normalized severity tiers, NWS event colors) in the default and compact layouts.
It also puts those externalized payloads to work. Because the full GeoJSON is served from the integration’s cache instead of being truncated at the attribute limit, the card can draw the complete affected area over a map basemap in the alert’s detail panel. This is a real ECCC severe thunderstorm watch for southern Saskatchewan, 112 municipal polygons in one alert, about 40 KB of geometry on its own, well past what a state attribute could hold:
The basemap comes from Home Assistant’s own map tile proxy (core 2026.9 and later), so no third party sees the alert’s extent. Adaptive svg above, change your theme to see the inverse light/dark example.
Looking for testers and feedback
Before I write up anything formal, I want to make sure the model survives contact with reality. I can’t honestly evaluate every condition and region with the attention they deserve; frankly, I need help testing this approach.
Install: add https://github.com/seevee/cap_alerts to HACS as a custom repository (category Integration), then Add Integration → CAP Alerts.
Links:
- Integration: GitHub - seevee/cap_alerts: HA multi-region weather alerts integration: one entity per active weather alert, modeled on CAP fields. Solves the 16KB attribute limit. · GitHub
- Card: GitHub - seevee/weather_alerts_card: Multi-provider weather alerts card for Home Assistant: NWS, ECCC, MeteoAlarm, BoM, DWD and more, with severity color themes and time-progress bars · GitHub
If you’re somewhere with active weather, I’d love for you to run this alongside your current setup and compare. Feedback on edge cases, dropped or duplicated alerts, and UI quirks would all be hugely appreciated. Thanks!



