Home Assistant Helpers Explained: Toggles, Timers, Counters and input_datetime

Home Assistant Helpers Explained: Toggles, Timers, Counters and input_datetime

What a Helper Is—and When You Actually Need One

A helper is an entity you create yourself, without a device behind it. You can manage helpers in Settings > Devices & services > Helpers. The Home Assistant helpers documentation groups them into helpers that store a value and helpers that calculate one.

Helpers that STORE a value: “Toggle (on/off), Number (slider or box), Dropdown (one option from a list), Text, Date and/or time, Button (remembers when last pressed), Counter (whole number that goes up/down/resets), Timer (countdown), Schedule (time blocks per weekday).”

Helpers that CALCULATE a value: “Combine the state of several sensors (min_max), Derivative, Integral, Utility Meter, History Stats, Threshold, Template.”

The distinction is useful: a stored-value helper holds information you set or update, while a calculating helper produces a value from other entities. This guide focuses on the stored-value helpers.

Most importantly: “Most automations don’t need a helper. You need one when Home Assistant has to remember something, when you want to set something yourself that an automation then uses, or when you want a sensor that calculates its value from other entities.”

The documentation’s examples are practical starting points: “pause an automation while on vacation -> Create a Toggle; choose a value on the dashboard -> Number or Dropdown; something to happen later even across a restart -> Timer with ‘Restore state and time when Home Assistant starts’; count how often the doorbell rang -> Counter.”

Helper type What it stores or does Documented detail
Toggle An on or off state you can set yourself Restores its previous state by default
Number A numeric value you can set Appears as a slider or numeric input box
Dropdown One value chosen from a list A valid YAML initial sets the start value; otherwise the previous state is restored
Text A text value Can be set to password mode
Date and/or time A date, a time, or both At least one of has_date or has_time must be defined (both default to false)
Button A press timestamp, not an on/off state Keeps track of the last press
Counter A whole number that goes up, down, or resets Restore defaults to true; initial defaults to 0
Timer A countdown Restore defaults to false
Schedule Time blocks per weekday Named only; not covered in this guide

Creating Helpers: UI First, YAML Second

The common UI route is Settings > Devices & services > Helpers > Create helper, followed by the helper type you want. The relevant integration pages describe the same routes for toggles, timers, counters, and date and/or time helpers.

The helper types that need the default_config: integration to appear in the UI are Toggle, Number, Dropdown, Text, Date and/or time, Button, Counter, and Timer. default_config: is included by default. If it has been removed, the relevant integration key must be added to configuration.yaml first; the troubleshooting section below gives the documented notes for individual helpers.

YAML can expose options that the UI does not. One shared rule is: “In YAML, a number, dropdown, text, or date and time helper can have an initial value. It then starts with that value after every restart, instead of its last value.” The exact restore behavior differs by helper, so don’t assume that a setting named initial works identically everywhere.

Toggle Helpers (input_boolean)

The Input boolean integration creates a toggle helper: “an entity that stores an on or off state you can set yourself.” Documented uses include “enable or disable a set of automations, mark guest mode as active, or track whether you are on vacation.”

Create one through Settings > Devices & services > Helpers > Create helper > Toggle. The integration’s YAML example is:

input_boolean:
  notify_home:
    name: Notify when someone arrives home
    icon: mdi:car

The YAML variables are name (optional friendly name), initial (optional boolean initial value; a previous value is restored by default if available), and icon (optional). Available actions are input_boolean.reload, input_boolean.toggle, input_boolean.turn_off, and input_boolean.turn_on.

An automation can check input_boolean.notify_home with a state condition for "on", then call input_boolean.turn_on targeting input_boolean.notify_home. This illustrates the helper’s role as a value an automation can check or change.

Start-up behaviour: Restore previous state, Turn on, or Turn off

The optional Each time Home Assistant starts setting has three choices:

  • Restore previous state: the toggle keeps the state it had before Home Assistant stopped. This is the default.
  • Turn on: the toggle is always on after Home Assistant starts.
  • Turn off: the toggle is always off after Home Assistant starts.

“Changing this option does not change the current state of the toggle. It only applies the next time Home Assistant starts.” By default, a toggle restores its previous state; if there is no state to restore, it starts as off.

Timer Helpers: Countdown States and Actions

The Timer integration creates countdown timers. Examples include keeping a bathroom fan running for 20 minutes, getting a reminder when laundry is nearly done, or turning lights off after motion has stopped.

Create one through Settings > Devices & services > Helpers > Create helper > Timer. Its YAML example is:

timer:
  laundry:
    duration: "00:01:00"

