Some hardware links on this page are affiliate links. As an Amazon Associate I earn from qualifying purchases. We may earn a commission if you buy through them, at no extra cost to you. See the affiliate disclosure.
A phone in silent mode under a cushion is not a notification problem — it is a “make it scream anyway” problem. This workflow listens for a spoken find my phone (or “find [person]’s phone”) on any Home Assistant Assist satellite, looks up that person’s Companion notify service, and sends a critical / alarm-stream push that is allowed to break Do Not Disturb. A persistent card on the phone has a dismiss action; a timeout stops the loop so it cannot ring forever.
Entity ids and notify services are blueprint inputs. Do not publish which person owns which device.
What problem it solves
You want to shout at a satellite in the kitchen and have the matching phone cut through silent mode — without a separate automation per person, and without a polite notify that the phone is allowed to ignore.
How it works
- Conversation trigger — Assist hears a phrase you configure (
find my phone,where is my phone,find the other phone). Any satellite that is already in the Assist pipeline can fire it: an ESP32-S3 board running ESPHome, a Voice Preview Edition, or another Assist device. - Person → phone map — the blueprint takes a list of
personentities and matchingnotify.mobile_app_*services. “Find my phone” with no name uses the satellite’s assigned person (or a default you pick). A spoken name picks that row. - Critical / alarm payload — iOS:
push.interruption-level: critical(Critical Alerts must be enabled for the Companion app). Android:ttl: 0,priority: high, andchannel/media_stream: alarm_streamso the alarm stream can override silent mode. - Persistent + dismiss — the same notify carries a tagged, persistent card and a “Found it” action. Tapping the action clears the tag and stops repeats.
- Safety timeout — a repeat/delay loop (pack default a few minutes) stops even if nobody taps. Restarting the phrase cancels the previous loop (
mode: restart).
This is a locate-the-handset pattern, not a tracker. It does not publish coordinates.
Hardware notes
- Satellite. Any Assist endpoint is enough. An ESP32-S3 voice board (Voice Preview Edition or a similar ESPHome satellite) is the usual living-room box; a phone running Companion can also expose Assist. The pack does not flash the satellite — it only needs the conversation trigger.
- Phones. Companion must be installed and signed in. iOS: Settings → Home Assistant → Notifications → Critical Alerts. Android: give the Companion
alarm_streamchannel high importance and “override Do Not Disturb” if you want silent-mode rings. - Mapping. One notify service per person. Do not put real given names in a published YAML; use the person entity and the
notify.mobile_app_…service HA already created. - No extra hub. If Assist already answers questions and Companion already gets pushes, this is YAML and a map.
Snippet
The pack ships a blueprint. Inputs replace real entity ids and notify services:
trigger:
- platform: conversation
command:
- "find my phone"
- "find the phone"
id: locate
- platform: event
event_type: mobile_app_notification_action
event_data:
action: !input dismiss_action
id: dismissed
action:
- choose:
- conditions:
- condition: trigger
id: locate
sequence:
- variables:
notify_target: !input default_notify
- service: "{{ notify_target }}"
data:
title: "Phone locator"
message: "Tap Found it when you have the handset."
data:
tag: phone_locator
persistent: true
ttl: 0
priority: high
channel: alarm_stream
push:
interruption-level: critical
actions:
- action: !input dismiss_action
title: Found it
# person map + repeat/timeout: full blueprint in the pack
- conditions:
- condition: trigger
id: dismissed
sequence:
- service: !input default_notify
data:
message: clear_notification
data:
tag: phone_locator
Setup outline
- Confirm Assist already handles a test phrase on the satellite you will use.
- In Developer Tools → Actions, send a one-off Companion notify with
interruption-level: critical(iOS) orchannel: alarm_stream(Android). Fix permissions before you import. - Import the blueprint. Fill the person → notify map, default notify, dismiss action id, and timeout.
- Test: silent the phone, speak the phrase at the satellite → one loud/critical push; tap Found it → loop stops; ignore it → timeout clears the card.
Troubleshooting
- Phrase does nothing. The satellite is not attached to the Assist pipeline, or the conversation trigger text does not match what you said. Check Settings → Voice → the satellite’s Assist pipeline, then the automation trace.
- Push arrives, stays silent. iOS Critical Alerts is off, or the Android
alarm_streamchannel is still “silent / low.” Fix OS settings; a normal HA notify will not override mute. - Wrong phone rings. The person map points at the wrong
notify.mobile_app_*service (device name and service slug often differ). Call the service by hand in Developer Tools and copy that exact service name into the map. - Never stops. Dismiss action id in the notify does not match the event trigger, or the phone never reports the tap back to HA. Use the pack’s tagged
clear_notificationon timeout so a missed tap still ends.
Credits
Based on the community blueprint Voice PE — Find your Phone (modified). This write-up is an original overview of the Assist-trigger plus per-person critical/alarm Companion pattern.