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:
- Custom sentences for voice recognition
- Cross-device intent scripts
- 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¶
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:
- New intent in custom_sentences
- 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¶
- Troubleshooting - Fix common issues
- Contributing - Help improve cross-device features