Skip to content

Releases: eyalgal/simple-timer-card

v2.2.1 - Fix MQTT sync regression

22 Feb 04:24

Choose a tag to compare

This release fixes a regression introduced in v2.2.0 where timers no longer synced across devices when using the legacy MQTT configuration.

🐛 Fixed

  • MQTT sync broken when using default_timer_entity: sensor.* without explicit storage: mqtt
    In v2.2.0, users who relied on the previous implicit behavior experienced timers not syncing between devices.
    This has been restored for full backward compatibility. (See: #84)

✅ What’s restored

  • If default_timer_entity is set to a sensor.* and no explicit storage or mqtt: block is defined, the card now correctly infers MQTT storage (as in v2.1.x).
  • Existing dashboards should work again without configuration changes.

If you already switched to explicit storage: mqtt configuration, everything will continue to work as expected.

v2.2.0 – Sorting, Pinned Control, and Safer Internals

08 Feb 06:59
61c8495

Choose a tag to compare

✨ New Features

  • Timer sorting

    • Sort timers by time left or name
    • Ascending or descending order
    • Defaults remain unchanged (time left, ascending)
  • Pinned timer placement

    • Keep pinned timers mixed inline (default)
    • Optionally force pinned timers to the top or bottom of the list
  • Improved multi-card behavior

    • Multiple timer cards can coexist safely on the same dashboard
    • Pinned timers in one card no longer affect pinned timers in another card

🛠 Improvements

  • Safer internal timer model

    • Unified internal representation for timers
    • Improves pause, resume, and time calculations
    • Fully backward compatible with existing setups
  • More robust MQTT handling

    • Preserves v2.1.1 MQTT payload format by default
    • Avoids breaking existing MQTT sensors and templates
  • Editor enhancements

    • Sorting controls moved to the Layout section
    • Default values are automatically cleaned from YAML

🐛 Bug Fixes

  • Fixed pause and resume not stopping timers correctly
  • Fixed custom timers not starting in some configurations
  • Fixed edge cases with pinned timers and shared storage
  • Fixed minute_buttons not supporting seconds in some cases (#81)

v2.1.1 - Firefox Fix, MQTT Pinned IDs & Danish Support

26 Jan 04:38

Choose a tag to compare

This maintenance release resolves a critical loading issue on Firefox and improves MQTT event reliability for pinned timers.

Highlights ✨

  • Firefox support restored: The card is now bundled with its dependencies, resolving the CORS / "Custom element doesn't exist" errors on Firefox. 🦊✅
  • Smarter MQTT events: Pinned timers now correctly use their user-configured id in MQTT payloads instead of a generic index, making automations much more reliable (fixes #78). 📡
  • New language: Added Danish translation! 🇩🇰

Changes 🔧

Fixes

  • Bundled Architecture: Switched to a bundled build process (Rollup). This fixes the Cross-Origin Request Blocked errors seen on Firefox and improves reliability for offline/local-only setups (fixes #77).
  • MQTT Pinned IDs: Fixed a bug where pinned_id in MQTT events would default to pinned-0, pinned-1, etc., ignoring the manual id set in the config. It now correctly respects your configured ID (e.g., study_1h), allowing for robust automation triggers. Thanks @andrewfoster!

Localization

  • Added Danish language support. Thanks @JakobHP! (#79)

Breaking changes ⚠️

  • None expected.

v2.1.0 - Voice PE Local Control + Auto Voice PE Timers

24 Jan 18:08
23ad85a

Choose a tag to compare

Highlights ✨

  • Voice PE local timers (advanced): start timers from the UI and pause / resume / cancel them (requires the advanced Voice PE ESPHome + template sensor setup). 🎛️
  • Auto Voice PE timers (new): optional setting to automatically create new custom/pinned timers as local Voice PE timers. 🚀
  • MQTT events improved: MQTT payloads now include pinned_id for pinned timers (fixes #76). 📡✅
  • Voice PE docs split: clearer “mirror-only” vs “advanced” setup guides. 📚

Changes 🔧

Voice PE

  • Added support for locally controllable Voice PE timers (advanced setup).
  • Added config option auto_voice_pe (default: false) to auto-create new custom/pinned timers as local Voice PE timers (requires Voice PE control entity).
  • Added config option voice_pe_control_entity (default: null) to explicitly set which text.* / input_text.* entity receives Voice PE timer commands.

MQTT / Automations

  • MQTT event payloads now include additional metadata (where available), including pinned_id for pinned timers.

Docs

Breaking changes ⚠️

  • None expected.

v2.0.0 – Unified Timers & Pinned Presets

21 Jan 20:11
86b2138

Choose a tag to compare

This is a big one. 🎉

Highlights

  • Pinned timers: define one-tap timers (name, duration, icon, color, expiry message, optional audio). Starting one creates a normal running timer and hides the pinned entry until that run is gone.
  • Unified timer model: all timer sources (local, MQTT, helper entities, timer.* entities, Alexa, Voice PE, timestamps) flow through the same rendering and sorting logic for a more consistent experience.
  • Editor overhaul: cleaner, collapsible sections and a much nicer flow for Entities and Pinned Timers.
  • Cleaner YAML: the editor no longer writes empty entities: [] / pinned_timers: [] or other default values.

Audio

  • Global audio settings work again (with per-entity and per-pinned overrides).
  • Removed the "Enable Alexa-specific audio notifications" toggle. If you want different audio for Alexa timers, configure per-entity audio on the Alexa entity.

Fixes

  • Sorting: timers are ordered by time-left across running timers and pinned timers.
  • Snooze: works across timer types, including pinned timers.
  • Editor stability: fixed old configs that could prevent opening the editor (e.g. timer_name_presets parsing).

Breaking changes

  • Removed Alexa-specific audio config (alexa_audio_enabled, alexa_audio_file_url, alexa_audio_repeat_count, alexa_audio_play_until_dismissed). These were previously supported (and documented) but are now gone in favor of global + per-entity/per-timer audio.

As always, thank you for the issues, testing, and screenshots. 🙏

v1.6.0 - Timer duration editor + UI refinements

16 Jan 05:24
9ec8da4

Choose a tag to compare

What's Changed

  • Added an inline duration editor for native timer.* entities (when idle or paused). Click the time/status to adjust the default duration, then Save (update only) or Start (update + start).
  • Improved timer list parsing across sources (supports both [id, timer] tuples and object-style timer arrays).
  • UI refinements across multiple styles:
    • Circle: progress ring rendering and layering improvements
    • Progress bar (vertical): action buttons placement aligned with prior behavior
    • Background fill (vertical + horizontal): drain behavior and padding/corner rendering improvements
  • Theme blending tweaks for icon and background elements for better consistency on transparent or heavily themed dashboards.

Notes

  • The native timer duration editor relies on the timer/update websocket API. If your Home Assistant version does not support it, you'll see an error toast and the timer will behave as it did in v1.5.1.

Breaking Changes

  • None expected (no config key renames or removals between v1.5.1 and v1.6.0).

v1.5.1 - Responsive Buttons, Active Presets & Alexa Fixes

02 Jan 09:34
1462239

Choose a tag to compare

What's Changed

  • Flexible layout for minute buttons: The minute adjustment buttons (+1m, +5m, etc.) now use a responsive layout that fills available space and wraps only when needed, instead of being forced into a fixed 3-column grid. (Fixes #69)
  • Presets in Active Timers header: Timer preset chips can now be shown and used from the Active Timers header, making it easier to start multiple timers even after the first one has started. (Fixes #65)
  • Alexa timers show again: Updated Alexa parsing to support the newer attribute structure (including alarms_brief) so Alexa timers appear correctly again.

v1.5.0 – Time Formats, Milestones & Entity UX

24 Dec 11:42
56fa718

Choose a tag to compare

v1.5.0 – Time Formats, Milestones & Entity UX

This release adds a major upgrade to time presentation (including human-readable formats), introduces a milestone-based progress mode, and improves entity handling and editor UX across multiple timer sources.

image

🚀 New Features

  • Human-readable time formats: New time_format options allow you to display remaining time as:
    • human_compact, human_short, human_natural
    • Plus numeric formats like hms, hm, ss, and dhms.
  • Configurable unit ordering: New time_format_units lets you choose which units to show (and in what order), e.g. years,months,weeks,days,hours,minutes,seconds.
  • Milestone-based progress mode: Added progress_mode: milestones (bar styles only), rendering segmented “unit milestones” (with optional pulsing on the active segment).
    • New options: milestone_unit (auto|none|years|months|weeks|days|hours|minutes|seconds) and milestone_pulse (default true).
  • New entity mode: minutes_attr: Support timers based on an entity attribute that contains “minutes remaining / minutes to arrival” style data (configurable via minutes_attr).
  • Per-entity expired subtitle override: Entity configs can override expired_subtitle so each timer source can show a custom “Time’s up” message.

✨ Improvements

  • Better finished/idle handling across sources: Expanded render-state logic supports clearer idle, paused, and finished presentation, including “Time’s up – X ago” style messaging.
  • Smarter duration parsing: Improved parsing of timer durations (including support for ISO-like PT#H#M#S parsing via _toMs).
  • Expanded localization: Translation keys now cover additional time units and formats (weeks/months/years and short unit labels), enabling better human-readable formatting across languages.
  • Editor upgrades: Added UI controls for:
    • Time format
    • Unit order
    • Progress milestones settings (when milestones mode is selected)
    • Minutes attribute configuration for minutes_attr entities
    • Conditional display of relevant fields to reduce clutter

📡 MQTT Events

  • Richer event payloads: MQTT events include remaining and duration (milliseconds) at the time of the event, enabling more precise automations.
  • Broader event coverage: The card publishes events for key timer interactions (started, expired, cancelled, paused, resumed, snoozed).
  • Improved publish consistency: Events can publish even when storage is local, as long as an MQTT sensor (default_timer_entity: sensor.*) is configured.

🐛 Bug Fixes

  • Improved auto-detection coverage: Auto mode detection now recognizes attribute-driven minute timers and additional timestamp patterns more reliably.
  • More consistent progress rendering: Unified progress handling across bar/fill/circle styles and new modes to avoid mismatched progress visuals.

v1.4.1: The Automation & Reliability Update

17 Dec 18:05
f76130e

Choose a tag to compare

This point release addresses a critical bug in local timer validation and significantly expands the MQTT event system for better automation control.

🚀 New Features

  • Expanded MQTT Events: The card now publishes specific events for cancelled, paused, resumed, and snoozed (in addition to started and expired). This allows for precise automation triggers based on any user interaction with the timer.
  • Enhanced Event Payloads: MQTT event payloads now include remaining time and duration (in milliseconds) at the time of the event, enabling more complex logic in Home Assistant.

🐛 Bug Fixes

  • Fixed Local Storage Timers: Resolved a logic error in the validation engine (_validateStoredTimerData) that was incorrectly rejecting valid timer IDs. This fix restores the ability to start timers using browser storage, presets, and the custom selector.
  • State Sync Fix: Improved UI responsiveness by triggering immediate state updates when timers are paused, resumed, or cancelled, ensuring the visual state stays in sync with the underlying storage.

✨ Improvements

  • MQTT Consistency: Optimized the event publishing logic to ensure events are sent regardless of whether the storage is set to local or mqtt, provided a default MQTT entity is configured.

v1.4.0 - Smarter Auto Mode & Editor Overhaul

04 Dec 18:12
4bc0a98

Choose a tag to compare

This release brings a major overhaul to the configuration editor, making it easier to set up complex entities, along with a smarter "Auto" detection mode and improved MQTT integration.

🚀 New Features

  • Configurable Default Time: You can now set the default duration for the custom timer picker (defaults to 15 minutes). No more scrolling from 15m every time you want a 1h timer! (Addresses #53)
  • MQTT 'Started' Event: The card now publishes a started event to MQTT immediately when a new timer is created. This allows Home Assistant automations to trigger the moment a timer begins. (Addresses #55)
  • Smart Editor Feedback: When selecting "Auto" mode, the editor now displays exactly which mode was detected (e.g., Detected mode: Alexa), taking the guesswork out of configuration.
  • Language Support: Added support for German (de) and Spanish (es). (Addresses #52)

✨ Improvements

  • Editor Layout: The configuration editor has been completely reorganized into logical sections (Appearance, Behavior, Storage, Audio) with a compact side-by-side layout.
  • Timestamp Configuration: Fields for "Start time entity" and "Start time attribute" now only appear when they are relevant (Timestamp mode), reducing clutter. (Addresses #56)
  • Smarter Detection: The auto-detection logic has been rewritten to be stricter. It now validates that an entity state looks like a date/time before assuming it is a timestamp sensor, preventing errors with unknown entities.

🐛 Bug Fixes

  • Fixed an issue where the "Start time attribute" field was missing from the editor.
  • Fixed logic for calculating durations when using a separate start time entity.

⚠️ Breaking Changes

  • Stricter Auto Mode: If you were relying on "Auto" mode for an entity that didn't strictly look like a timer or timestamp, the card might now ignore it instead of trying to render it broken. Fix: Manually select the correct mode in the editor if Auto doesn't pick it up.