Profile
Back to NewsBack
GitHub Trending 19 min
Reader Mode
djdevil/AlertTicker-Card: The most complete alert & notification card for Home Assistant — 53 themes, TTS, push, overlay banner, media player, weather widget. Zero YAML required.

djdevil/AlertTicker-Card: The most complete alert & notification card for Home Assistant — 53 themes, TTS, push, overlay banner, media player, weather widget. Zero YAML required.

6 hours ago



AlertTicker Card for Home Assistant

AlertTicker Card logo for Home Assistant Lovelace

The most complete alert & notification card for Home Assistant Lovelace dashboards
53 visual themes, TTS voice announcements, push notifications, global overlay banner, media player mode, weather forecast widget, and a full visual editor. Zero YAML required.

HACS Version HACS Action Downloads Stars License Discussions Buy Me A Coffee

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.


✨ What makes AlertTicker different

  • 🎨 53 visual themes — from subtle info to cinematic 3D, timer countdowns, weather badges, and a full music-player mode with album art
  • Trigger on anything — entity state, attribute, template, device class, entity filter with wildcards, AND/OR logic
  • 📢 Notify everywhere — in-dashboard cycling ticker, global overlay banner visible from any view, TTS (Alexa / Google / any speaker), push notifications, camera snapshots & live streams
  • 🌍 12 languages — IT, EN, FR, DE, NL, VI, RU, DA, CS, PT-BR, ES, TR
  • 🎯 Per-alert control — themes, time windows, user visibility, snooze, priority, actions, group/collapse, active_state_entity for HA automations
  • 🖼️ Full visual editor — configure every option in the GUI, no YAML needed
  • 📱 Mobile-first UX — swipe to snooze, invisible touch zones, HA Companion push support

If this card saves you time, consider buying me a coffee — it keeps the updates coming!
> Buy Me A Coffee</a>

📚 Table of Contents


Community Contributors

