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.
- 🎨 53 visual themes — from subtle
infoto 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_entityfor 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!
- Community Contributors
- Join the Community — HA forum thread, issues, discussions
- Video Tutorial
- Features at a Glance
- Text-to-Speech (TTS) Announcements — Alexa, Google Home, HA speakers
- Mobile Push Notifications
- Music Player Mode — album art, playback controls, vinyl mode
- Camera in Overlay & Card Background — snapshots & live streams
- Themes — all 53 themes explained
- How It Works
- Installation — HACS + manual
- Visual Editor
- YAML Configuration — all options reference
- Examples — real-world configs
- Languages — 12 supported languages
- Troubleshooting
- Contributing
- License
- Support the Project
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)
📢 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.
A big thank you to SmartHomeJunkie for making a dedicated video about AlertTicker Card!
| 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 | NEW — camera_live: true shows a live HLS/WebRTC stream in the overlay banner instead of a static snapshot |
| 🖼️ Camera card background | NEW — camera_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 | NEW — media_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 |
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 samenotify.alexa_media_*/tts.speakservice 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- Enable
tts: trueon any individual alert. - If no
tts_messageis 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, acriticaltheme in Italian produces "Allarme critico: Sensore fumo cucina". - The spoken language is read from
hass.languageand 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.
| 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.
| 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) |
| 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) |
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 samenotify.*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- Enable
push_notify: trueon any individual alert. - If no
push_notify_titleis set, the card uses the alert's badge label (ornameif set). - If no
push_notify_messageis 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.
| 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). |
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 groupString 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 }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| 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 |
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" # pinkSelecting a media_player.* entity in the visual editor automatically:
- Sets theme to
music - Enables
show_player_controls - Sets
state: playingandoperator: =
Switching back to a non-media-player entity reverts to emergency.
| 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 |
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_carduses the entity'sentity_pictureattribute 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_liverequires a camera entity with HLS or WebRTC stream support. Falls back to static snapshot when the<ha-camera-stream>component is not yet loaded.
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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_themeaccepts any theme from the ✅ OK category:success,check,confetti,heartbeat,shield,power,sunrise,plant,lock.
- Configure one or more alerts, each linked to an entity + condition
- When an entity matches the condition (and any extra
conditionsrules), the alert becomes active - Active alerts are sorted by priority (1=most critical)
- The card displays the current alert and auto-cycles through multiple active alerts
- Use ◀ / ▶ buttons (or swipe) to jump between alerts manually
- Tap or hold the card to execute configured actions
- Snooze any alert with 💤 — one tap for fixed duration, or choose from the menu
- 📋 opens the alert history with timestamps
- When no alerts are active and
show_when_clear: true, the card shows the all-clear state (message, clock, or weather)
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) |
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).
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 stateStandard 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_doorWhen
double_tap_actionis set, a single tap waits 300 ms to distinguish the two gestures.
Supported action types: call-service, navigate, more-info, url, none.
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: trueFull 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 IDAny 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.
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: notificationShow 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: intruderThe 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.
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 |
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_deviceSupports the same include/exclude panel as entity_filter and all the same message placeholders ({name}, {state}, {entity}, {device}).
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.
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.
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.DateTimeFormatin 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.
| 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 |
| 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 |
The
splitstyle works with all weather modes includingweather_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.
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.homeThe 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.
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 displaysHow 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
<home-assistant>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_durationseconds, or manually via the × button.
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 |
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.
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.
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_flagTap 📋 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).
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_deviceMessage 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.
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 (✓).
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: countdownUse {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.
- entity: sensor.co2_ppm
operator: ">"
state: "1000"
message: "CO₂ level critical!"Supported operators: = (default), !=, >, <, >=, <=, contains, not_contains.
- entity: sensor.phone
attribute: battery_level
operator: "<"
state: "20"
message: "Phone battery critical"
theme: battery- 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: intruderand— all conditions must match (default)or— at least one condition must match
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.
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 exposes a picture: bin/waste sensors, person trackers, camera thumbnails, weather entities, etc.
alerts:
- entity: sensor.bin_collection
state: "on"
message: 🗑️ Bin day!
use_entity_picture: true
icon_size: 2rem # optional, default 2remicon_image — point directly to any image by path or URL, without needing an entity with entity_picture. Takes priority over use_entity_picture if both are set.
alerts:
- entity: binary_sensor.front_door
state: "on"
message: Porta aperta
icon_image: /local/immagini/porta.png
icon_size: 3remBoth options render a small rounded square image. icon_size accepts any CSS length (2rem, 48px, etc.) and its field appears automatically in the visual editor when either option is active.
{state}, {name}, {entity}, and {device} work in the message field of any alert that has an entity set — not just entity_filter alerts:
- entity: sensor.meter_abe4
operator: "<="
state: "20"
message: "Battery low: {state}%"
secondary_text: "Device: {device}"A static second line displayed below the message. Supports placeholders. Does not require a secondary entity:
secondary_text: "Zone: {name} — Current: {state}"Hide the category badge or replace its text:
show_badge: false # hide completely
badge_label: "URGENT" # or use a custom labelPlay an audio tone when an alert becomes active. Uses the Web Audio API — no files required for the default tones:
- entity: binary_sensor.smoke_detector
state: "on"
message: "Smoke detected!"
sound: true
sound_url: "https://example.com/alarm.mp3" # optional custom soundDefault tones by category: Critical = double high beep · Warning = medium beep · Info = soft beep · OK = rising chime.
Note: requires browser autoplay permission. Works out of the box on wall-mounted tablets with HA Companion.
Always-visible pill-shaped 💤 and 📋 buttons — useful for wall-mounted tablets where hover is not available:
large_buttons: trueEnable a left-swipe gesture to snooze the current alert on touch devices. Works independently of tap_action and hold_action — no conflict:
swipe_to_snooze: trueSwipe at least 60 px horizontally to trigger. Uses the configured snooze_duration (or 1 h if none is set).
A 22%-wide invisible zone on the right side of the card reveals the action buttons (snooze / history / nav arrows) on the first tap. The buttons auto-hide after 4 seconds. Never interferes with tap_action, hold_action, or double_tap_action.
Stack the icon on top and the message below, centered — useful for narrow columns or square card grids:
vertical: trueWorks with all 50 themes. The Ticker theme keeps its horizontal scrolling. Can be combined with ha_theme: true and large_buttons: true.
Adapt the card's color palette to the active Home Assistant global theme:
ha_theme: trueWhen enabled:
- Card background →
--card-background-color - Text →
--primary-text-color/--secondary-text-color - Critical badges/borders →
--error-color - Warning badges/borders →
--warning-color - Info badges/borders →
--info-color - OK badges/borders →
--success-color
All 50 visual themes retain their animations and layouts — only the color palette adapts. Compatible with Mushroom, Material, iOS, and any custom HA theme.
Each alert block also gets a 1px border in its severity color (critical/warning/info/OK), separate from the badge/text colors above. Turn it off per-card while keeping the color-coded badges and icons:
severity_border: falseDefault: true (on) — existing dashboards are unaffected. The border width is also exposed as the --atc-severity-border-width CSS custom property (default 1px) if you'd rather control it theme-wide instead of per-card:
your-theme-name:
atc-severity-border-width: "0px"severity_border: false on the card always wins over the theme variable.
Enable a persistent visible border around the card using the standard HA border style:
card_border: trueDefault: false (off). Uses --ha-card-border-width and --ha-card-border-color from the active HA theme. When card_border is on and the card is otherwise hidden (no alerts, show_when_clear off), a subtle dashed placeholder with a 🔔 icon is shown so the card remains discoverable and editable.
Force all configured alerts to display as active — useful for previewing the card appearance without waiting for real conditions:
test_mode: trueRemember to remove
test_modebefore going live. A yellow banner is shown on the card as a reminder.
In the visual editor, open the Alerts tab → enable Test mode at the bottom → expand any alert to instantly preview it on the card.
- Click the button above or open HACS → Frontend
- Click ⋮ → Custom repositories
- Add
https://github.com/djdevil/AlertTicker-Cardas type Lovelace - Find AlertTicker Card and click Download
- Reload your browser
- Download
alert-ticker-card.jsandalert-ticker-card-editor.jsfrom the latest release - Copy both files to
/config/www/ - Go to Settings → Dashboards → Resources
- Add
/local/alert-ticker-card.jsas a JavaScript module - Reload the browser
No YAML knowledge required. The editor uses a hub-and-spoke layout: the main menu shows all sections as tiles; click any tile to open it.
Next to the classic + Add alert button, a + Add from template... dropdown gives you one-click access to eleven curated preset bundles. Each template uses HA device_class filters so it auto-matches every pertinent entity on your instance — no per-entity picking required.
Basic bundles (one feature per template):
| Template | What it does | Themes used |
|---|---|---|
| 🔋 Battery Monitor | Alerts on every battery entity below 20% | battery3d |
| 🚪 Doors & Windows | Alerts on any door or window sensor left open | caution |
| 🔥 Fire & CO Safety | Smoke and CO detectors, critical priority | fire, toxic |
| 💧 Water Leak | Moisture / leak sensors, critical priority | flood |
| 👁 Motion | All motion sensors triggering | motion |
| 🔄 Software Updates | HA and integration updates available | update |
Advanced bundles (multi-feature showcase):
| Template | What it does | Extra card features |
|---|---|---|
| 🎥 Security Camera | Motion → full-screen camera live overlay | overlay_mode + camera_entity + camera_live |
| 🔔 Doorbell | Persistent alert with camera, sound, TTS, push | Full notification stack in one preset |
| 🏠 People Presence | on_change on any person.* with auto-dismiss |
on_change + auto_dismiss_after |
| 🌡 Climate Comfort | Alert when temperature exits 18–26°C range | Two numeric-operator alerts + frost theme |
| 📡 Devices Offline | Battery sensors going unavailable / unknown |
Array-state match syntax |
Pick one → the template's alerts are appended to your current list (you can edit / delete each one individually afterwards). Alert messages are intentionally minimal ({name} or {name} — {state}%) so the theme's icon and colour palette convey the alert type — no translation needed.
Advanced bundles that require card-level defaults (like overlay_mode: true for camera/doorbell) apply those defaults only if you haven't already set them, so your existing dashboard config is never overwritten.
Duplicates are allowed on purpose — if you want two Battery Monitor alerts with different thresholds, just pick the template twice and tweak.
✨ First-time hint: the very first time you open the editor after upgrading, the templates dropdown pulses with a soft blue glow and a ✨ sparkle badge to draw your attention. Focus the dropdown once and the hint disappears permanently.
For each alert:
| Field | Description |
|---|---|
| Name | Optional display label for this alert in the editor panel (e.g. "Motion sensor floor 1") |
| Entity filter | Text filter with wildcard * — auto-expands to one alert per matched entity |
| Device class | Auto-discover all entities with a given HA device class |
| Entity | Single entity from your HA instance (hidden when filter is active) |
| Attribute | Optional — check attribute instead of entity state (dot-notation supported) |
| Condition | Operator + trigger value (supports Jinja2 templates) |
| on_change | Trigger on any state change (ignores condition fields) |
| auto_dismiss_after | Auto-hide the alert N seconds after it fires |
| time_range | Show alert only within a time window (from/to in HH:MM) |
| visible_to | Restrict visibility to specific HA users |
| Priority | 1 (Critical) → 4 (Low) |
| Message | Text shown when active — supports {name}, {entity}, {state}, {timer}, {device} |
| Secondary text | Static second line — supports placeholders, no entity required |
| Secondary entity | Live value shown below the message |
| Theme | Visual theme — timer entities see only timer themes |
| Icon | Emoji override, or native mdi: icon picker via toggle |
| Icon color | CSS color for the MDI icon (hex, named, or variable) |
| Badge | Show/hide category badge or set a custom label |
| Snooze duration | Per-alert override of global snooze setting |
| Sound | Enable audio notification + optional custom URL |
| TTS | Enable voice announcement — speaker, engine, notify service, custom message |
| Camera | Camera entity; toggle camera_live for live stream in overlay; toggle camera_in_card for camera background in the card slide |
| Secondary value position | below (default) or right — position the secondary value on the same row as the title |
| History message | Custom text recorded in the history log (overrides message for history entries) |
| Extra conditions | AND/OR additional entity conditions |
| Tap action | Action executed on tap (native service control) |
| Hold action | Action executed on hold (500 ms) |
| Double-tap action | Action executed on double-tap (single tap waits 300 ms) |
| Snooze action | Action executed when 💤 is tapped |
You can reorder alerts with ↑ / ↓ buttons.
| Field | Description |
|---|---|
| Cycle interval | Seconds between alerts when multiple are active (default: 5) |
| Transition animation | Animation played when switching alerts (12 options) — preview plays on change |
| Show widget in cycle | Insert the clear widget as a slide in the alert rotation |
| Snooze behaviour | Fixed duration or menu (30min / 1h / 4h / 8h / 24h) |
| Show snooze bar | Toggle the amber snooze reactivation bar |
| History max events | How many history entries to keep (25 / 50 / 100 / 200) |
| TTS enabled | Master toggle to enable or disable all TTS announcements |
| Show history button | Toggle to show or hide the 📋 history button |
| Show snooze button | Toggle to show or hide the 💤 snooze button |
| Field | Description |
|---|---|
| Adapt to HA theme | Adapt colors to the active HA global theme |
| Vertical layout | Stack icon on top, message below, centered |
| Text align center | Center the message text — useful in wide Panel layouts |
| Large buttons | Always-visible pill-shaped 💤 and 📋 buttons |
| Fixed card height | Lock the card height in px to prevent layout shifts |
| Card border | Toggle to show the standard HA border around the card (off by default) |
| Field | Description |
|---|---|
| Enable overlay | Toggle the global floating banner notification |
| Position | Top / Center / Bottom — where the banner appears on screen |
| Duration | Seconds before auto-dismiss (0 = manual close only) |
| Scale | 1 / 1.5 / 2 / 3 — enlarge the banner for wall displays |
The tab shows an ON badge when overlay mode is active.
| Field | Description |
|---|---|
| Show when no alerts | Toggle to keep the card visible when everything is OK |
| Display mode | Message · Clock · Weather · Weather + Clock |
| Clock style | Style variant for clock-only mode (aurora, gold, matrix) |
| Weather badge style | Layout variant for weather modes (stage, split, cinematic) |
| Show date | Toggle date display in clock / weather+clock mode |
| Date position | Above or Below the time digits |
| Weather entity | weather.* entity (shown when mode is Weather or Weather + Clock) |
| Message when clear | Text to show in message mode |
| Theme for all-clear | Visual theme for the all-clear card (OK themes only) |
| Badge label | Custom badge text on the all-clear card |
| Tap / Hold / Double-tap action | Actions for the all-clear card |
| Option | Type | Default | Description |
|---|---|---|---|
cycle_interval |
number |
5 |
Seconds between alerts when cycling |
cycle_animation |
string |
fold |
Transition animation |
show_when_clear |
boolean |
false |
Show card when no alerts are active |
clear_message |
string |
"" |
Message shown in all-clear state (message mode) |
clear_theme |
string |
success |
Theme for all-clear (success, check, confetti, …) |
clear_display_mode |
string |
message |
All-clear widget: message, clock, weather, weather_clock, forecast, weather_forecast |
clear_clock_style |
string |
— | Clock style: aurora, gold, matrix |
clear_weather_style |
string |
— | Weather badge style: stage, split, cinematic |
clear_clock_show_date |
boolean |
true |
Show or hide the date in clock / weather+clock mode |
clear_clock_show_seconds |
boolean |
true |
New in 1.3.9.9.6 — hide seconds from the clock display for a cleaner 15:58 look instead of 15:58:47 |
clear_clock_date_position |
string |
below |
Date position relative to time: above or below |
clear_weather_entity |
string |
null |
weather.* entity for weather/weather_clock modes |
clear_badge_label |
string |
"Resolved" |
Badge text on the all-clear card |
clear_tap_action |
object |
— | Tap action for the all-clear card |
clear_hold_action |
object |
— | Hold action for the all-clear card |
clear_double_tap_action |
object |
— | Double-tap action for the all-clear card |
show_widget_in_cycle |
boolean |
false |
Insert the clear widget as a slide in the alert cycle |
snooze_default_duration |
number |
(menu) | Fixed snooze duration in hours (0.5, 1, 4, 8, 24). Omit for menu. |
show_snooze_bar |
boolean |
true |
Set false to hide the amber snooze reactivation bar and pill |
large_buttons |
boolean |
false |
Always-visible pill-shaped 💤 and 📋 buttons |
swipe_to_snooze |
boolean |
false |
Left-swipe gesture to snooze on touch devices |
vertical |
boolean |
false |
Vertical layout — icon on top, message centered below |
text_align |
string |
left |
center to center message text (useful in wide Panel layouts) |
ha_theme |
boolean |
false |
Adapt card colors to the active HA global theme |
history_max_events |
number |
50 |
Max history entries to keep |
active_state_entity |
string |
— | Per-alert. input_boolean.* entity to write on/off to when this specific alert becomes active or clears. Each alert can target a different boolean. Works only while the browser tab is open. |
card_height |
number |
(auto) | Fixed card height in px — prevents layout shifts when cycling |
font_scale |
number |
1 |
New in 1.3.9.9.7 — proportional zoom for HD / 4K / wall-panel displays. 1 = normal, 1.5 = 50% larger, 2 = double. May require bumping grid_options.rows. |
card_border |
boolean |
false |
Show the standard HA border around the card at all times |
severity_border |
boolean |
true |
Show the 1px severity-colored border around each alert block. Set false to keep badge/icon color coding without the border. Width themeable via --atc-severity-border-width. |
overlay_mode |
boolean |
false |
Show a floating banner when a new alert triggers — visible from any dashboard view |
overlay_position |
string |
top |
Banner position: top, center, or bottom |
overlay_duration |
number |
8 |
Seconds before auto-dismiss (0 = manual close only) |
overlay_scale |
number |
1 |
Banner zoom factor: 1, 1.5, 2, or 3 |
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 if omitted) |
tts_notify_service |
string |
— | Default notify service for Alexa / push (e.g. alexa_media_echo_dot) |
tts_language |
string |
— | Language code passed to tts.speak (e.g. it-IT) |
notify_push_enabled |
boolean |
true |
Master toggle — set false to disable all push notifications globally |
clear_weather_temperature_entity |
string |
— | Override weather temperature with a local sensor entity |
clear_weather_humidity_entity |
string |
— | Override weather humidity with a local sensor entity |
clear_weather_temp_high_entity |
string |
— | Override today's high temperature with a sensor |
clear_weather_temp_low_entity |
string |
— | Override today's low temperature with a sensor |
clear_weather_aqi_entity |
string |
— | Show air quality / PM2.5 from a sensor in the weather badge |
show_history_button |
boolean |
true |
Set false to hide the 📋 history button completely |
show_snooze_button |
boolean |
true |
Set false to hide the 💤 snooze button completely |
test_mode |
boolean |
false |
Show all alerts as active (ignore conditions) — for editor preview only |
alerts |
list |
[] |
List of alert objects |
| Option | Type | Required | Description |
|---|---|---|---|
name |
string |
❌ | Editor display label for this alert panel |
entity |
string |
✅* | Entity ID |
entity_filter |
string |
✅* | Text filter — supports * wildcard (replaces entity) |
entity_filter_exclude |
list |
❌ | Entity IDs to exclude from entity_filter or device_class match |
device_class |
string |
✅* | HA device class (e.g. smoke, battery, motion) — auto-discovers all matching entities |
show_filter_name |
boolean |
true |
Set false to hide the entity friendly name below the message |
attribute |
string |
❌ | Attribute to check instead of state — supports dot-notation (e.g. activity.0.forecast) |
operator |
string |
❌ | = != > < >= <= contains not_contains (default: =) |
state |
string |
✅ | Trigger value — supports Jinja2 templates (e.g. {{ states('input_number.threshold') }}) |
on_change |
boolean |
false |
Trigger on any state change — ignores operator/state |
auto_dismiss_after |
number |
❌ | Auto-hide after N seconds. For on_change: starts on trigger. For condition alerts: starts when condition first becomes true. |
time_range |
object |
❌ | {from: "HH:MM", to: "HH:MM"} — restrict to a time window (midnight crossing supported) |
visible_to |
string|list |
❌ | admin, non_admin, a display-name string, or a list of names |
message |
string |
✅ | Text shown when active — supports {name}, {entity}, {state}, {timer}, {device} |
secondary_text |
string |
❌ | Static second line below the message — supports {state}, {name}, {entity} |
theme |
string |
❌ | Visual theme (default: emergency) |
priority |
number |
❌ | 1–4 (default: 1) |
icon |
string |
❌ | Emoji or mdi: icon override |
use_ha_icon |
boolean |
❌ | Use HA native icon (auto-read from entity, or pick via icon picker) |
use_entity_picture |
boolean |
❌ | Use the entity's entity_picture attribute as the alert icon |
icon_image |
string |
❌ | Static image path (/local/…) or full URL — takes priority over use_entity_picture |
icon_size |
string |
2rem |
Size of the image icon — any CSS length (applies to icon_image and use_entity_picture) |
icon_color |
string |
❌ | CSS color for the MDI icon (requires use_ha_icon: true) |
show_badge |
boolean |
true |
Set false to hide the category badge |
badge_label |
string |
❌ | Custom text for the category badge |
secondary_entity |
string |
❌ | Entity whose live value appears below the message |
secondary_attribute |
string |
❌ | Attribute of secondary_entity to show — supports dot-notation |
show_secondary_name |
boolean |
false |
Show the entity friendly name next to the secondary value |
show_filter_state |
boolean |
false |
Show translated entity state next to the entity name (entity_filter only) |
snooze_duration |
number|null |
❌ | Override global snooze: hours, null for menu, omit to use global |
sound |
boolean |
false |
Play a sound when this alert becomes active |
sound_url |
string |
❌ | Custom .mp3/.wav URL — omit for auto-generated tone |
tts |
boolean |
false |
Read the alert aloud when it becomes active |
tts_entity |
string |
❌ | Override the global media_player.* speaker for this alert |
tts_engine |
string |
❌ | Override the global TTS engine entity |
tts_notify_service |
string |
❌ | Override the global notify service (for Alexa / push) |
tts_notify_type |
string |
tts |
Notify type sent to the service — use announce for Alexa speaker groups |
tts_message |
string |
❌ | Custom spoken text — omit for auto-generated multilingual sentence |
notify_push |
boolean |
false |
Send a push notification when this alert becomes active |
notify_push_service |
string |
❌ | Target notify.* service (without prefix, e.g. mobile_app_iphone) |
notify_push_title |
string |
❌ | Notification title — supports {name}, {state}, {entity}, {device}, Jinja2 |
notify_push_message |
string |
❌ | Notification body — same placeholders; falls back to message if empty |
show_player_controls |
boolean |
❌ | Enable graphical music player UI for media_player.* entities (requires theme: music) |
music_player_color |
string |
❌ | Accent color for the music player UI — any CSS color (default #e040fb) |
music_show_art |
boolean |
true |
Show album artwork in the music player (background blur + thumbnail) |
music_show_title |
boolean |
true |
Show track title (with marquee 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 in the bottom-right corner — calls media_player.turn_off |
music_show_player_picker |
boolean |
false |
Add a cast icon in the bottom-right corner — dropdown to switch the active player for this session |
music_compact_layout |
boolean |
false |
Compact layout: track title + artist move to the top-right column, controls stay left — ideal for small displays |
battery_trim_name |
boolean |
false |
(theme: battery only) Strip the trailing word "Battery" from entity friendly names to shorten long labels |
camera_entity |
string |
❌ | Camera entity for overlay banner and card background |
camera_live |
boolean |
false |
Show a live HLS/WebRTC stream in the overlay banner instead of a static snapshot (requires camera_entity) |
camera_in_card |
boolean |
false |
Show the camera image as a background layer behind the alert card slide (requires camera_entity) |
history_message |
string |
❌ | Custom text recorded in the history log — overrides message for history entries; supports {name}, {state}, {entity} |
secondary_value_align |
string |
below |
Position of the secondary value: below (default, shown under the message) or right (shown on the same row as the title) |
conditions_logic |
string |
❌ | and or or for extra conditions |
conditions |
list |
❌ | Extra entity conditions |
tap_action |
object |
❌ | Action on tap |
hold_action |
object |
❌ | Action on hold (500 ms) |
double_tap_action |
object |
❌ | Action on double-tap (single tap waits 300 ms to distinguish) |
snooze_action |
object |
❌ | Action executed when 💤 is tapped |
*One of entity, entity_filter, or device_class is required.
| Field | Description |
|---|---|
action |
call-service · navigate · more-info · url · none |
service |
HA service in domain.service format |
target |
{entity_id: "..."} |
service_data |
Extra service parameters (object) |
navigation_path |
Path for navigate action |
url_path |
URL for url action |
entity_id |
Entity for more-info action |
type: custom:alert-ticker-card
cycle_animation: slide
alerts:
- entity_filter: "battery"
attribute: battery_level
operator: "<="
state: "20"
message: "Low battery: {name} ({state}%)"
theme: battery
priority: 2
entity_filter_exclude:
- sensor.battery_test_devicetype: custom:alert-ticker-card
show_when_clear: true
alerts:
- entity: sensor.iphone_battery_level
operator: "<="
state: "100" # always active so the widget stays visible
message: "iPhone"
theme: battery3d
charging_entity: binary_sensor.iphone_is_charging # optional — enables ⚡ lightning + cyan colour while chargingThe battery3d theme colours the CSS battery icon and the horizontal progress bar dynamically:
- ≤ 20% red — low battery
- 21–60% orange — medium
- > 60% green — healthy
- Charging cyan with an animated ⚡ inside the icon (overrides the level colour)
Works with any entity that reports a 0–100 numeric state (phones, tablets, laptops, robot vacuums, EVs, IoT sensors, HA Companion battery, etc.).
type: custom:alert-ticker-card
overlay_mode: true
overlay_scale: 1.5
tts_entity: media_player.living_room
alerts:
- entity: binary_sensor.smoke_detector
state: "on"
message: "Smoke detected!"
theme: fire
priority: 1
tts: true
camera_entity: camera.kitchentype: custom:alert-ticker-card
alerts:
- entity: binary_sensor.front_door
state: "on"
message: "Front door is open"
theme: door
tts: true
tts_notify_service: alexa_media_echo_dot_hallway
tts_message: "Attention — the front door has been opened"type: custom:alert-ticker-card
alerts:
- device_class: smoke
state: "on"
message: "Smoke detected: {name}"
theme: fire
priority: 1
tts: true
tts_entity: media_player.all_speakerstype: custom:alert-ticker-card
alerts:
- entity: sensor.outdoor_temperature
operator: ">"
state: "{{ states('input_number.temp_alert_threshold') }}"
message: "Temperature too high: {state}°"
theme: temperaturetype: custom:alert-ticker-card
alerts:
- entity: timer.ad_blocker_paused
state: active
message: "Ad blocking disabled for {timer}"
theme: countdown
priority: 2type: custom:alert-ticker-card
alerts:
- entity: alarm_control_panel.home
state: "triggered"
message: "ALARM TRIGGERED"
priority: 1
theme: emergency
tap_action:
action: call-service
service: alarm_control_panel.alarm_disarm
target:
entity_id: alarm_control_panel.home
service_data:
code: "1234"type: custom:alert-ticker-card
alerts:
- entity: binary_sensor.mailbox
state: "on"
message: "Mail arrived"
theme: notification
snooze_action:
action: call-service
service: input_boolean.turn_off
target:
entity_id: input_boolean.mailbox_flagtype: custom:alert-ticker-card
alerts:
- entity: binary_sensor.front_door
state: "on"
time_range:
from: "22:00"
to: "07:00"
message: "Front door open at night!"
priority: 1
theme: intruder
hold_action:
action: navigate
navigation_path: /lovelace/securitytype: custom:alert-ticker-card
alerts:
- entity: sensor.server_load
operator: ">"
state: "90"
message: "Server CPU at {state}%"
visible_to: admin
theme: warningtype: custom:alert-ticker-card
alerts:
- entity: binary_sensor.front_door
state: "on"
message: "Front door open"
theme: door
notify_push: true
notify_push_service: mobile_app_iphone_di_mario
notify_push_title: "Door Alert"
notify_push_message: "{name} opened at {{ now().strftime('%H:%M') }}"type: custom:alert-ticker-card
alerts:
- entity: media_player.spotify_davide
theme: music
show_player_controls: true
music_player_color: "#00e5ff"
operator: "="
state: playingtype: custom:alert-ticker-card
show_when_clear: true
clear_display_mode: weather_forecast
clear_weather_entity: weather.home
clear_weather_style: default
show_widget_in_cycle: true
alerts:
- entity: binary_sensor.smoke_detector
state: "on"
message: "Smoke detected!"
theme: firetype: custom:alert-ticker-card
show_when_clear: true
clear_display_mode: weather_clock
clear_weather_entity: weather.home
show_widget_in_cycle: true
alerts:
- entity: binary_sensor.smoke_detector
state: "on"
message: "Smoke detected!"
theme: firetype: custom:alert-ticker-card
cycle_interval: 8
cycle_animation: slide
show_when_clear: true
clear_message: "All systems normal"
clear_theme: success
alerts:
- entity: binary_sensor.smoke_detector
state: "on"
message: "Smoke detected in kitchen!"
priority: 1
theme: fire
- entity: binary_sensor.water_leak
state: "on"
message: "Water leak under sink"
priority: 2
theme: flood
- entity: sensor.co2_ppm
operator: ">"
state: "1000"
message: "CO₂ level too high — {state} ppm"
priority: 2
theme: toxic
- entity: binary_sensor.window_contact
state: "on"
message: "Living room window open"
priority: 3
theme: window
secondary_entity: sensor.outdoor_temperatureThe card automatically detects the language from your Home Assistant settings.
| Language | Code | Fallback |
|---|---|---|
| Italian | it |
— |
| English | en |
✅ default |
| French | fr |
— |
| German | de |
— |
| Dutch | nl |
— |
| Vietnamese | vi |
— |
| Russian | ru |
— |
| Danish | da |
— |
| Czech | cs |
— |
| Portuguese | pt |
— |
| Spanish | es |
— |
| Turkish | tr |
— |
TTS fallback messages (auto-generated when no tts_message is set) are available in all 12 languages and adapt automatically to the alert's theme category (critical / warning / info / ok / timer).
Card not appearing after installation
- Add
alert-ticker-card.jsas a JavaScript module in Settings → Dashboards → Resources - Hard-reload the browser (Ctrl+Shift+R / Cmd+Shift+R)
Features not working after update (secondary text, templates, new options)
- HA and browsers cache custom card files aggressively. After updating, always do a hard-reload (
Ctrl+Shift+R/Cmd+Shift+R) or go to Settings → System → Restart → Clear cache and restart. You can verify the running version by searching forCARD_VERSIONin the JS file via browser DevTools.
Entity picker not showing in editor
- Known HA lazy-loading issue. The card handles it automatically. If it still doesn't appear, close and reopen the editor.
Card disappears when alerts resolve
- Set
show_when_clear: trueto keep the card visible.
Trigger state not matching
- State values are case-sensitive exact strings. Use the live Current state hint in the editor or check Developer Tools → States.
Timer not updating
- Ensure the timer entity state is
active. The card readsfinishes_atfrom the timer attributes. Iffinishes_atis missing, the countdown shows--:--.
entity_filter matching too many entities
- Use a more specific filter text, or click individual entities in the editor preview list to exclude them.
Weather widget shows placeholder but entity is configured
- Make sure
clear_display_modeis set toweatherorweather_clockANDclear_weather_entitypoints to a validweather.*entity.
TTS not playing
- Check that
tts_enabledis notfalse. For standard TTS, ensuretts_entityis a validmedia_player.*. For Alexa, settts_notify_serviceto the correctalexa_media_*service name (visible in Developer Tools → Services). The TTS engine is auto-detected from the firsttts.*state — if none is found, settts_engineexplicitly. - TTS and push notifications are fired directly from the browser tab and only work while the dashboard is open. The card does not create any server-side automations. For 24/7 delivery (when the browser is closed), create a native HA automation that calls the same
notify.*ortts.speakservice.
Push notifications not arriving
- Verify
push_notify_enabledis notfalse. Check thatpush_notify_servicematches the service name exactly (e.g.mobile_app_my_phone— without thenotify.prefix). The card sends push via the HA frontend API while the dashboard is open. For 24/7 delivery, create a native HA automation that calls the samenotify.*service.
Camera image not appearing in overlay
- Verify the
camera_entityentity exists and has anentity_pictureattribute in Developer Tools → States. The image is loaded directly from the HA proxied URL — no extra authentication needed on the local network.
See CONTRIBUTING.md for guidelines on reporting bugs, suggesting features, and contributing code.
MIT License — see LICENSE for details.
If you find this card useful, consider buying me a coffee ☕






