PushWard HACS integration — send HA automations to iPhone Live Activities

Hi all — long-time HA user, first time posting an integration here. I built a HACS custom component that lets any Home Assistant automation fire an iPhone Live Activity using Pushward.

The HA companion app is great for regular notifications, but i always wanted to follow washing machine, dishwasher, 3D printer, package delivery live. Activities stay live and update in place: countdowns tick down, gauges move with the sensor, timelines fill in.

Install

Add as a HACS custom repository, then Settings → Devices & Services → Add Integration → PushWard and paste your integration key.

Services

Five services you can call from any automation:

  • pushward.send_notification — title/body with optional severity
  • pushward.create_activity — spawn a Live Activity (slug, name, priority, TTLs)
  • pushward.update_activity — 20+ update fields across all 6 templates
  • pushward.end_activity — graceful close with completion message
  • pushward.delete_activity — hard delete

The integration auto-suggests a template based on the entity domain — washer/dryer → countdown, timer → countdown with remaining_time, sensor → gauge with min/max — so common cases need almost no YAML.

Templates

Six render styles available on the iPhone side:

  • Generic — progress bar + state
  • Countdown — server-managed timer
  • Steps — pipeline stages
  • Alert — severity colors
  • Gauge — value + min/max + unit
  • Timeline — multi-series sparkline with 30-minute history

Example automation

alias: Washer started
trigger:
  - platform: state
    entity_id: sensor.washer_state
    to: "on"
variables:
  activity_slug: "washer-{{ now().timestamp() | int }}"
action:
  - service: pushward.create_activity
    data:
      slug: "{{ activity_slug }}"
      name: Washing in progress
      priority: 5
  - service: pushward.update_activity
    data:
      slug: "{{ activity_slug }}"
      state: ONGOING
      template: countdown
      end_date: "{{ (as_timestamp(now()) + 43*60) | timestamp_utc }}"

FAQ

Is the iPhone app open source?

The HACS integration is open source (MIT). The iPhone app and the APNs gateway service are not — Apple’s APNs provider auth requires a provisioned developer account and the iOS binary ships with pinned TLS certs, so there isn’t a self-host path for that piece. The HA integration is auditable end-to-end on your side.

Cost?

The iPhone app is currently in TestFlight public beta and free for all beta testers. The HACS integration is free / MIT and stays free.

What about Android?

iOS only today — the whole point of the project is ActivityKit / Dynamic Island, which is iOS-specific.

Site: https://pushward.app

I’m the developer — happy to help with setup, take feature requests, and review PRs. Service shapes can still change based on what you actually want to call from automations. Thanks for the feedback in advance!

Now it also supports widgets that can be updated live from Home Assistant:

1.3.0
Now supports ipad and added 2 new templates board and log

App is live in AppStore

and email support :smiley:
email

1.5.0-2x
Two updates landed together this time: the ios app is at 1.5.0 and the hacs
integration is at 0.37.0. They pair up, so update both.

In the app (ios 1.5.0)

  • Design live activities right in the app. Pick a template, set the colors,
    progress, a countdown, steps, a gauge, or an alert, then push it straight to
    your devices. No automation required to try one out.
  • Auto-dismiss for live activities. Choose how long a finished activity stays on
    the lock screen, or have it disappear the moment it ends. This is the app side
    of the new dismissal_ttl option below.
  • Free view-only sharing. People you share an activity with can join for free as
    viewers. Editor access still needs a subscription.
  • Siri and shortcuts. Say “Send a notification with pushward” to send yourself a
    note, or “Show my unread pushward notifications” to open your inbox.
  • Control center controls. Fire one of your widget webhooks with a single press,
    or jump straight to your notification inbox.
  • Spotlight search. Your notifications show up in system search, so you can find
    and open any past one from the home screen.
  • Steps activities now show the estimated time up front and animate to the next
    step as progress advances, and search covers your whole notification and email
    history instead of just what is on screen.

In the integration (hacs 0.37.0)

Mostly about making setup less fiddly, with reliability fixes underneath.

  • Easier forms. Activity and widget fields are grouped into collapsible sections
    now (the steps template alone had 40 fields), so each template opens with just
    the handful that matter.
  • Row editors instead of comma-strings. Board tiles, widget stat rows, timeline
    series, thresholds, and log columns each give you an add-a-row table where you
    pick the entity and fill in labeled cells, instead of typing
    Label=entity_id:attribute:unit by hand. The four steps fields collapsed into
    one editor with a row per step. Configs written the old way still load; the
    old string format is still accepted.
  • Real dropdown labels in your language (template, severity, sound, timeline
    scale, trigger mode) instead of raw values like logarithmic, plus proper
    validation errors that tell you which field and why.
  • dismissal_ttl is settable on a tracked activity now, and the
    update_activity_* actions take ended_ttl, stale_ttl, and dismissal_ttl
    at the top level so you can adjust a running activity.
  • Steps activities go up to 64 (was 20), and the steps update action takes a
    duration to re-anchor the live-progress window.
  • Board tiles can set a per-tile color and tap url; gauge min/max are proper
    number boxes.
  • A live activity or widget you swipe away (or that the server drops on a
    restart) recreates itself on the next state change instead of going dark for
    the rest of the run, on repeated dismissals too. Usage sensors ride out a
    transient rate-limit instead of flapping to unavailable, and reconfiguring an
    activity no longer overwrites the completion card mid-animation.

Both updates are backward compatible. Existing activities, widgets, and their
stored settings keep working with no changes on your side.

Update the app from the app store and the integration through hacs as usual.
Full integration notes:
App store: ‎PushWard App - App Store
Issues and requests: Issues · mac-lucky/pushward-hass · GitHub

Happy to hear how you’re using it.

Since the 1.5.0 post: ios app is at 1.7.0, hacs integration at 0.41.0. Update both.

Pushward is in the hacs default store now. Search for pushward in hacs, install, done. No custom repository step anymore (old custom-repo installs keep working).

The big one: live activities can carry images. Send image_url with a generic or steps activity and it shows on the lock screen, dynamic island and watch. Poster, square or circle. The integration generates a blurred preview hash so the image never pops in as a gray box. Feed it entity_picture from a media player, or a camera snapshot url.

generic-poster

Changelog:

Also new:

  • five widget templates: trend, countdown, battery (rings for up to 8 devices), schedule, flow (pv / battery / grid / home)
  • stale_after dims a widget that stopped hearing updates instead of showing old numbers as current
  • timelines seed up to 10 days of recorder history at start instead of beginning empty
  • notifications from 130+ self-hosted apps show that app’s own logo now