Skip to content

Cross-Device Timer Control

Control timers from any voice assistant in your home.

Overview

By default, timer commands affect the timer in the same area as the voice assistant. With cross-device control, you can:

  • Start a timer in another room: "Start the kitchen timer for 5 minutes"
  • Cancel a remote timer: "Stop the bedroom timer"
  • Check another timer's status: "How much time on the playroom timer?"
  • Move a timer to another room: "Move the timer to the kitchen"

Setup

Cross-device control requires:

  1. Custom sentences for voice recognition
  2. Cross-device intent scripts
  3. Target location mapping

Step 1: Install Custom Sentences

Download cross_device_timers.yaml to your HA config directory at config/custom_sentences/en/ (create the directory if needed).

Step 2: Add Cross-Device Intent Scripts

Download cross_device_intent_scripts.yaml and merge it into your intent scripts:

# Option 1: Merge files manually by copying the contents into intent_scripts.yaml

# Option 2: Use include_dir_merge_named
intent_script: !include_dir_merge_named intent_scripts/

Step 3: Configure Target Locations

Edit the target_to_area mapping in cross_device_intent_scripts.yaml:

target_area: >-
  {% set target_to_area = {
    'playroom': 'playroom',
    'playroom timer': 'playroom',
    'kitchen': 'kitchen',
    'kitchen timer': 'kitchen',
    'dining': 'kitchen',        # Alias
    'dining room': 'kitchen',   # Alias
    'bedroom': 'bedroom',
    'my bedroom': 'bedroom',    # Alias
  } %}
  {{ target_to_area.get(explicit_target, '') }}

And update the sentence list in cross_device_timers.yaml:

lists:
  target_location:
    values:
      - in: "kitchen"
        out: "kitchen"
      - in: "the kitchen"
        out: "kitchen"
      # Add your locations and aliases

Step 4: Restart Home Assistant

ha core restart

Available Commands

Start Timer in Another Area

Phrase Result
"Start the kitchen timer for 5 minutes" Starts timer.kitchen
"Set a 10 minute timer in the bedroom" Starts timer.bedroom
"Start a 30 second dining room timer" Starts timer.kitchen (alias)

Cancel Remote Timer

Phrase Result
"Cancel the kitchen timer" Cancels timer.kitchen
"Stop the bedroom timer" Cancels timer.bedroom
"Turn off the playroom timer" Cancels timer.playroom

Check Remote Timer Status

Phrase Result
"How much time on the kitchen timer?" Reports remaining time
"What's left on the bedroom timer?" Reports remaining time
"Check the playroom timer" Reports status

Restart Remote Timer

Phrase Result
"Restart the kitchen timer" Restarts with original duration
"Reset the bedroom timer" Restarts with original duration

Move Timer

Move your current timer to another area:

Phrase Result
"Move the timer to the kitchen" Transfers timer
"Send my timer to the bedroom" Transfers timer

The timer is cancelled in the source area and started in the target area with the remaining time.

Voice Recognition Tips

Be Specific

Good: - "Start the kitchen timer for 5 minutes" - "Cancel the bedroom timer"

May not work: - "Start a timer in the kitchen for 5 minutes" - "Stop that timer"

Use Consistent Names

Match the names in your target_location list:

  • If you configured "kitchen", say "kitchen" (not "the kitchen area")
  • If you configured "my bedroom", say "my bedroom" (not just "bedroom")

Aliases

Add multiple phrases for the same area:

- in: "kitchen"
  out: "kitchen"
- in: "the kitchen"
  out: "kitchen"
- in: "kitchen timer"
  out: "kitchen"

Troubleshooting

"I couldn't determine which timer"

The spoken location didn't match any entry in target_to_area.

Fix: Add the phrase to both: 1. cross_device_timers.yaml lists 2. cross_device_intent_scripts.yaml mapping

Timer starts in wrong area

Check the mapping in cross_device_intent_scripts.yaml. Ensure the out value in custom_sentences matches the key in target_to_area.

"No active timer" when timer is running

The target_area resolved to empty string or wrong area.

Debug: 1. Check HA logs for intent processing 2. Verify target_location list matches mapping

Move timer doesn't work

Requirements for move: - Source area has active or paused timer - Target area is different from source - Target area has valid timer entity

Advanced Configuration

Custom Intent Names

Rename intents for your setup:

# cross_device_timers.yaml
intents:
  MyCustomStartTimer:  # Changed name
    data:
      - sentences:
          - "start {target_location} timer for <duration>"

Additional Commands

Add new cross-device commands by creating:

  1. New intent in custom_sentences
  2. New intent_script handler

Example - pause remote timer:

# custom_sentences/en/cross_device_timers.yaml
intents:
  PauseOtherTimer:
    data:
      - sentences:
          - "pause the {target_location} timer"

# intent_scripts.yaml
PauseOtherTimer:
  action:
    - variables:
        target_area: "{{ target_to_area.get(target_location, '') }}"
    - service: timer.pause
      target:
        entity_id: "timer.{{ target_area }}"
  speech:
    text: "{{ target_area }} timer paused."

Room Announcements

Notify the target room when their timer is controlled:

# automation
- alias: "Announce remote timer control"
  trigger:
    - platform: event
      event_type: call_service
      event_data:
        domain: timer
  condition:
    - condition: template
      value_template: >
        {{ trigger.event.data.service_data.entity_id !=
           'timer.' ~ states('sensor.last_voice_command_area') }}
  action:
    - service: tts.speak
      target:
        # Target the affected room

Security Considerations

  • Cross-device control uses the same authentication as local commands
  • Any voice assistant in your home can control any timer
  • Consider this when placing devices in shared spaces

Next Steps