{"id":47700693,"url":"https://github.com/djdevil/alertticker-card","last_synced_at":"2026-04-20T23:03:57.247Z","repository":{"id":347664194,"uuid":"1194828288","full_name":"djdevil/AlertTicker-Card","owner":"djdevil","description":"A custom Lovelace card to display alerts and notifications based on entity states.","archived":false,"fork":false,"pushed_at":"2026-04-15T22:07:54.000Z","size":8970,"stargazers_count":126,"open_issues_count":3,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-15T22:12:00.986Z","etag":null,"topics":["alert","custom-card","dashboard","hacs","home-assistant","home-automation","javascript","javascript-library","lit-element","lovelace-card","lovelace-custom-card","notification","ticker"],"latest_commit_sha":null,"homepage":"https://github.com/djdevil/AlertTicker-Card","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/djdevil.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-28T21:36:30.000Z","updated_at":"2026-04-15T22:07:35.000Z","dependencies_parsed_at":"2026-04-04T21:01:10.050Z","dependency_job_id":"5aced0f1-444c-4dfe-9bf9-01a0dfbe2940","html_url":"https://github.com/djdevil/AlertTicker-Card","commit_stats":null,"previous_names":["djdevil/alertticker-card"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/djdevil/AlertTicker-Card","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djdevil%2FAlertTicker-Card","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djdevil%2FAlertTicker-Card/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djdevil%2FAlertTicker-Card/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djdevil%2FAlertTicker-Card/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/djdevil","download_url":"https://codeload.github.com/djdevil/AlertTicker-Card/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djdevil%2FAlertTicker-Card/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31865078,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alert","custom-card","dashboard","hacs","home-assistant","home-automation","javascript","javascript-library","lit-element","lovelace-card","lovelace-custom-card","notification","ticker"],"created_at":"2026-04-02T17:09:04.617Z","updated_at":"2026-04-16T00:01:22.003Z","avatar_url":"https://github.com/djdevil.png","language":"JavaScript","funding_links":["https://www.buymeacoffee.com/divil17f"],"categories":[],"sub_categories":[],"readme":"# AlertTicker Card for Home Assistant\n\nA custom Lovelace card to display alerts and notifications based on entity states. Supports **40 visual themes** (including 4 dedicated timer themes), 12 transition animations, card interactions, entity filter, alert history, snooze, secondary entity values, timer countdown, full Jinja2 template support, vertical layout, HA global theme adaptation, and a complete visual editor — all without writing a single line of YAML.\n\n[![hacs_badge](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://github.com/custom-components/hacs)\n[![Version](https://img.shields.io/badge/version-1.1.9-blue.svg)](https://github.com/djdevil/AlertTicker-Card)\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-support-yellow.svg?logo=buy-me-a-coffee)](https://www.buymeacoffee.com/divil17f)\n\n[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=djdevil\u0026repository=AlertTicker-Card\u0026category=plugin)  [![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/divil17f)\n\n---\n\n## Video Tutorial\n\nA big thank you to **[SmartHomeJunkie](https://www.youtube.com/@SmartHomeJunkie)** for making a dedicated video about AlertTicker Card!\n\n[![AlertTicker Card - SmartHomeJunkie](https://img.youtube.com/vi/pXRYqlzeUb8/maxresdefault.jpg)](https://youtu.be/pXRYqlzeUb8)\n\n---\n\n![AlertTicker Card](images/logo.png)\n\n![AlertTicker Card demo](images/demo.gif)\n\n---\n\n![Warning and Info themes](images/1.png)\n\n![OK, Style and Multiple Alerts](images/2.png)\n\n---\n\n## Features at a Glance\n\n| Feature | Details |\n|---------|---------|\n| **Themes** | **40** visual themes in 6 categories (including 4 timer themes) |\n| **Animations** | **12** selectable transition animations between alerts |\n| **Per-alert theme** | Each alert has its own independent theme |\n| **Multiple entities** | Unlimited alerts per card |\n| **Priority system** | 4 levels — Critical, Warning, Info, Low |\n| **tap_action / hold_action** | Standard Lovelace card interactions per alert |\n| **Attribute triggers** | Trigger on any entity attribute (e.g. `battery_level`) |\n| **AND / OR conditions** | Multiple entities must match (all or at least one) |\n| **Numeric conditions** | Trigger on `\u003e`, `\u003c`, `\u003e=`, `\u003c=`, `!=` for sensor values |\n| **secondary_entity** | Live entity value shown below the message |\n| **Jinja2 templates** | Full HA template syntax in messages — rendered server-side with live updates |\n| **entity_filter** | Text filter — one alert per matched entity, with exclude list and wildcard `*` support |\n| **Snooze** | Suspend any alert — fixed duration or menu — persisted in localStorage |\n| **snooze_action** | Execute a Lovelace action when the 💤 button is tapped |\n| **Alert history** | 📋 button flips the card to a timestamped event log |\n| **Timer themes** | 4 animated themes for `timer.*` entities with live countdown |\n| **HA icons** | Use any `mdi:` icon per alert via native icon picker |\n| **Sound notifications** | Per-alert audio — auto-generated tones or custom URL |\n| **Large buttons** | Always-visible pill-shaped 💤 and 📋 buttons |\n| **Swipe to snooze** | Swipe left on the card to snooze — no conflict with `tap_action` |\n| **Vertical layout** | Stack icon on top, message below, centered — all 40 themes |\n| **HA theme adaptation** | `ha_theme: true` adapts colors to any active HA global theme |\n| **Test mode** | Force-preview all alerts in the editor regardless of conditions |\n| **Visual editor** | Full GUI — no YAML required |\n| **Languages** | Italian, English, French, German, Dutch, Vietnamese |\n| **Performance** | Signature-based dirty check — no unnecessary re-renders |\n\n---\n\n## Themes\n\n### 🚨 Critical\n\n| Theme | Icon | Visual style |\n|-------|------|-------------|\n| `emergency` | 🚨 | Dark red card with pulsing red glow and flashing siren icon |\n| `fire` | 🔥 | Deep orange card with flame flicker animation |\n| `alarm` | 🔴 | Black card with rapid red strobe effect |\n| `lightning` | 🌩️ | Dark purple card with electric glow and lightning flash |\n| `nuclear` | ☢️ | Dark amber card with slowly rotating radiation symbol and radial glow pulse |\n| `flood` | 🌊 | Deep blue card with animated horizontal water waves |\n| `motion` | 👁️ | Dark green night-vision infrared scan effect |\n| `intruder` | 🚷 | Black card with red siren flash and rotating warning icon |\n| `toxic` | ☠️ | Black/green card with rising poison bubbles |\n\n### ⚠️ Warning\n\n| Theme | Icon | Visual style |\n|-------|------|-------------|\n| `warning` | ⚠️ | Dark amber card with orange left border and pulsing dot |\n| `caution` | 🟡 | Black/yellow card with diagonal stripe bar and blinking dot |\n| `radar` | 🎯 | Dark green card with circular sonar display, sweeping cone and concentric rings |\n| `temperature` | 🌡️ | Dark orange card with shaking thermometer and animated fill bar |\n| `battery` | 🔋 | Dark card with blinking battery drain animation |\n| `door` | 🚪 | Dark card with swinging door animation and light ray |\n\n### ℹ️ Info\n\n| Theme | Icon | Visual style |\n|-------|------|-------------|\n| `info` | ℹ️ | Dark blue card with blue left border and circular icon wrap |\n| `notification` | 🔔 | Deep navy card with blue app-icon bubble and pulsing red badge |\n| `aurora` | 🌌 | Dark card with shifting aurora gradient background |\n| `hologram` | 🔷 | Holographic card with grid lines, horizontal scan beam and glitch flicker |\n| `presence` | 🏠 | Dark cyan card with expanding ping rings radiating from icon |\n| `update` | 🔄 | Dark card with spinning double progress ring |\n\n### ✅ OK / All Clear\n\n| Theme | Icon | Visual style |\n|-------|------|-------------|\n| `success` | ✅ | Dark green card with green left border |\n| `check` | 🟢 | Dark green card with pulsing ring around icon |\n| `confetti` | 🎉 | Dark green card with floating coloured particles |\n| `heartbeat` | 💓 | Dark card with scrolling ECG line at the bottom and beating pulse ring |\n| `shield` | 🛡️ | Dark teal card with rotating scan wave and glow pulse |\n| `power` | ⚡ | Dark green card with energy surge lines and lightning zap |\n\n### 🎨 Style\n\n| Theme | Icon | Visual style |\n|-------|------|-------------|\n| `ticker` | 📰 | Full-width scrolling news ticker bar with all active alerts |\n| `neon` | ⚡ | Cyberpunk black card with cyan/magenta glow and scanning line |\n| `glass` | 🔮 | Glassmorphism card with purple/pink gradient and frosted border |\n| `matrix` | 💻 | Terminal-style green-on-black monospace card with blinking cursor |\n| `minimal` | 📋 | Clean light card with dynamic accent left border |\n| `retro` | 📺 | CRT amber phosphor card with scanlines, screen flicker and warm glow |\n| `cyberpunk` | 🤖 | Neon purple/cyan diagonal stripes with glitch bar |\n| `vapor` | 🌸 | Vaporwave perspective grid with pink/cyan gradient |\n| `lava` | 🌋 | Black card with floating orange lava blobs |\n\n### ⏱️ Timer *(only available for `timer.*` entities)*\n\n| Theme | Icon | Visual style |\n|-------|------|-------------|\n| `countdown` | ⏱️ | Horizontal progress bar at the bottom that shrinks as time passes. Pulses red when \u003c 20% remaining. |\n| `hourglass` | ⏳ | Background vertical fill that drains from top to bottom, like sand in an hourglass. |\n| `timer_pulse` | 💥 | Card glows with a pulsing halo — pulse speed increases as time runs out. |\n| `timer_ring` | 🔵 | SVG circular ring on the right side with the countdown in the center. |\n\nAll timer themes transition green → orange → red as the remaining time decreases.\n\n\u003e **Note:** The `clear_theme` accepts any theme from the ✅ OK category: `success`, `check`, `confetti`, `heartbeat`, `shield`, `power`, `sunrise`, `plant`, `lock`.\n\n---\n\n## How It Works\n\n### Alert lifecycle\n\n1. Configure one or more **alerts**, each linked to an entity + condition\n2. When an entity matches the condition (and any extra `conditions` rules), the alert becomes **active**\n3. Active alerts are **sorted by priority** (1=most critical)\n4. The card **displays** the current alert and **auto-cycles** through multiple active alerts\n5. **Tap** or **hold** the card to execute configured actions\n6. **Snooze** any alert with 💤 — one tap for fixed duration, or choose from the menu\n7. **📋** opens the alert history with timestamps\n8. When no alerts are active and `show_when_clear: true`, the card shows the **all-clear message**\n\n### Transition animations\n\nWhen multiple alerts are active, the card cycles using the selected animation:\n\n| Animation | Description |\n|-----------|-------------|\n| `fold` *(default)* | 3D page-turn along the X axis |\n| `slide` | Horizontal push left/right |\n| `fade` | Cross-dissolve opacity fade |\n| `flip` | RotateY card flip |\n| `zoom` | Scale punch in/out |\n| `glitch` | Clip-path jitter digital noise |\n| `bounce` | Elastic spring from below |\n| `swing` | RotateZ pendulum |\n| `blur` | Gaussian dissolve |\n| `split` | Vertical split (top up, bottom down) |\n| `roll` | RotateY + translateX combined roll |\n| `curtain` | Opens from center (theater curtain) |\n\n### Secondary entity value\n\nDisplay a live entity value as a second line below the alert message:\n\n```yaml\n- entity: sensor.open_zones\n  operator: \"!=\"\n  state: \"0\"\n  message: \"Zones open\"\n  secondary_entity: sensor.open_zones_list\n  secondary_attribute: zone_names   # optional — read an attribute instead of state\n```\n\n### tap_action / hold_action\n\nStandard Lovelace interactions — tap or hold (500 ms) the whole card to trigger any action:\n\n```yaml\n- entity: binary_sensor.front_door\n  state: \"on\"\n  message: \"Front door open\"\n  tap_action:\n    action: more-info\n    entity_id: binary_sensor.front_door\n  hold_action:\n    action: navigate\n    navigation_path: /lovelace/security\n```\n\nSupported action types: `call-service`, `navigate`, `more-info`, `url`, `none`.\n\n### Snooze\n\nTap 💤 on any active alert to snooze it. Two modes (configurable in General tab):\n\n- **Menu** *(default)* — choose 1h / 4h / 8h / 24h from a menu on the card\n- **Fixed duration** — configure 30min / 1h / 4h / 8h / 24h for immediate one-tap snooze\n\nSnoozed 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.\n\n### snooze_action\n\nExecute a Lovelace action when the 💤 button is tapped, in addition to snoozing. Useful for resetting sensors:\n\n```yaml\n- entity: binary_sensor.mailbox\n  state: \"on\"\n  message: \"Mail arrived\"\n  snooze_action:\n    action: call-service\n    service: input_boolean.turn_off\n    target:\n      entity_id: input_boolean.mailbox_flag\n```\n\n### Alert history\n\nTap 📋 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).\n\n### entity_filter\n\nInstead 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:\n\n```yaml\n- entity_filter: \"battery\"\n  attribute: battery_level\n  operator: \"\u003c=\"\n  state: \"20\"\n  message: \"Low battery: {name} ({state}%)\"\n  theme: battery\n  entity_filter_exclude:\n    - sensor.battery_test_device\n```\n\n**Message placeholders:**\n\n| Placeholder | Replaced with |\n|---|---|\n| `{name}` | Entity friendly name |\n| `{entity}` | Entity ID |\n| `{state}` | Current state value |\n\nThe matched entity's friendly name is also automatically shown below the message so you always know which device triggered the alert.\n\n### HA template syntax in messages\n\nThe `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.\n\n```yaml\n# Simple sensor value\n- entity: sensor.co2_ppm\n  operator: \"\u003e\"\n  state: \"1000\"\n  message: \"CO₂: {{ states('sensor.co2_ppm') }} ppm\"\n\n# Attribute value\n- entity: climate.hvac\n  state: heating\n  message: \"Heating — room: {{ state_attr('climate.hvac', 'current_temperature') }}°\"\n\n# Conditional logic\n- entity: sensor.battery_phone\n  operator: \"\u003c\"\n  state: \"20\"\n  message: \u003e\n    {% if states('sensor.battery_phone') | int \u003c 10 %}\n      Critical: {{ states('sensor.battery_phone') }}%\n    {% else %}\n      Low battery: {{ states('sensor.battery_phone') }}%\n    {% endif %}\n\n# Time / date\n- entity: binary_sensor.night_mode\n  state: \"on\"\n  message: \"Night mode active since {{ now().strftime('%H:%M') }}\"\n\n# Math / unit conversion\n- entity: sensor.power_consumption\n  operator: \"\u003e\"\n  state: \"2000\"\n  message: \"High consumption: {{ (states('sensor.power_consumption') | float / 1000) | round(2) }} kW\"\n```\n\nAny template that works in HA automations and template sensors works here too.\n\n**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 (✓).\n\n### Timer themes\n\nSelect 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:\n\n```yaml\n- entity: timer.ad_blocker_paused\n  state: active\n  message: \"Ad blocking disabled for {timer}\"\n  theme: countdown\n```\n\nUse `{timer}` in the message to display the live countdown (`mm:ss` or `h:mm:ss`).\n\nWhen a timer entity is selected in the editor, `state` is automatically set to `active` and the theme switches to `countdown`.\n\n### Numeric / comparison conditions\n\n```yaml\n- entity: sensor.co2_ppm\n  operator: \"\u003e\"\n  state: \"1000\"\n  message: \"CO₂ level critical!\"\n```\n\nSupported operators: `=` (default), `!=`, `\u003e`, `\u003c`, `\u003e=`, `\u003c=`.\n\n### Attribute-based triggers\n\n```yaml\n- entity: sensor.phone\n  attribute: battery_level\n  operator: \"\u003c\"\n  state: \"20\"\n  message: \"Phone battery critical\"\n  theme: battery\n```\n\n### AND / OR multi-entity conditions\n\n```yaml\n- entity: binary_sensor.front_door\n  state: \"on\"\n  conditions_logic: \"and\"\n  conditions:\n    - entity: input_boolean.night_mode\n      operator: \"=\"\n      state: \"on\"\n  message: \"Door open at night\"\n  theme: intruder\n```\n\n- `and` — all conditions must match (default)\n- `or` — at least one condition must match\n\n### HA icons (mdi:)\n\nEnable the `use_ha_icon` toggle per alert to use a native HA icon instead of an emoji. When enabled, the icon is automatically read from the entity's attributes. You can also pick any `mdi:` or `hass:` icon from the native HA icon picker in the editor.\n\n### Message placeholders\n\n`{state}`, `{name}`, and `{entity}` work in the `message` field of **any** alert that has an entity set — not just `entity_filter` alerts:\n\n```yaml\n- entity: sensor.meter_abe4\n  operator: \"\u003c=\"\n  state: \"20\"\n  message: \"Battery low: {state}%\"\n  secondary_text: \"Device: {name}\"\n```\n\n### secondary_text\n\nA static second line displayed below the message. Supports placeholders. Does not require a secondary entity:\n\n```yaml\nsecondary_text: \"Zone: {name} — Current: {state}\"\n```\n\n### Badge customization\n\nHide the category badge or replace its text:\n\n```yaml\nshow_badge: false        # hide completely\nbadge_label: \"URGENT\"   # or use a custom label\n```\n\n### Sound notifications\n\nPlay an audio tone when an alert becomes active. Uses the Web Audio API — no files required for the default tones:\n\n```yaml\n- entity: binary_sensor.smoke_detector\n  state: \"on\"\n  message: \"Smoke detected!\"\n  sound: true\n  sound_url: \"https://example.com/alarm.mp3\"  # optional custom sound\n```\n\nDefault tones by category: Critical = double high beep · Warning = medium beep · Info = soft beep · OK = rising chime.\n\n\u003e **Note:** requires browser autoplay permission. Works out of the box on wall-mounted tablets with HA Companion.\n\n### Large buttons\n\nAlways-visible pill-shaped 💤 and 📋 buttons — useful for wall-mounted tablets where hover is not available:\n\n```yaml\nlarge_buttons: true\n```\n\n### Swipe to snooze\n\nEnable a left-swipe gesture to snooze the current alert on touch devices. Works independently of `tap_action` and `hold_action` — no conflict:\n\n```yaml\nswipe_to_snooze: true\n```\n\nSwipe at least 60 px horizontally to trigger. Uses the configured `snooze_duration` (or 1 h if none is set).\n\n### Vertical layout\n\nStack the icon on top and the message below, centered — useful for narrow columns or square card grids:\n\n```yaml\nvertical: true\n```\n\nWorks with all 40 themes. The **Ticker** theme keeps its horizontal scrolling. Can be combined with `ha_theme: true` and `large_buttons: true`.\n\n### HA theme adaptation\n\nAdapt the card's color palette to the active Home Assistant global theme:\n\n```yaml\nha_theme: true\n```\n\nWhen enabled:\n- Card background → `--card-background-color`\n- Text → `--primary-text-color` / `--secondary-text-color`\n- Critical badges/borders → `--error-color`\n- Warning badges/borders → `--warning-color`\n- Info badges/borders → `--info-color`\n- OK badges/borders → `--success-color`\n\nAll 40 visual themes retain their animations and layouts — only the color palette adapts. Compatible with Mushroom, Material, iOS, and any custom HA theme.\n\n### Test mode\n\nForce all configured alerts to display as active — useful for previewing the card appearance without waiting for real conditions:\n\n```yaml\ntest_mode: true\n```\n\n\u003e Remember to remove `test_mode` before going live. A yellow banner is shown on the card as a reminder.\n\nIn the visual editor, open the **Alerts tab** → enable **Test mode** at the bottom → expand any alert to instantly preview it on the card.\n\n---\n\n## Installation\n\n### Via HACS (recommended)\n\n[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=djdevil\u0026repository=AlertTicker-Card\u0026category=plugin)\n\n1. Click the button above **or** open **HACS → Frontend**\n2. Click **⋮ → Custom repositories**\n3. Add `https://github.com/djdevil/AlertTicker-Card` as type **Lovelace**\n4. Find **AlertTicker Card** and click **Download**\n5. **Reload** your browser\n\n### Manual\n\n1. Download `alert-ticker-card.js` and `alert-ticker-card-editor.js` from the [latest release](https://github.com/djdevil/AlertTicker-Card/releases)\n2. Copy both files to `/config/www/`\n3. Go to **Settings → Dashboards → Resources**\n4. Add `/local/alert-ticker-card.js` as a **JavaScript module**\n5. **Reload** the browser\n\n---\n\n## Visual Editor\n\nNo YAML knowledge required. The editor has two tabs:\n\n### General tab\n\n| Field | Description |\n|-------|-------------|\n| **Cycle interval** | Seconds between alerts when multiple are active (default: 5) |\n| **Transition animation** | Animation played when switching alerts (12 options) — preview plays on change |\n| **Show when no alerts** | Toggle to keep the card visible when everything is OK |\n| **Message when clear** | Text to show in the all-clear state |\n| **Theme for all-clear** | Visual theme for the all-clear card (OK themes only) |\n| **Snooze behaviour** | Fixed duration or menu (30min / 1h / 4h / 8h / 24h) |\n| **Show snooze bar** | Toggle the amber snooze reactivation bar |\n| **Large buttons** | Always-visible pill-shaped 💤 and 📋 buttons |\n| **Swipe to snooze** | Left-swipe gesture to snooze — ideal for mobile |\n| **Vertical layout** | Stack icon on top, message below, centered |\n| **Adapt to HA theme** | Adapt colors to the active HA global theme |\n| **History max events** | How many history entries to keep (25 / 50 / 100 / 200) |\n\n### Alerts tab\n\nFor each alert:\n\n| Field | Description |\n|-------|-------------|\n| **Entity filter** | Text filter with wildcard `*` — auto-expands to one alert per matched entity |\n| **Entity** | Single entity from your HA instance (hidden when filter is active) |\n| **Attribute** | Optional — check attribute instead of entity state (dot-notation supported) |\n| **Condition** | Operator + trigger value |\n| **Priority** | 1 (Critical) → 4 (Low) |\n| **Message** | Text shown when active — supports `{name}`, `{entity}`, `{state}`, `{timer}` |\n| **Secondary text** | Static second line — supports placeholders, no entity required |\n| **Secondary entity** | Live value shown below the message |\n| **Theme** | Visual theme — timer entities see only timer themes |\n| **Icon** | Emoji override, or native `mdi:` icon picker via toggle |\n| **Badge** | Show/hide category badge or set a custom label |\n| **Snooze duration** | Per-alert override of global snooze setting |\n| **Sound** | Enable audio notification + optional custom URL |\n| **Extra conditions** | AND/OR additional entity conditions |\n| **Tap action** | Action executed on tap (native service control) |\n| **Hold action** | Action executed on hold (500 ms) |\n| **Snooze action** | Action executed when 💤 is tapped |\n\nYou can **reorder** alerts with ↑ / ↓ buttons.\n\n---\n\n## YAML Configuration\n\n### Card-level options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `cycle_interval` | `number` | `5` | Seconds between alerts when cycling |\n| `cycle_animation` | `string` | `fold` | Transition animation |\n| `show_when_clear` | `boolean` | `false` | Show card when no alerts are active |\n| `clear_message` | `string` | `\"\"` | Message shown in all-clear state |\n| `clear_theme` | `string` | `success` | Theme for all-clear (`success`, `check`, `confetti`) |\n| `snooze_default_duration` | `number` | *(menu)* | Fixed snooze duration in hours (`0.5`, `1`, `4`, `8`, `24`). Omit for menu. |\n| `show_snooze_bar` | `boolean` | `true` | Set `false` to hide the amber snooze reactivation bar and pill |\n| `large_buttons` | `boolean` | `false` | Always-visible pill-shaped 💤 and 📋 buttons |\n| `swipe_to_snooze` | `boolean` | `false` | Left-swipe gesture to snooze on touch devices |\n| `vertical` | `boolean` | `false` | Vertical layout — icon on top, message centered below |\n| `ha_theme` | `boolean` | `false` | Adapt card colors to the active HA global theme |\n| `history_max_events` | `number` | `50` | Max history entries to keep |\n| `test_mode` | `boolean` | `false` | Show all alerts as active (ignore conditions) — for editor preview only |\n| `alerts` | `list` | `[]` | List of alert objects |\n\n### Alert-level options\n\n| Option | Type | Required | Description |\n|--------|------|----------|-------------|\n| `entity` | `string` | ✅* | Entity ID |\n| `entity_filter` | `string` | ✅* | Text filter — supports `*` wildcard (replaces `entity`) |\n| `entity_filter_exclude` | `list` | ❌ | Entity IDs to exclude from filter |\n| `show_filter_name` | `boolean` | `true` | Set `false` to hide the entity friendly name below the message |\n| `attribute` | `string` | ❌ | Attribute to check instead of state — supports dot-notation (e.g. `activity.0.forecast`) |\n| `operator` | `string` | ❌ | `=` `!=` `\u003e` `\u003c` `\u003e=` `\u003c=` (default: `=`) |\n| `state` | `string` | ✅ | Trigger value |\n| `message` | `string` | ✅ | Text shown when active — supports `{name}`, `{entity}`, `{state}`, `{timer}` |\n| `secondary_text` | `string` | ❌ | Static second line below the message — supports `{state}`, `{name}`, `{entity}` |\n| `theme` | `string` | ❌ | Visual theme (default: `emergency`) |\n| `priority` | `number` | ❌ | 1–4 (default: `1`) |\n| `icon` | `string` | ❌ | Emoji or `mdi:` icon override |\n| `use_ha_icon` | `boolean` | ❌ | Use HA native icon instead of emoji |\n| `show_badge` | `boolean` | `true` | Set `false` to hide the category badge |\n| `badge_label` | `string` | ❌ | Custom text for the category badge |\n| `secondary_entity` | `string` | ❌ | Entity whose live value appears below the message |\n| `secondary_attribute` | `string` | ❌ | Attribute of `secondary_entity` to show — supports dot-notation |\n| `snooze_duration` | `number\\|null` | ❌ | Override global snooze: hours, `null` for menu, omit to use global |\n| `sound` | `boolean` | `false` | Play a sound when this alert becomes active |\n| `sound_url` | `string` | ❌ | Custom `.mp3`/`.wav` URL — omit for auto-generated tone |\n| `conditions_logic` | `string` | ❌ | `and` or `or` for extra conditions |\n| `conditions` | `list` | ❌ | Extra entity conditions |\n| `tap_action` | `object` | ❌ | Action on tap |\n| `hold_action` | `object` | ❌ | Action on hold (500 ms) |\n| `snooze_action` | `object` | ❌ | Action executed when 💤 is tapped |\n\n*Either `entity` or `entity_filter` is required.\n\n### Action object (`tap_action`, `hold_action`, `snooze_action`)\n\n| Field | Description |\n|-------|-------------|\n| `action` | `call-service` · `navigate` · `more-info` · `url` · `none` |\n| `service` | HA service in `domain.service` format |\n| `target` | `{entity_id: \"...\"}` |\n| `service_data` | Extra service parameters (object) |\n| `navigation_path` | Path for `navigate` action |\n| `url_path` | URL for `url` action |\n| `entity_id` | Entity for `more-info` action |\n\n---\n\n## Examples\n\n### Battery monitor with entity filter\n\n```yaml\ntype: custom:alert-ticker-card\ncycle_animation: slide\nalerts:\n  - entity_filter: \"battery\"\n    attribute: battery_level\n    operator: \"\u003c=\"\n    state: \"20\"\n    message: \"Low battery: {name} ({state}%)\"\n    theme: battery\n    priority: 2\n    entity_filter_exclude:\n      - sensor.battery_test_device\n```\n\n### Timer with countdown\n\n```yaml\ntype: custom:alert-ticker-card\nalerts:\n  - entity: timer.ad_blocker_paused\n    state: active\n    message: \"Ad blocking disabled for {timer}\"\n    theme: countdown\n    priority: 2\n```\n\n### Alarm with tap_action\n\n```yaml\ntype: custom:alert-ticker-card\nalerts:\n  - entity: alarm_control_panel.home\n    state: \"triggered\"\n    message: \"ALARM TRIGGERED\"\n    priority: 1\n    theme: emergency\n    tap_action:\n      action: call-service\n      service: alarm_control_panel.alarm_disarm\n      target:\n        entity_id: alarm_control_panel.home\n      service_data:\n        code: \"1234\"\n```\n\n### Smart snooze (resets the sensor)\n\n```yaml\ntype: custom:alert-ticker-card\nalerts:\n  - entity: binary_sensor.mailbox\n    state: \"on\"\n    message: \"Mail arrived\"\n    theme: notification\n    snooze_action:\n      action: call-service\n      service: input_boolean.turn_off\n      target:\n        entity_id: input_boolean.mailbox_flag\n```\n\n### Night-time door alert (AND condition)\n\n```yaml\ntype: custom:alert-ticker-card\nalerts:\n  - entity: binary_sensor.front_door\n    state: \"on\"\n    conditions_logic: \"and\"\n    conditions:\n      - entity: input_boolean.night_mode\n        state: \"on\"\n    message: \"Front door open at night!\"\n    priority: 1\n    theme: intruder\n    hold_action:\n      action: navigate\n      navigation_path: /lovelace/security\n```\n\n### Multiple warnings cycling\n\n```yaml\ntype: custom:alert-ticker-card\ncycle_interval: 8\ncycle_animation: slide\nshow_when_clear: true\nclear_message: \"All systems normal\"\nclear_theme: success\nalerts:\n  - entity: binary_sensor.smoke_detector\n    state: \"on\"\n    message: \"Smoke detected in kitchen!\"\n    priority: 1\n    theme: fire\n  - entity: binary_sensor.water_leak\n    state: \"on\"\n    message: \"Water leak under sink\"\n    priority: 2\n    theme: flood\n  - entity: sensor.co2_ppm\n    operator: \"\u003e\"\n    state: \"1000\"\n    message: \"CO₂ level too high — {state} ppm\"\n    priority: 2\n    theme: toxic\n  - entity: binary_sensor.window_contact\n    state: \"on\"\n    message: \"Living room window open\"\n    priority: 3\n    theme: door\n    secondary_entity: sensor.outdoor_temperature\n```\n\n---\n\n## Languages\n\nThe card automatically detects the language from your Home Assistant settings.\n\n| Language | Code | Fallback |\n|----------|------|---------|\n| Italian | `it` | — |\n| English | `en` | ✅ default |\n| French | `fr` | — |\n| German | `de` | — |\n| Dutch | `nl` | — |\n| Vietnamese | `vi` | — |\n\n---\n\n## Troubleshooting\n\n**Card not appearing after installation**\n- Add `alert-ticker-card.js` as a JavaScript module in Settings → Dashboards → Resources\n- Hard-reload the browser (Ctrl+Shift+R / Cmd+Shift+R)\n\n**Features not working after update (secondary text, templates, new options)**\n- 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 for `CARD_VERSION` in the JS file via browser DevTools.\n\n**Entity picker not showing in editor**\n- Known HA lazy-loading issue. The card handles it automatically. If it still doesn't appear, close and reopen the editor.\n\n**Card disappears when alerts resolve**\n- Set `show_when_clear: true` to keep the card visible.\n\n**Trigger state not matching**\n- State values are case-sensitive exact strings. Use the live **Current state** hint in the editor or check Developer Tools → States.\n\n**Timer not updating**\n- Ensure the timer entity state is `active`. The card reads `finishes_at` from the timer attributes. If `finishes_at` is missing, the countdown shows `--:--`.\n\n**entity_filter matching too many entities**\n- Use a more specific filter text, or click individual entities in the editor preview list to exclude them.\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on reporting bugs, suggesting features, and contributing code.\n\n---\n\n## License\n\nMIT License — see [LICENSE](LICENSE) for details.\n\n---\n\n## Support\n\nIf you find this card useful, consider buying me a coffee ☕\n\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-support-yellow.svg?logo=buy-me-a-coffee)](https://www.buymeacoffee.com/divil17f)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjdevil%2Falertticker-card","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjdevil%2Falertticker-card","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjdevil%2Falertticker-card/lists"}