The YAML variables are alias (required), name (optional), duration (optional, integer seconds or 00:00:00; default 0), icon (optional), and restore (optional boolean, default false). The documented duration description calls this the initial duration in seconds or 00:00:00 when Home Assistant starts. When restore is true, active and paused timers are restored after Home Assistant starts or restarts. The UI options are Name, Duration, Icon, and Restore; Restore “restores active and paused timers after Home Assistant starts or restarts.”

A timer can be idle, active, or paused. It returns to idle when it finishes, is canceled, or has not been started yet.

Timer triggers, conditions, and actions

The timer triggers are Timer cancelled (timer.cancelled), Timer finished (timer.finished), Timer paused (timer.paused), Timer remaining time reached (timer.remaining_time_reached), Timer restarted (timer.restarted), and Timer started (timer.started). Conditions are Timer is active (timer.is_active), Timer is idle (timer.is_idle), and Timer is paused (timer.is_paused).

Actions include:

  • timer.cancel: cancels a running or paused timer without firing the finished event.
  • timer.change: adds or subtracts time on a running timer.
  • timer.finish: finishes a running or paused timer earlier than scheduled.
  • timer.pause: pauses a running timer, keeping the remaining time.
  • timer.reload
  • timer.start: starts a timer, or restarts it with a new duration.

A documented automation example uses the timer.finished trigger on timer.bathroom_fan, then calls fan.turn_off.

Two timer caveats: missed finishes and Timer vs. for

The documented limitation is important: “If a timer finishes while Home Assistant is not running, automations that use the Timer finished trigger do not run after startup.” The integration page also states that automations using the timer.finished event will not trigger on startup if the timer expires when Home Assistant is not running.

The timer documentation compares timers with an automation’s for option this way: “Unlike an automation’s for option, a timer is its own entity, so you can see it, manage it, and use the same countdown in more than one place. If you only need to wait until another trigger or condition stays true for a while, using that automation’s for option is often simpler.”

Counter Helpers

The Counter integration tracks how many times something has happened: for example, how often a door opens, how many reminders have been sent, or how many times a routine has run.

Create one through Settings > Devices & services > Helpers > Create helper > Counter. UI counter helpers need default_config: in configuration.yaml, which is included by default. The documented YAML example is:

counter:
  my_custom_counter:
    initial: 30
    step: 1

The YAML variables are name (optional), initial (optional integer, default 0), restore (optional boolean, default true), step (optional integer, default 1), minimum (optional), maximum (optional), and icon (optional). When restore is true, the initial value is used only when no previous state is found or when the counter is reset.

Counter triggers, conditions, actions, and automations

Counter triggers are Counter decremented (counter.decremented), Counter incremented (counter.incremented), Counter reached maximum (counter.maximum_reached), Counter reached minimum (counter.minimum_reached), and Counter reset (counter.reset). The condition is Counter value (counter.is_value).

Actions are counter.decrement (decreases by its step size), counter.increment (increases by its step size), counter.reset (resets to its initial value), and counter.set_value (sets a specific value).

One documented automation triggers on counter.maximum_reached for a chore counter and then calls counter.reset. Another triggers on a state change of input_button.exercise_break_done, checks counter.is_value with threshold type below and value 5, then calls counter.increment. These examples show a counter both as a record of events and as a value an automation can test.

Date and/or Time Helpers (input_datetime)

An Input Datetime helper stores a date, a time, or both—for example, a wake-up time or target date. Create one through Settings > Devices & services > Helpers > Create helper > Date and/or time.

Here are the documented YAML forms:

input_datetime:
  both_date_and_time:
    name: Input with both date and time
    has_date: true
    has_time: true
  only_date:
    name: Input with only date
    has_date: true
    has_time: false
  only_time:
    name: Input with only time
    has_date: false
    has_time: true

The Input Datetime page lists the variables as name (optional), has_time (boolean, default false), has_date (boolean, default false), icon (optional), and initial (optional, set according to whether the helper has a date, time, or both). At least one of has_time or has_date must be defined.

The helper’s attributes are has_time and has_date; year, month, and day are available only if has_date: true; and timestamp is available only if has_time: true.

Setting values and the alarm-clock automation

The actions are input_datetime.reload and input_datetime.set_datetime, which sets the date and/or time. Documented value formats include time: "05:30:00", date: "2020-08-24", datetime: "2020-08-25 05:30:00", and timestamp: "{{ now().timestamp() }}".

A documented alarm-clock automation uses a time trigger with at: input_datetime.bedroom_alarm_clock_time, then calls light.turn_on on light.bedroom. The helper supplies the time value; the automation supplies the action.

The Other Helpers in One Page: Number, Dropdown, Text, and Button