A special thank you to @edwardtich1 for contributing the full Russian (RU) language translation — covering all card labels, editor UI, theme defaults, and operator names. (#53)

A special thank you to @vdt2210 for contributing the Vietnamese (VI) language translation. (#12)

A special thank you to @kgn3400 for contributing the full Danish (DA) language translation — covering all card labels, editor UI, theme defaults, operator names, and overlay strings. (#57)

A special thank you to @feixm1 for contributing the full Czech (CS) language translation — covering all card labels, editor UI, theme defaults, operator names, and overlay strings. (#74)

A special thank you to @Bsector for contributing the Portuguese / pt-BR language translation — providing the core card runtime strings that formed the basis of the full pt-BR support now included in the card. (#90)

A special thank you to @yunusuztr for contributing the full Turkish (TR) language translation — covering all card labels, editor UI, theme defaults, TTS prefixes, operator names, and overlay strings. (#134)


💬 Join the Community

📢 Official thread on the Home Assistant Community Forum →

Share your setup, ask questions, showcase your themes, and get help from other users and from the developer.


🎥 Video Tutorial

A big thank you to SmartHomeJunkie for making a dedicated video about AlertTicker Card!

AlertTicker Card - SmartHomeJunkie</a>


!AlertTicker Card logo — Home Assistant Lovelace alert and notification card

!AlertTicker Card demo showing multiple alerts cycling with animated 3D fold transitions in Home Assistant dashboard


!AlertTicker Card themes for Home Assistant — warning and info alert styles with icons

!AlertTicker Card multi-alert display with success, ticker, neon and matrix themes for Home Assistant Lovelace


Features at a Glance

| Feature | Details | |---------|---------| | Themes | 50 visual themes in 6 categories (including 4 timer themes and 8 new 3D spectacular themes) | | Animations | 12 selectable transition animations between alerts | | Per-alert theme | Each alert has its own independent theme | | Multiple entities | Unlimited alerts per card | | Priority system | 4 levels — Critical, Warning, Info, Low | | tap / hold / double-tap | Standard Lovelace card interactions per alert | | Attribute triggers | Trigger on any entity attribute (e.g. battery_level) | | AND / OR conditions | Multiple entities must match (all or at least one) | | Numeric conditions | Trigger on >, <, >=, <=, != for sensor values | | on_change | Trigger on any state change regardless of condition — with optional auto-dismiss | | time_range | Restrict any alert to a specific time window (e.g. 22:00–07:00, midnight crossing supported) | | visible_to | Restrict alert visibility to specific HA users (admin, non_admin, or by display name) | | secondary_entity | Live entity value shown below the message | | Jinja2 templates | Full HA template syntax in messages — rendered server-side with live updates | | Jinja2 in state | Trigger threshold driven by a helper entity via {{ states(...) }} template | | entity_filter | Text filter — one alert per matched entity, with exclude list and wildcard * support | | device_class | Auto-discover all entities with a given HA device class (e.g. smoke, battery, motion) | | Auto-icon | Automatically uses the entity's HA icon when no icon is set | | Custom icon namespaces | Any icon namespace works: mdi:, hass:, hue:, phu:, cil: and more | | Alert navigation | ◀ ▶ buttons + left/right swipe to jump between active alerts | | Snooze | Suspend any alert — fixed duration or menu — persisted in localStorage | | snooze_action | Execute a Lovelace action when the 💤 button is tapped | | Alert history | 📋 button flips the card to a timestamped event log | | Timer themes | 4 animated themes for timer.* entities with live countdown | | HA icons | Use any mdi: icon per alert via native icon picker | | Entity picture / custom image | Use the entity's entity_picture attribute or a static /local/ path as the alert icon | | Sound notifications | Per-alert audio — auto-generated tones or custom URL | | 🔊 TTS announcements | Read alerts aloud via HA TTS, Alexa, or any notify service. Multilingual fallback messages auto-generated from alert theme (12 languages) | | 📱 Push notifications | Send a push notification to any notify.* service when an alert fires. Full Jinja2 support for title and message. Global master toggle. | | 📷 Camera snapshot | Attach a live camera frame to the overlay banner, scaled proportionally with overlay zoom | | 📹 Camera live stream | NEWcamera_live: true shows a live HLS/WebRTC stream in the overlay banner instead of a static snapshot | | 🖼️ Camera card background | NEWcamera_in_card: true uses the camera image as a full-bleed background layer behind any alert card slide | | Overlay scale | Enlarge the overlay banner up to 3× for wall-mounted displays | | 🎵 Music player mode | NEWmedia_player entity shown as a cinematic player card with album art, equalizer, and controls | | 🌤 7-day forecast widget | NEW — full forecast grid or alternating weather+forecast display mode | | Weather/time in cycle | Insert the clock/weather widget as a slide in the alert rotation | | Large buttons | Always-visible pill-shaped 💤 and 📋 buttons | | Persistent alerts | persistent: true — alert stays visible after sensor clears, requires manual ✕ dismiss | | Swipe to snooze | Swipe left on the card to snooze (or dismiss if persistent: true) — no conflict with tap_action | | Invisible touch zone | Right-side tap zone shows action buttons on mobile without interfering with tap_action | | Vertical layout | Stack icon on top, message below, centered — all 50 themes | | HA theme adaptation | ha_theme: true adapts colors to any active HA global theme | | Overlay notification | Global floating banner — fires from any dashboard view, with top / center / bottom position and auto-dismiss | | Clear widget | Animated clock or weather display (condition + temp + wind + humidity) when no alerts are active | | 6 new clear styles | Clock: aurora, gold, matrix — Weather badge: stage, split, cinematic | | Card border | Toggle to show the standard HA border around the card — always visible, off by default | | Test mode | Force-preview all alerts in the editor regardless of conditions | | Visual editor | Full GUI — no YAML required | | Languages | Italian, English, French, German, Dutch, Vietnamese, Russian, Danish, Czech, Portuguese (pt-BR), Spanish, Turkish — 12 languages | | 🔗 active_state_entity | Per-alert option — write on/off to any input_boolean when that specific alert becomes active or clears. Each alert can target a different boolean, wiring them to independent HA automations (lamp, script, push notification…) | | Performance | Signature-based dirty check — no unnecessary re-renders |


🔊 Text-to-Speech Announcements (new in 1.2.2)

Make Home Assistant read your alerts aloud the moment they trigger — on any speaker, Alexa Echo device, or Google Home.

⚠️ Client-side limitation: TTS is fired by the card itself, which runs in the browser. It works only while at least one browser tab has Home Assistant open (desktop, wall tablet, or the HA Companion app running in the foreground). For 24/7 unattended TTS announcements on critical events, use a server-side HA automation with the same notify.alexa_media_* / tts.speak service call.
# Standard HA TTS (media_player + TTS engine)
alerts:
  - entity: binary_sensor.smoke_detector
    state: "on"
    message: "Smoke detected!"
    theme: fire
    tts: true                            # enable TTS for this alert
    tts_entity: media_player.living_room # speaker to use
    # tts_engine: tts.google_en_com      # auto-detected if omitted
# Alexa Echo (via notify service)
alerts:
  - entity: binary_sensor.front_door
    state: "on"
    message: "Front door open"
    tts: true
    tts_notify_service: alexa_media_echo_dot_kitchen
    tts_message: "Attention — the front door is open"   # optional custom sentence

How it works

  • Enable tts: true on any individual alert.
  • If no tts_message is set, the card auto-generates a natural sentence from a built-in dictionary in 10 languages, based on the alert's theme category. For example, a critical theme in Italian produces "Allarme critico: Sensore fumo cucina".
  • The spoken language is read from hass.language and falls back to English automatically.
  • Set a global master toggle (tts_enabled: false) in the General tab to disable all TTS at once without losing per-alert settings.

TTS service options

| Method | When to use | Config | |--------|-------------|--------| | Standard TTS | HA media players, Sonos, Chromecast | tts_entity (speaker) + optional tts_engine | | notify service | Alexa, Google Home via notify, mobile push | tts_notify_service (any notify.* service) |

Per-alert fields override global card-level defaults, so you can have one speaker for most alerts and a different one for critical alerts.

Card-level TTS options

| Option | Type | Default | Description | |--------|------|---------|-------------| | tts_enabled | boolean | true | Master toggle — set false to silence all TTS globally | | tts_entity | string | — | Default media_player.* speaker entity | | tts_engine | string | (auto) | TTS engine entity (auto-detected from first tts.* state) | | tts_notify_service | string | — | Default notify service for Alexa / push | | tts_language | string | — | Language code passed to tts.speak (e.g. it-IT) |

Per-alert TTS options

| Option | Type | Description | |--------|------|-------------| | tts | boolean | Enable TTS for this alert | | tts_entity | string | Override the global speaker for this alert | | tts_engine | string | Override the global TTS engine | | tts_notify_service | string | Override the global notify service | | tts_message | string | Custom spoken text (supports {name}, {state}, Jinja2) |


📱 Mobile Push Notifications (new in 1.3)

Send a push notification to any Home Assistant notify.* service the moment an alert fires — works with the HA Companion App, Telegram, Pushover, and any other notify integration.

⚠️ Client-side limitation: push notifications are fired by the card, which runs in the browser. They work only while at least one browser tab has Home Assistant open (desktop, wall tablet, or the HA Companion app running in the foreground). If nobody is looking at HA at 3 am, no push will be sent even if a sensor triggers. For 24/7 critical alerts (smoke, security, water leak, …), always create a server-side HA automation that calls the same notify.* service — the card push is best used as a convenience layer on top.
alerts:
  - entity: binary_sensor.front_door
    state: "on"
    theme: door
    message: "Front door open"
    push_notify: true
    push_notify_service: mobile_app_my_phone         # required
    push_notify_title: "🚪 Door Alert"               # optional, Jinja2
    push_notify_message: "Door opened — {state}"     # optional, Jinja2

How it works

  • Enable push_notify: true on any individual alert.
  • If no push_notify_title is set, the card uses the alert's badge label (or name if set).
  • If no push_notify_message is set, the card uses the alert's display message (same text shown in the ticker).
  • Both fields support {state}, {name}, {entity}, {device} placeholders and full Jinja2 templates.
  • Set a global master toggle (push_notify_enabled: false) in the General tab → 📱 Push Notifications to disable all push notifications at once without touching individual alerts.

Per-alert push notification options

| Option | Type | Description | |--------|------|-------------| | push_notify | boolean | Enable push notification for this alert | | push_notify_service | string | notify.* service name (e.g. mobile_app_my_phone, notify.telegram) | | push_notify_title | string | Notification title — Jinja2, defaults to badge label | | push_notify_message | string | Notification message — Jinja2, defaults to alert message | | push_notify_data | object | New in 1.3.9.9.4 — arbitrary payload passed through to the notify.* service under the data key. Enables actionable notifications, critical alerts (bypass DND), custom push sounds, attachments, tag/group. String values are template-resolved (see example below). |

Actionable & critical push notifications (new in 1.3.9.9.4)

Use push_notify_data to unlock every feature the HA Companion apps and other notify integrations support:

- entity: switch.master_ensuite_fan
  state: 'on'
  push_notify: true
  push_notify_service: mobile_app_john
  push_notify_title: '💨 Master en-suite fan'
  push_notify_message: 'Fan left running in {area}'
  push_notify_data:
    push:
      sound:
        name: Bloom.caf
        volume: 1
      interruption-level: time-sensitive   # iOS: bypass focus modes
    actions:
      - action: TURN_OFF_MASTER_ENSUITE_FAN
        title: Turn Off Fan
        destructive: true
      - action: URI
        title: Open Camera
        uri: /lovelace/cameras
    tag: alert_master_ensuite_fan          # replace previous notification with same tag
    group: bathroom                        # Android: notification group

String values inside push_notify_data are template-resolved by the card's usual renderer, so {state}, {name}, {area}, {trigger_state} and full Jinja2 {{ ... }} work inside actions/titles/URIs.

Handle the action returned by the user in a server-side automation:

- alias: 'Turn off master en-suite fan from push action'
  trigger:
    platform: event
    event_type: mobile_app_notification_action_received
    event_data:
      action: TURN_OFF_MASTER_ENSUITE_FAN
  action:
    service: switch.turn_off
    target: { entity_id: switch.master_ensuite_fan }

🎵 Music Player Mode (new in 1.2.6)

Turn any media_player.* entity into a full graphical player card. When show_player_controls: true is set and the entity is a media player, the music theme renders a cinematic player UI instead of the default floating notes.

alerts:
  - entity: media_player.spotify_davide
    theme: music
    show_player_controls: true
    music_player_color: "#e040fb"   # optional accent color

What the player shows

| Element | Description | |---------|-------------| | Album art background | Blurred, saturated backdrop pulled from entity_picture | | Spinning vinyl | Circular album art thumbnail on the right — spins while playing, stops on pause | | Equalizer bars | 3 animated bars pulse next to "NOW PLAYING" when playing; ◼ pause dot when paused | | Track info | media_title as title, media_artist below | | Playback controls | ⏮ previous · ⏸/▶ play-pause · ⏭ next | | Mute toggle | 🔇/🔊 — highlights in accent color when muted | | Volume slider | Live range slider — gradient fills to current level, updates in real time while dragging | | Accent line | Animated gradient line at the bottom, pulses in the accent color |

Accent color

All colors in the player UI (buttons, glow, equalizer, vinyl ring, accent line) are driven by a single --mu-accent CSS custom property, set from music_player_color. Change it from the editor's color picker to instantly retheme the entire player:

music_player_color: "#00e5ff"   # cyan
music_player_color: "#69f0ae"   # green
music_player_color: "#ff4081"   # pink

Auto-setup in the editor

Selecting a media_player.* entity in the visual editor automatically:

  • Sets theme to music
  • Enables show_player_controls
  • Sets state: playing and operator: =
Switching back to a non-media-player entity reverts to emergency.

Player-mode options

| Option | Type | Default | Description | |--------|------|---------|-------------| | show_player_controls | boolean | false | Enable the graphical player UI (requires media_player.* entity) | | music_player_color | string | #e040fb | Accent color for all player UI elements — any CSS color | | music_show_art | boolean | true | Show album artwork (background blur + thumbnail) | | music_show_title | boolean | true | Show track title (with marquee scroll for long titles) | | music_show_artist | boolean | true | Show artist name | | music_show_controls | boolean | true | Show previous / play-pause / next / mute buttons and volume slider | | music_show_power | boolean | false | Add a power icon (bottom-right corner) — calls media_player.turn_off | | music_show_player_picker | boolean | false | Add a cast icon (bottom-right corner) — opens a dropdown to switch the active player for this session | | music_compact_layout | boolean | false | Compact layout: track title and artist move to the top-right column, controls stay left — ideal for small/narrow displays |


📷 Camera in Overlay Banner & Card Background (snapshot: 1.2.2 · live stream + card bg: 1.3.1)

Attach a camera image to an alert — either as a snapshot in the overlay banner, a live stream in the banner, or a background layer behind the alert card slide.

alerts:
  - entity: binary_sensor.front_door_motion
    state: "on"
    message: "Motion at front door"
    theme: intruder
    camera_entity: camera.front_door     # required for all camera features
    overlay_mode: true                   # show overlay banner at card level
    camera_live: true                    # live stream in banner (default: false = snapshot)
    camera_in_card: true                 # camera background in the card slide

| Option | Description | |--------|-------------| | camera_entity | Camera entity whose image is used | | camera_live | true = live HLS/WebRTC stream in the overlay banner; false (default) = static snapshot | | camera_in_card | true = camera image shown as a background layer behind the alert card slide on every rotation |

  • The snapshot/stream appears below the alert header row inside the overlay toast. Its height scales proportionally with overlay_scale.
  • camera_in_card uses the entity's entity_picture attribute as a CSS background image, visible across the full card behind a semi-transparent overlay. Works with all 50 themes.
  • If a snapshot fails to load, the image is silently removed and the banner stays intact.
  • camera_live requires a camera entity with HLS or WebRTC stream support. Falls back to static snapshot when the component is not yet loaded.

Themes

🚨 Critical

| Theme | Icon | Visual style | |-------|------|-------------| | emergency | 🚨 | Dark red card with pulsing red glow and flashing siren icon | | fire | 🔥 | Deep orange card with flame flicker animation | | alarm | 🔴 | Black card with rapid red strobe effect | | lightning | 🌩️ | Dark purple card with electric glow and lightning flash | | nuclear | ☢️ | Dark amber card with slowly rotating radiation symbol and radial glow pulse | | flood | 🌊 | Deep blue card with animated horizontal water waves | | motion | 👁️ | Dark green night-vision infrared scan effect | | intruder | 🚷 | Black card with red siren flash and rotating warning icon | | toxic | ☠️ | Black/green card with rising poison bubbles |

⚠️ Warning

| Theme | Icon | Visual style | |-------|------|-------------| | warning | ⚠️ | Dark amber card with orange left border and pulsing dot | | caution | 🟡 | Black/yellow card with diagonal stripe bar and blinking dot | | radar | 🎯 | Dark green card with circular sonar display, sweeping cone and concentric rings | | temperature | 🌡️ | Dark orange card with shaking thermometer and animated fill bar | | battery | 🔋 | Dark card with blinking battery drain animation | | battery3d | 🔋 | New in 1.3.9.9.6 — CSS battery icon that fills based on the entity value, horizontal progress bar, dynamic colour (green > 60% / orange 21–60% / red ≤ 20%). Optional charging_entity shows ⚡ lightning bolt and switches to cyan while charging | | door | 🚪 | Dark card with animated mdi:door-open icon that pivots on its hinge (CSS perspective rotateY) | | window | 🪟 | Dark card with mdi:window-open-variant swinging on a top-pivot (rotateX) | | smoke | 🌫️ | Dark grey card with drifting smoke puff animation | | wind | 💨 | Dark card with fast horizontal streak lines | | leak | 💧 | Dark blue card with animated drip effect |

ℹ️ Info

| Theme | Icon | Visual style | |-------|------|-------------| | info | ℹ️ | Dark blue card with blue left border and circular icon wrap | | notification | 🔔 | Deep navy card with blue app-icon bubble and pulsing red badge | | aurora | 🌌 | Dark card with shifting aurora gradient background | | hologram | 🔷 | Holographic card with grid lines, horizontal scan beam and glitch flicker | | presence | 🏠 | Dark cyan card with expanding ping rings radiating from icon | | update | 🔄 | Dark card with spinning double progress ring | | cloud | ☁️ | Soft floating cloud pulse | | satellite | 📡 | Radiating signal waves | | tips | 💡 | Amber lightbulb glow | | light | 🔆 | Warm incandescent glow with conical light beam fanning out from icon; bulb flares on pulse | | music | 🎵 | Dark purple/magenta card with musical notes (♪ ♫ ♩ ♬) floating upward and pulsing icon glow |

✅ OK / All Clear

| Theme | Icon | Visual style | |-------|------|-------------| | success | ✅ | Dark green card with green left border | | check | 🟢 | Dark green card with pulsing ring around icon | | confetti | 🎉 | Dark green card with floating coloured particles | | heartbeat | 💓 | Dark card with scrolling ECG line at the bottom and beating pulse ring | | shield | 🛡️ | Dark teal card with rotating scan wave and glow pulse | | power | ⚡ | Dark green card with energy surge lines and lightning zap | | sunrise | 🌅 | Warm golden rising light | | plant | 🌱 | Green growing pulse | | lock | 🔒 | Deep blue secure pulse |

🎨 Style

| Theme | Icon | Visual style | |-------|------|-------------| | ticker | 📰 | Full-width scrolling news ticker bar with all active alerts | | neon | ⚡ | Cyberpunk black card with cyan/magenta glow and scanning line | | glass | 🔮 | Glassmorphism card with purple/pink gradient and frosted border | | matrix | 💻 | Terminal-style green-on-black monospace card with blinking cursor | | minimal | 📋 | Clean light card with dynamic accent left border | | retro | 📺 | CRT amber phosphor card with scanlines, screen flicker and warm glow | | cyberpunk | 🤖 | Neon purple/cyan diagonal stripes with glitch bar | | vapor | 🌸 | Vaporwave perspective grid with pink/cyan gradient | | lava | 🌋 | Black card with floating orange lava blobs |

⏱️ Timer (available for timer. entities and sensors with device_class: timestamp)*

| Theme | Icon | Visual style | |-------|------|-------------| | countdown | ⏱️ | Horizontal progress bar at the bottom that shrinks as time passes. Pulses red when < 20% remaining. | | hourglass | ⏳ | Background vertical fill that drains from top to bottom, like sand in an hourglass. | | timer_pulse | 💥 | Card glows with a pulsing halo — pulse speed increases as time runs out. | | timer_ring | 🔵 | SVG circular ring on the right side with the countdown in the center. |

All timer themes transition green → orange → red as the remaining time decreases. When using a device_class: timestamp sensor (e.g. an Alexa/Echo timer sensor), the progress bar is hidden since no total duration is known — the countdown still shows.

Note: The clear_theme accepts any theme from the ✅ OK category: success, check, confetti, heartbeat, shield, power, sunrise, plant, lock.

How It Works

Alert lifecycle

  1. Configure one or more alerts, each linked to an entity + condition
  2. When an entity matches the condition (and any extra conditions rules), the alert becomes active
  3. Active alerts are sorted by priority (1=most critical)
  4. The card displays the current alert and auto-cycles through multiple active alerts
  5. Use ◀ / ▶ buttons (or swipe) to jump between alerts manually
  6. Tap or hold the card to execute configured actions
  7. Snooze any alert with 💤 — one tap for fixed duration, or choose from the menu
  8. 📋 opens the alert history with timestamps
  9. When no alerts are active and show_when_clear: true, the card shows the all-clear state (message, clock, or weather)

Transition animations

When multiple alerts are active, the card cycles using the selected animation:

| Animation | Description | |-----------|-------------| | fold (default) | 3D page-turn along the X axis | | slide | Horizontal push left/right | | fade | Cross-dissolve opacity fade | | flip | RotateY card flip | | zoom | Scale punch in/out | | glitch | Clip-path jitter digital noise | | bounce | Elastic spring from below | | swing | RotateZ pendulum | | blur | Gaussian dissolve | | split | Vertical split (top up, bottom down) | | roll | RotateY + translateX combined roll | | curtain | Opens from center (theater curtain) |

Manual alert navigation

When 2 or more alerts are active, and buttons appear on the left/right edges on hover (first touch on mobile). Clicking jumps to the previous/next alert and resets the auto-cycle timer. On mobile, left/right swipe also navigates (if swipe_to_snooze is enabled, left-swipe keeps its snooze behaviour and only right-swipe navigates).

Secondary entity value

Display a live entity value as a second line below the alert message:

- entity: sensor.open_zones
  operator: "!="
  state: "0"
  message: "Zones open"
  secondary_entity: sensor.open_zones_list
  secondary_attribute: zone_names   # optional — read an attribute instead of state

tap_action / hold_action / double_tap_action

Standard Lovelace interactions — tap, hold (500 ms), or double-tap the whole card to trigger any action:

- entity: binary_sensor.front_door
  state: "on"
  message: "Front door open"
  tap_action:
    action: more-info
    entity_id: binary_sensor.front_door
  hold_action:
    action: navigate
    navigation_path: /lovelace/security
  double_tap_action:
    action: call-service
    service: lock.lock
    target:
      entity_id: lock.front_door
When double_tap_action is set, a single tap waits 300 ms to distinguish the two gestures.

Supported action types: call-service, navigate, more-info, url, none.

confirmation — ask before executing (new in 1.3.9.9.5)

Any of the action fields (tap_action, hold_action, double_tap_action, snooze_action, and the card-level clear_*_action) now support the HA-native confirmation field. When set, a confirmation dialog appears before the action fires — perfect for destructive operations:

- entity: alarm_control_panel.home
  state: "triggered"
  message: "Disarm alarm"
  tap_action:
    action: call-service
    service: alarm_control_panel.alarm_disarm
    target:
      entity_id: alarm_control_panel.home
    confirmation:
      text: "Are you sure you want to disarm the alarm?"

Short form — reuse the default text:

confirmation: true

Full form with per-user exemptions:

confirmation:
  text: "Are you sure you want to unlock the door?"
  exemptions:
    - user: "<HA_USER_ID>"   # Devs → Persons → Users → copy the User ID

Any user listed under exemptions skips the prompt — useful when you want the owner to bypass while guests must confirm.

Fully editable in the visual editor: every action section now has an Ask for confirmation toggle with an optional custom message field.

on_change — trigger on any state change

Fire an alert whenever an entity changes state, regardless of the operator/state condition. The alert stays visible until the next state change, or auto-dismisses after auto_dismiss_after seconds:

- entity: media_player.living_room
  on_change: true
  auto_dismiss_after: 15
  message: "Now playing: {state}"
  theme: notification

time_range — restrict to a time window

Show an alert only within a specific time window. Supports midnight crossing:

- entity: binary_sensor.front_door
  state: "on"
  message: "Door open at night!"
  time_range:
    from: "22:00"
    to: "07:00"
  theme: intruder

The card re-evaluates at each minute boundary so alerts appear and disappear on time without any entity state change. Leave both fields empty for always-active.

visible_to — per-alert user filter

Restrict an alert to specific Home Assistant users without separate cards or conditional wrappers:

- entity: sensor.server_load
  state: "high"
  message: "Server load critical"
  visible_to: admin          # admin | non_admin | "John" | ["John", "Maria"]

| Value | Effect | |-------|--------| | admin | Admins only | | non_admin | Non-admin users only | | "Display Name" | Single user by display name | | ["Name1", "Name2"] | Multiple users by display name | | (omit) | Shown to everyone |

device_class — auto-discover by device class

Instead of listing individual entities or writing a text filter, specify a HA device class. The card auto-discovers every entity with that class and creates one alert per match:

- device_class: smoke
  state: "on"
  message: "Smoke detected: {name}"
  theme: fire
  priority: 1
  • device_class: battery
attribute: battery_level operator: "<=" state: "15" message: "Low battery: {name} ({state}%)" theme: battery entity_filter_exclude: - sensor.battery_test_device

Supports the same include/exclude panel as entity_filter and all the same message placeholders ({name}, {state}, {entity}, {device}).

Jinja2 in the state trigger field

The trigger threshold itself can be a Jinja2 template — useful when the threshold is stored in a helper entity:

- entity: sensor.outdoor_temperature
  operator: ">"
  state: "{{ states('input_number.temp_alert_threshold') }}"
  message: "Temperature too high: {state}°"

Any HA template that evaluates to a string or number works here.

All-clear widget (clock / weather / forecast)

When show_when_clear: true is set and no alerts are active, the card can show an animated clock, live weather display, or 7-day forecast instead of a plain text message:

show_when_clear: true
clear_display_mode: weather_forecast   # see modes below
clear_weather_entity: weather.home

| Mode | Display | |------|---------| | message | Standard all-clear text message (default) | | clock | Animated digital clock with date, deep navy background and blue glow | | weather | Animated weather background with condition, temperature, wind speed, humidity | | weather_clock | Weather background + clock badge in top-right corner | | forecast | NEW — full 7-day forecast grid: emoji, high/low temp, precipitation bars, today highlighted | | weather_forecast | NEW — alternates every 5 s between current weather + clock and 7-day forecast |

Weather modes show full animated particle backgrounds (sun rays, stars/moon/aurora, floating clouds, fog, wind streaks, rain, snow, hail, lightning, exceptional). All weather info and the clock are rendered as frosted-glass corner badges so the animated sky stays fully visible.

🗓️ 7-day forecast widget

The forecast and weather_forecast modes display a full-width daily forecast grid sourced from HA's weather/subscribe_forecast WebSocket API (HA 2023.9+):

  • Weather emoji and condition label for each day
  • High / low temperatures color-coded: blue (cold) → amber (warm) → red (hot)
  • Precipitation probability bar visible when ≥20%
  • Today's column elevated with frosted glass, floating emoji animation, and accent glow
  • Day labels auto-localized via Intl.DateTimeFormat in all 11 supported languages
When used with show_widget_in_cycle: true, the card ensures both the weather panel and forecast panel have been shown before advancing to the next alert.

Clock styles (clear_display_mode: clock)

| Style | Visual | |-------|--------| | (default) | Deep navy background, blue glow digits | | aurora | Animated northern-lights gradient background, green glow | | gold | Warm golden hue, thin weight digits | | matrix | Black background, monospace green digits with scanline glow |

Weather badge styles (all weather modes)

| Style | Layout | |-------|--------| | (default) | Animated sky, frosted corner badges | | stage | Large centered clock on top; weather compacted into a single horizontal frosted pill below | | split | Card divided into two equal full-height panels — left: weather icon + temperature, right: clock | | cinematic | Animated weather background fills the entire card; all info condensed into a transparent caption bar pinned to the bottom | | wallpanel | Default layout with larger weather typography for wall-mounted displays; hides high/low temperatures and wind and focuses on temperature + humidity |

The split style works with all weather modes including weather_forecast — the first panel shows weather + clock side by side, then alternates with the 7-day forecast.

Configure these in the editor (All Clear tab). Use clear_clock_show_date to toggle the date display, and clear_clock_date_position (above / below) to choose its position relative to the time.

Weather/time as a slide in the alert cycle

Insert the configured clear widget (clock / weather / weather+clock) as an extra slide in the alert rotation — displayed between alerts like any other:

show_widget_in_cycle: true
clear_display_mode: weather_clock
clear_weather_entity: weather.home

The widget uses the same cycle_animation and cycle_interval as alerts. Enable this in the editor (Cycling & Animation section), visible only when clear_display_mode is already configured.

Overlay / toast notification

Enable a global floating banner that fires when a new alert triggers — visible from any dashboard view, not just the one where the card lives:

overlay_mode: true
overlay_position: top     # top | center | bottom
overlay_duration: 8       # seconds before auto-dismiss (0 = manual close only)
overlay_scale: 1.5        # 1 | 1.5 | 2 | 3 — enlarge for wall displays

How it works:

  • When the card's view is currently visible, the banner is suppressed (no redundant notification — the card itself already shows the alert).
  • When you navigate away to another view (or the card is off-screen), an independent watcher reads entity states from the always-present element every 2 seconds and fires the banner automatically.
  • A 10-second deduplication window prevents the same alert from firing twice.
  • The banner is styled according to the alert category (Critical / Warning / Info / OK / Style / Timer) and dismisses automatically after overlay_duration seconds, or manually via the × button.

Overlay scale

Use overlay_scale to enlarge the entire banner for wall-mounted tablets or TVs:

| Value | Effect | |-------|--------| | 1 | Default size | | 1.5 | 50% larger — font, icon, padding, border-radius all scale | | 2 | Double size — ideal for wall tablets | | 3 | Triple size — for TV or kiosk displays |

The max-width grows with the scale while staying within the viewport. Camera snapshot images (if set) also scale proportionally.

Position options: | Value | Behavior | |-------|----------| | top | Slides in from the top of the screen | | center | Pops in at the center of the screen (scale animation) | | bottom | Slides in from the bottom of the screen |

Snooze

Tap 💤 on any active alert to snooze it. Two modes (configurable in General tab):

  • Menu (default) — choose 1h / 4h / 8h / 24h from a menu on the card
  • Fixed duration — configure 30min / 1h / 4h / 8h / 24h for immediate one-tap snooze
Snoozed alerts persist in localStorage and the card restores them automatically when the duration expires. A small amber 💤 pill appears when some alerts are snoozed while others remain active — tap it to resume all.

🔄 Cross-device sync (new in 1.3.9.9.5)

If you have multiple browser tabs / wall panels / mobile devices all showing the same alert, snoozing, dismissing, or clearing a persistent alert on one device now propagates to all the others in real time. No configuration required — the card uses Home Assistant's WebSocket event bus (alertticker_sync events) to broadcast state changes. Each card instance ignores its own broadcasts via a per-tab device ID, so there are no loops.

Works for all state transitions:

  • Snooze / unsnooze
  • Dismiss / reset all dismissed
  • Persistent alert dismiss
Note: Because the sync uses live events, a device that was offline (browser closed) when a snooze happened won't automatically catch up when it comes back online. In that case its local storage still holds the last-known state until the next sync event or the alert re-triggers.

Requires admin user (since 1.3.9.9.6): Home Assistant restricts custom-event WebSocket subscriptions to admin/owner accounts only. For non-admin users the card silently skips subscribing (no HA log noise, no errors) and falls back to local-only snooze/dismiss — exactly like pre-1.3.9.9.5. If you want cross-device sync to work for a specific user, that user needs the admin role in Home Assistant.

snooze_action

Execute a Lovelace action when the 💤 button is tapped, in addition to snoozing. Useful for resetting sensors:

- entity: binary_sensor.mailbox
  state: "on"
  message: "Mail arrived"
  snooze_action:
    action: call-service
    service: input_boolean.turn_off
    target:
      entity_id: input_boolean.mailbox_flag

Alert history

Tap 📋 to flip the card and view a timestamped log of every alert that became active. Includes a Clear button. History is stored in localStorage (configurable max: 25 / 50 / 100 / 200 events).

entity_filter

Instead of specifying a single entity, write a text filter. The card finds all entities whose ID or friendly name contains the filter text and creates one alert per match:

- entity_filter: "battery"
  attribute: battery_level
  operator: "<="
  state: "20"
  message: "Low battery: {name} ({state}%)"
  theme: battery
  entity_filter_exclude:
    - sensor.battery_test_device

Message placeholders:

| Placeholder | Replaced with | |---|---| | {name} | Entity friendly name | | {entity} | Entity ID | | {state} | Current state value (translated) | | {device} | HA device name from the device registry | | {area} | HA area name (from entity or device area assignment) | | {timer} | Live countdown for timer.* entities (mm:ss / h:mm:ss) | | {trigger_state} | State the entity had when the alert first fired — useful for persistent: true alerts where the sensor may return to normal while the alert stays visible | | {trigger_attribute} | Attribute value at fire time (only when attribute: is set) | | {trigger_time} | Local time string of when the alert first fired |

The matched entity's friendly name is also automatically shown below the message so you always know which device triggered the alert.

HA template syntax in messages

The message field (and secondary_text) supports full Jinja2 template syntax — rendered server-side by Home Assistant via the WebSocket API, with live updates whenever entities change.

# Simple sensor value
  • entity: sensor.co2_ppm
operator: ">" state: "1000" message: "CO₂: {{ states('sensor.co2_ppm') }} ppm"

Attribute value

  • entity: climate.hvac
state: heating message: "Heating — room: {{ state_attr('climate.hvac', 'current_temperature') }}°"

Conditional logic

  • entity: sensor.battery_phone
operator: "<" state: "20" message: > {% if states('sensor.battery_phone') | int < 10 %} Critical: {{ states('sensor.battery_phone') }}% {% else %} Low battery: {{ states('sensor.battery_phone') }}% {% endif %}

Time / date

  • entity: binary_sensor.night_mode
state: "on" message: "Night mode active since {{ now().strftime('%H:%M') }}"

Math / unit conversion

  • entity: sensor.power_consumption
operator: ">" state: "2000" message: "High consumption: {{ (states('sensor.power_consumption') | float / 1000) | round(2) }} kW"

Any template that works in HA automations and template sensors works here too.

Editor preview: type a filter text and a live counter shows how many entities match. Click the counter to expand a full list with names, entity IDs and current states. Click any entity to exclude it (✗) or re-include it (✓).

Timer themes

Select a timer.* entity and use one of the 4 dedicated timer themes. The card reads finishes_at from the timer attributes and updates the display every second:

- entity: timer.ad_blocker_paused
  state: active
  message: "Ad blocking disabled for {timer}"
  theme: countdown

Use {timer} in the message to display the live countdown (mm:ss or h:mm:ss).

When a timer entity is selected in the editor, state is automatically set to active and the theme switches to countdown.

Numeric / comparison conditions

- entity: sensor.co2_ppm
  operator: ">"
  state: "1000"
  message: "CO₂ level critical!"

Supported operators: = (default), !=, >, <, >=, <=, contains, not_contains.

Attribute-based triggers

- entity: sensor.phone
  attribute: battery_level
  operator: "<"
  state: "20"
  message: "Phone battery critical"
  theme: battery

AND / OR multi-entity conditions

- entity: binary_sensor.front_door
  state: "on"
  conditions_logic: "and"
  conditions:
    - entity: input_boolean.night_mode
      operator: "="
      state: "on"
  message: "Door open at night"
  theme: intruder
  • and — all conditions must match (default)
  • or — at least one condition must match

HA icons (mdi:)

Enable the use_ha_icon toggle per alert to use a native HA icon instead of an emoji. When enabled, the card first reads the entity's icon from the HA entity registry — so you get the correct icon automatically without setting it manually. You can also pick any mdi: or hass: icon from the native HA icon picker in the editor. Combine with icon_color to tint the icon with any CSS color.

Any icon namespace is accepted — not just mdi: and hass:. Icons from hue:, phu:, cil:, and any other custom set registered via extra_module_url work automatically.

Entity picture / custom image as icon (new in 1.3.9.8)

Two new options let you use an image instead of an emoji or MDI icon.

use_entity_picture — pulls the image HA shows for the entity (entity_picture attribute). Works with any entity that ex

... (README truncated for length)

Chat with me