Quick Timer is an all-in-one custom integration for Home Assistant that lets you schedule one-time actions on any entity — complete with a built-in Lovelace card, visual countdown, progress bar, and multi-target support.
The Lovelace card is included and registers automatically — no separate frontend installation required.
Features · Installation · Getting Started · Card Configuration · Services · FAQ · Troubleshooting
| ⏱️ One-time scheduling | Relative delay (seconds / minutes / hours) or absolute time (HH:MM) |
| 🎯 Multi-target actions | Control multiple entities with a single timer — start_actions run immediately, finish_actions run when the countdown ends |
| 🔧 Dynamic service discovery | The card auto-discovers available services and fields for each entity |
| 📊 Progress bar | Visual progress synced with the backend |
| 💾 Persistent timers | Tasks survive HA restarts; missed tasks execute on startup |
| 🔔 Notifications | HA persistent + targeted mobile push on completion |
| 🎨 Built-in Lovelace card | Compact & full modes, 24 colors, badge countdown, configurable interactions |
| 💉 Dialog injection | Quick Timer panel inside entity more-info dialogs |
| 📋 Overview card | Dashboard card listing all active timers |
| 🧠 History presets | Remembers last 3 configs per entity |
| 🆔 Task isolation | Multiple independent timers per entity via unique task_id |
Card and more-info panel translations are loaded from
custom_components/quick_timer/www/translations/. The built-in frontend
languages are English (en), Slovak (sk), Dutch (nl), French (fr), and
German (de). To add another language, copy en.json, translate its values,
and save it under the lowercase Home Assistant language code. No JavaScript or
Python registration is required.
Regional files such as pt-br.json are supported. If a regional file is not
present, Quick Timer tries the base language (pt.json) and then English.
Missing keys in any translation also fall back to English.
- Open HACS → Integrations
- Menu (⋮) → Custom repositories
- Add
https://github.com/jozefnad/homeassistant-quick_timer• Category: Integration - Search Quick Timer → Download
- Restart Home Assistant
- Download from Releases
- Copy
custom_components/quick_timerto yourconfig/custom_components/ - Restart Home Assistant
The Lovelace card resource registers automatically — no manual setup needed.
- Settings → Devices & Services → + Add Integration → Quick Timer → Submit
- Add
custom:quick-timer-cardto any dashboard — it's available in the card picker immediately - Configure targets and timer defaults in the visual editor
type: custom:quick-timer-card
targets:
- entity: light.living_room
service: light.turn_off
phase: finish
default_delay: 30
default_unit: minutes
mode: compactCustomize time presets in Settings → Devices & Services → Quick Timer → Configure (comma-separated values for seconds, minutes, hours).
The visual editor handles everything — just add the card and configure through the UI.
📋 Full Configuration Reference
| Option | Type | Default | Description |
|---|---|---|---|
targets |
list | [] |
Entity targets with service, data, and phase (start / finish) |
name |
string | auto | Card display name |
icon |
string | auto | Icon override |
color |
string | state |
Icon color — state, primary, accent, or any of 24 named colors |
default_delay |
int | 15 |
Default delay value |
default_unit |
string | minutes |
seconds / minutes / hours |
default_time_mode |
string | relative |
relative (delay) or absolute (specific time) |
default_at_time |
string | Default absolute time (HH:MM) |
|
mode |
string | compact |
compact (tile) or full |
show_badge |
bool | true |
Countdown badge on icon |
show_progress_bar |
bool | false |
Visual progress bar |
inactive_style |
string | dim |
none, dim, or grayscale |
primary_info |
string | name |
Top line: name, state, last-changed, none |
secondary_info |
string | timer |
Bottom line: timer, state, action, none |
tap_action |
object | toggle-timer |
toggle-timer, settings, none |
hold_action |
object | settings |
Hold behavior |
icon_tap_action |
object | settings |
Icon tap behavior |
notify_ha |
bool | false |
HA persistent notification |
notify_devices |
list | [] |
Mobile device IDs for push notifications |
| Field | Type | Description |
|---|---|---|
entity |
string | Entity ID (light.living_room) |
service |
string | Service to call (light.turn_off) |
data |
object | Service data ({ brightness: 128 }) |
phase |
string | finish (default) — when timer ends / start — immediately |
Turn lights on immediately, turn everything off after 2 hours:
type: custom:quick-timer-card
name: Movie Mode
default_delay: 2
default_unit: hours
show_progress_bar: true
targets:
- entity: light.living_room
service: light.turn_on
data:
brightness: 50
phase: start
- entity: media_player.tv
service: media_player.turn_on
phase: start
- entity: light.living_room
service: light.turn_off
phase: finish
- entity: media_player.tv
service: media_player.turn_off
phase: finishAll active timers in one place:
type: custom:quick-timer-overview-card
title: Active TimersSchedule a timer with immediate (start) and delayed (finish) actions.
service: quick_timer.run_action
data:
task_id: bedroom_lights_off
delay: 30
unit: minutes
finish_actions:
- service: light.turn_off
target:
entity_id: light.bedroom
notify_ha: true📋 All Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
task_id |
string | ❌ | auto | Unique task identifier. Enables multiple timers per entity. |
finish_actions |
list | ✅ | Actions when timer ends. Each: { service, target, data } |
|
start_actions |
list | ❌ | Actions executed immediately on start | |
delay |
int | ✅* | 15 |
Delay (1–86400). Required for relative mode. |
unit |
string | ❌ | minutes |
seconds, minutes, hours |
time_mode |
string | ❌ | relative |
relative or absolute |
at_time |
string | ❌ | Target time (HH:MM). Required for absolute mode. |
|
task_label |
string | ❌ | Label for overview card | |
notify_ha |
bool | ❌ | false |
HA notification on completion |
notify_mobile |
bool | ❌ | false |
Push to all mobile devices |
notify_devices |
list | ❌ | Specific device IDs |
📝 More Examples
Absolute time:
service: quick_timer.run_action
data:
task_id: night_routine
time_mode: absolute
at_time: "23:30"
start_actions:
- service: light.turn_on
target:
entity_id: light.hallway
data:
brightness: 30
finish_actions:
- service: light.turn_off
target:
entity_id: light.hallway
- service: switch.turn_off
target:
entity_id: switch.tv_plugMulti-target with label and notifications:
service: quick_timer.run_action
data:
task_id: movie_night
task_label: "Movie Night"
delay: 2
unit: hours
start_actions:
- service: light.turn_on
target:
entity_id: light.living_room
data:
brightness: 50
- service: media_player.turn_on
target:
entity_id: media_player.tv
finish_actions:
- service: light.turn_off
target:
entity_id: light.living_room
- service: media_player.turn_off
target:
entity_id: media_player.tv
notify_ha: trueservice: quick_timer.cancel_action
data:
task_id: bedroom_lights_off📋 Preferences Services
Retrieve saved preferences and history for an entity (or all entities if omitted).
| Parameter | Type | Required | Description |
|---|---|---|---|
entity_id |
string | ❌ | Entity ID |
Save preferences for an entity (used internally by the card).
| Parameter | Type | Required | Description |
|---|---|---|---|
entity_id |
string | ✅ | Entity ID |
preferences |
object | ✅ | Preferences data |
sensor.quick_timer_monitor provides real-time information about all active timers.
State: Number of active tasks.
| Attribute | Description |
|---|---|
active_tasks |
All tasks with remaining_seconds, start_timestamp, end_timestamp |
task_count |
Number of active tasks |
preferences |
Stored user preferences per entity |
presets |
Configurable time presets |
Example automation:
trigger:
- platform: numeric_state
entity_id: sensor.quick_timer_monitor
above: 0
action:
- service: notify.mobile_app
data:
message: "You have {{ states('sensor.quick_timer_monitor') }} active tasks"| Event | Key Data | Description |
|---|---|---|
quick_timer_task_started |
task_id, finish_actions, delay_seconds |
Timer started |
quick_timer_task_completed |
task_id, success_count, error_count |
Timer finished |
quick_timer_task_cancelled |
task_id, reason |
Timer cancelled |
Example automation:
trigger:
- platform: event
event_type: quick_timer_task_completed
action:
- service: notify.mobile_app
data:
message: "Timer '{{ trigger.event.data.task_id }}' — {{ trigger.event.data.success_count }} actions done"Do I need to install the Lovelace card separately?
No. The card is bundled and registers automatically. When you remove the integration, the resource is cleaned up too.
Can I run multiple timers for the same entity?
Yes. Each card generates a unique card_id used as task_id. Multiple cards targeting the same entity have fully independent timers.
What happens after a Home Assistant restart?
All tasks are persisted. On startup, pending tasks are restored. Expired tasks execute immediately.
How does absolute time mode work?
Set time_mode: absolute and at_time: "HH:MM". If the time is in the past, it schedules for the next day.
How are notifications delivered?
notify_ha— HA persistent notificationnotify_mobile— Push to all mobile devicesnotify_devices— Push to specific devices (usesnotify.send_messagefirst, falls back tonotify.mobile_app_*)
| Problem | Solution |
|---|---|
| Card not in picker | Ensure the config entry exists, clear cache (Ctrl+F5), check browser console |
| Services not available | Check Settings → Devices & Services → Quick Timer is loaded |
| Timer didn't run after restart | Task must have finish_actions; check logs for "Executing missed task" |
Contributions are welcome! Open an issue or pull request.
Built with ❤️ in my spare time.
If Quick Timer saves you time, consider buying me a beer — it keeps the motivation going!
⭐ If you like this project, give it a star!