The Number helper stores a numeric value you can set. On a dashboard it appears as a slider or numeric input box. Its YAML min and max are required; mode can be box or slider, and initial is available in YAML but not through the UI.

The Dropdown helper stores one value chosen from a list you define. YAML requires options. It has the select.selection_changed trigger and select.is_option_selected condition; actions include input_select.reload, input_select.select_first, input_select.select_last, input_select.select_next, input_select.select_option, input_select.select_previous, and input_select.set_options.

There is a YAML quoting gotcha: “Because YAML defines booleans as equivalent, any variations of ‘On’, ‘Yes’, ‘Y’, ‘Off’, ‘No’, or ‘N’ (regardless of case) used as option names will be replaced by True and False unless they are defined in quotation marks.”

The Text helper stores text and can be set to password mode, which obscures typing. Its modes are text and password; its documented default max is 100, and the page notes that 255 is the maximum number of characters allowed in an entity state. Its trigger is text.changed, its condition is text.is_equal_to, and its actions are input_text.reload and input_text.set_value.

The Button helper is stateless: it does not have an on/off state. It records the timestamp of its last press in the Home Assistant UI or via an action. Use the button.pressed trigger to run an automation on a press. Its actions are input_button.press and input_button.reload.

Where Helpers Can Be Used—and How Triggers Behave

Helpers can be used in “automations and scripts (change in action, check in condition, trigger on change); dashboards; Assist (must first be exposed to Assist).”

A trigger reacts at a specific moment, not continuously while a state remains true. The automation trigger documentation gives this example: “A trigger for a door that opens reacts when the door goes from closed to open. It doesn’t react again while the door stays open.” To act only while something is true, combine a trigger for the change with a condition.

Any one of multiple triggers can start an automation. Triggers can have optional IDs, which can be referenced in Triggered by conditions. For templates, variables can be set at trigger level, while trigger_variables are set at automation level and support limited templates. See the automation trigger documentation for those mechanics.

Restart, Restore, and initial: The Rules That Bite

Restart behavior is not uniform:

  • Toggle: restores the previous state by default; if none is available, it starts off.
  • Timer: restore defaults to false. Set it true to restore active and paused timers after a start or restart.
  • Counter: restore defaults to true and initial defaults to 0. With restore enabled, initial is used only when there is no previous state or after a reset.
  • Number and date/time: the two integration pages describe the same rule: a valid initial value sets the start state; otherwise the previous state is restored.
  • Dropdown and text: the helpers documentation says that a YAML initial value for a number, dropdown, text, or date and time helper starts it with that value after every restart instead of its last value.

Two edge cases are worth remembering. “If you change the range of a number, its value moves to the nearest new limit.” For a dropdown, “If you remove the option that a dropdown is set to, the dropdown shows as Unknown until you select another option. After a restart, it starts at its first option.”

Troubleshooting: “The Helper Option Is Missing”

The integration pages explain that several UI helpers are provided through default_config::

  • Toggle: available when default_config: is enabled (the default), or when input_boolean: is configured manually. If default_config: was removed and input_boolean: was not configured, the option is no longer available.
  • Date and/or time: provided through default_config:, which is part of configuration.yaml by default. If it was removed, the option is no longer available.
  • Number and Dropdown: provided through default_config:; if it was removed, the option is no longer available.
  • Counter: UI helpers need default_config: in configuration.yaml, included by default.
  • Timer: if default_config: was removed, add timer: first.

The Text and Button pages give the same rule: their helpers are provided through default_config:, and if it was removed, the option is no longer available.

Frequently Asked Questions

Will a Timer finished automation run if the timer expires while Home Assistant is stopped?

No. Automations using the Timer finished trigger do not run after startup if the timer finishes while Home Assistant is not running.

Do all helpers restore their last value in the same way?

No. Toggle restores by default, Timer’s restore defaults to false, and Counter’s restore defaults to true. For several other helpers, a valid YAML initial value takes precedence after restart.

The Bottom Line

Pick by what Home Assistant must remember. Use a Toggle for on/off state, a Timer for a countdown you can start, pause, or cancel, a Counter for a whole number that changes, and input_datetime for a date, a time, or both. Check the restore rules before relying on a value across a restart, and pair a trigger with a condition when an automation must test whether something is true.

How This Guide Was Built

This guide is based on official Home Assistant documentation. We did not run these helpers hands-on. The docs version is 2026.10.4, fetched 2026-10-30. The documentation publishes no performance, memory or entity-count figures for helpers, so this guide gives none beyond documented field limits such as the Text max.

  • NoCode Insider — AI workflow automation with no-code tools, agents, and APIs

Cross-links automatically generated from SmartHome Field Guide.

← Back to guides