Home AssistantESPHome

Voice “find my phone”

Say “find my phone” to a Home Assistant Assist satellite and ring the matching Companion device with a critical alert that can cut through silent mode — iOS critical, Android alarm stream, mapped per person.

Difficulty · BeginnerSetup · 20–40 minutesHA · current stable (blueprint)ESPHome · current stable
Get the pack · from $19Have us set it up

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

  1. 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.
  2. Person → phone map — the blueprint takes a list of person entities and matching notify.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.
  3. Critical / alarm payload — iOS: push.interruption-level: critical (Critical Alerts must be enabled for the Companion app). Android: ttl: 0, priority: high, and channel / media_stream: alarm_stream so the alarm stream can override silent mode.
  4. Persistent + dismiss — the same notify carries a tagged, persistent card and a “Found it” action. Tapping the action clears the tag and stops repeats.
  5. 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_stream channel 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

  1. Confirm Assist already handles a test phrase on the satellite you will use.
  2. In Developer Tools → Actions, send a one-off Companion notify with interruption-level: critical (iOS) or channel: alarm_stream (Android). Fix permissions before you import.
  3. Import the blueprint. Fill the person → notify map, default notify, dismiss action id, and timeout.
  4. 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_stream channel 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_notification on 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.

Changelog

v1.0 · Oct 17, 2026: First publish.