Home Assistant alerts on your iPhone

Updated 5 October 2026 3 min read

Home Assistant can already push to your phone: the Companion app installs a notify.mobile_app_… service, and for many homes that’s all you need.

Honk is worth adding when your house is one of several things that send you alerts. Home alerts land in the same inbox as your servers and scripts, a sensor that keeps flipping on and off sends one push instead of forty, quiet hours apply per project, and a leak can still wake you at night. Everything here uses Home Assistant’s built-in RESTful Command, so there is nothing to install.

Before you start

  • A Honk account (invite-only for now: request access), and a project for your home, for example “Home”, with an ingestion key: in the web app, open the project, then Keys.
  • Access to your Home Assistant configuration files.

1. Keep the key in secrets.yaml

The key goes into secrets.yaml with the word Bearer in front, so it never appears in the configuration you share or back up elsewhere:

# secrets.yaml
honk_bearer: "Bearer honk_…"

2. Add the RESTful commands

Add two commands to configuration.yaml: honk for text, and honk_image for events with a picture. The payload is built with to_json, so quotes in a message can’t break the request:

# configuration.yaml
rest_command:
  honk:
    url: "https://honk-me.app/v1/messages"
    method: POST
    content_type: "application/json"
    headers:
      Authorization: !secret honk_bearer
    payload: >-
      {{ dict(title=title, message=message, severity=severity | default('light'),
              priority=priority | default('normal'), group_key=group_key,
              event_type=event_type | default('event'),
              source='home-assistant', category='personal') | to_json }}
  honk_image:
    url: "https://honk-me.app/v1/messages"
    method: POST
    content_type: "application/json"
    headers:
      Authorization: !secret honk_bearer
    payload: >-
      {{ dict(title=title, message=message, severity=severity | default('light'),
              group_key=group_key, image_url=image_url,
              source='home-assistant', category='personal') | to_json }}

Restart Home Assistant, then try it from Developer tools ▸ Actions:

# Developer tools ▸ Actions, in YAML mode
action: rest_command.honk
data:
  title: "Hello from Home Assistant"
  message: "If you can read this on your phone, it works."
  group_key: home/test

3. A leak alert that folds its repeats

Sensors are jumpy. A leak sensor that goes wet, dry, wet within a minute should send one alert, not three. Give every alert about the same thing the same group_key and send it as a problem: the first event pushes, repeats become calm updates, and the second automation reports the recovery once the kitchen has been dry for ten minutes, which closes the incident.

# automations.yaml
- alias: "Honk: water leak in the kitchen"
  triggers:
    - trigger: state
      entity_id: binary_sensor.kitchen_leak
      to: "on"
  actions:
    - action: rest_command.honk
      data:
        title: "Water leak in the kitchen"
        message: "The sensor under the sink is wet."
        severity: blast
        event_type: problem
        group_key: home/leak/kitchen
- alias: "Honk: kitchen is dry again"
  triggers:
    - trigger: state
      entity_id: binary_sensor.kitchen_leak
      from: "on"
      to: "off"
      for: "00:10:00"
  actions:
    - action: rest_command.honk
      data:
        title: "Kitchen is dry again"
        message: "No water for 10 minutes."
        severity: beep
        event_type: recovery
        group_key: home/leak/kitchen

A Blast is pushed at High priority and can start a Live Activity on your Lock Screen until it shows Recovered. To let it through your quiet hours at night, send it with priority: urgent, and allow urgent events both on the project’s ingestion key and in your quiet hours.

4. A doorbell with a snapshot

A doorbell is the opposite: every ring should push. Give each ring its own group key, and attach a snapshot with image_url:

- alias: "Honk: doorbell"
  triggers:
    - trigger: state
      entity_id: binary_sensor.doorbell
      to: "on"
  actions:
    - action: rest_command.honk_image
      data:
        title: "Someone is at the door"
        message: "Front door, {{ now().strftime('%H:%M') }}"
        # one group per ring, so every ring pushes
        group_key: "home/doorbell/{{ now().timestamp() | int }}"
        image_url: "https://example.ui.nabu.casa/api/camera_proxy/camera.front_door?token={{ state_attr('camera.front_door', 'access_token') }}"

The Honk server downloads the image itself after the event arrives, so the address has to be reachable from the internet over HTTPS on port 443. A Home Assistant Cloud address or your own HTTPS reverse proxy works; a homeassistant.local address doesn’t. The camera proxy’s token rotates every few minutes, which is fine, because Honk fetches the image within seconds. Images can be up to 1 MB on Free and 5 MB on Pro and Team.

Quiet hours for the house

In the Honk web app, open the Home project ▸ My notifications and set quiet hours, for example from 10 p.m. to 7 a.m. A Light honk about the dishwasher waits until morning, and one summary arrives when quiet hours end. Quiet hours are per person, so everyone else in your household can choose their own.

What Honk adds

The Companion app sends each notification on its own. Honk adds folding for noisy sensors, recoveries that close an alert, quiet hours with a morning summary, Apple Watch actions, and one inbox where your house sits next to everything else you run.

Honk is invite-only for now: request access. Everything in this guide works on the Free plan.