Skip to content

Home Assistant

A native HACS integration that bridges Home Assistant entity state changes to PushWard Live Activities on your iPhone.

Info

Unlike other PushWard integrations, Home Assistant uses a custom HACS component — no Docker container required.

How It Works

The integration listens for state changes on entities you configure. When an entity enters a start state (e.g., a washer turns on), a Live Activity appears on your Lock Screen. As the entity's state or attributes change, the activity updates in real time. When the entity reaches an end state (e.g., turns off), the activity is dismissed.

Requirements

  • Home Assistant 2025.7.0 or newer
  • PushWard iOS app installed on your iPhone
  • A PushWard integration key (recommended scope: activity:manage, slug pattern: ha-*)

Installation

Via HACS (Recommended)

  1. Open HACS in Home Assistant
  2. Click the three-dot menu and select "Custom repositories"
  3. Add https://github.com/mac-lucky/pushward-hass with category Integration
  4. Search for "PushWard" in HACS and install
  5. Restart Home Assistant

Manual

Copy custom_components/pushward/ from the repository into your Home Assistant's custom_components/ directory and restart.

Setup

Go to Settings > Devices & Services > Add Integration > PushWard.

FieldDescription
Server URLPushWard server base URL (default: https://api.pushward.app)
Integration KeyYour hlk_ token with activity:manage scope
💡 Tip

Create the integration key in the PushWard iOS app under Settings with slug pattern ha-* and activity:manage scope.

Adding Entities

After setup, click "Add tracked entity" on the integration card. Each entity becomes a Live Activity.

FieldDefaultDescription
EntityAny Home Assistant entity
Activity SlugAuto (ha-<entity-id>)Unique identifier on PushWard
Activity NameEntity IDDisplay name shown on iPhone
IconDomain defaultSF Symbol name (e.g., washer, thermometer) or MDI icon with mdi: prefix (e.g., mdi:washing-machine, mdi:thermometer)
Priority10–10 eviction priority
Templategenericgeneric, countdown, alert, steps, gauge, timeline, board, or log
Start StatesDomain defaultComma-separated states that start the activity
End StatesDomain defaultComma-separated states that end the activity
Min. Update Interval5sCooldown between mid-activity updates
Progress Entity / Attribute0–100 percentage, from the tracked entity or a separate one
Remaining Time Entity / AttributeRemaining seconds, from the tracked entity or a separate one (auto-parses timestamp, duration, H:MM:SS, or plain seconds)
Accent ColorBlueColor for the Live Activity accent

Each value (remaining time, progress, subtitle, gauge value, current step, fired-at) can read from a separate entity instead of the tracked entity. Leave the source entity empty to use the tracked entity; set it to read that entity's state, or pair it with an attribute to read an attribute off it. This means an appliance with one sensor for its state and another for the time remaining works without a template helper.

The board and log templates compose several entities into one activity. A board shows 1–4 tiles, each reading from a separate entity; a log shows a newest-first list of up to 20 lines, with optional extra columns (an attribute or another entity's value) and a per-line severity level.

Domain Defaults

Start/end states and icons are pre-filled based on the entity's domain:

DomainIconStart StatesEnd States
binary_sensorcircle.fillonoff
switchpoweronoff
climatethermometerheating, coolingoff, idle
vacuumfancleaningdocked, idle
media_playerplay.circle.fillplayingoff, idle, paused
locklock.fillunlockedlocked
coverrectangle.portrait.arrowtriangle.2.outwardopening, closingopen, closed
timertimeractiveidle, paused
sensorgaugemanualmanual

Activity Lifecycle

Start

When an entity enters a start state, the integration creates the activity on PushWard (if it doesn't exist) and sends a push-to-start notification. The Live Activity appears on your iPhone.

Updates

While active, any state or attribute change — on the tracked entity or any configured companion entity — triggers a throttled update. Rapid changes are coalesced — only the latest state is sent when the cooldown expires. If a progress source is configured (an attribute or a separate entity), the progress bar reflects its value.

End

When the entity reaches an end state, a two-phase dismissal runs:

  1. A "Complete" update is sent (green accent, checkmark icon, progress 1.0)
  2. After 5 seconds, the activity is ended and dismissed from the Lock Screen

If the entity starts again during the 5-second window, the end is cancelled.

HA Restart

On Home Assistant restart, any tracked entity already in a start state automatically resumes its Live Activity.

Info

The integration is entirely event-driven — it listens for HA state changes, not polling. The update_interval setting is a rate-limiter, not a polling period.

Notifications, Widgets & Email

Beyond mirroring entities to Live Activities, the integration exposes services for the rest of the PushWard surface. Each needs the matching capability on your integration key — your default key has all three enabled:

  • iOS widgets — add a tracked widget sub-entry (event- or poll-triggered, 10–3600 s) to push Home Screen widgets in the value, progress, gauge, status, and stat_list templates, or call pushward.widget_refresh to force a refresh and pushward.delete_widget to remove one. Needs the widgets capability.
  • Push notifications — the pushward.send_notification service sends a regular (non-Live-Activity) push with title, body, level (including critical), actions, and rich media. Needs the notifications capability.
  • Transactional email — the pushward.send_email service delivers email to a verified recipient of your account. Needs the emails capability.

For driving an activity straight from an automation (rather than tracking an entity), the create, update, end, and delete services are all available. Update actions are template-specific — pushward.update_activity_generic, …_steps, …_gauge, and so on — so each action's form only shows the fields that template uses.

Account Sensors

The integration also creates five sensors that track your PushWard usage against your plan, refreshed about every 15 minutes:

  • sensor.pushward_notifications_used
  • sensor.pushward_live_activity_updates_used
  • sensor.pushward_widget_updates_used
  • sensor.pushward_emails_used
  • sensor.pushward_subscription_tierfree or premium

Use them in automations to warn before you hit a quota, or just to keep an eye on consumption.

Example: Washing Machine

Track a washing machine using a sensor entity with a progress attribute:

SettingValue
Entitysensor.washing_machine_status
Iconwasher (or mdi:washing-machine)
Templategeneric
Start Stateswashing, rinsing, spinning
End Statesoff, complete, idle
Progress Attributeprogress_percent
Accent ColorBlue

When the washer starts, a Live Activity appears showing "Washing" with a progress bar. As progress_percent increases, the bar fills. When the cycle completes, a green "Complete" notification appears before the activity dismisses.