Skip to content

[Feature]: Live Activity for OTA updates in progress #11

@tashda

Description

@tashda

What problem does this solve?

When an OTA firmware update is running on a Zigbee device, there's no way to see progress without keeping Shellbee open and parked on the device's detail screen. OTAs can take many minutes (sometimes longer for routers/bulbs), and the user either has to babysit the app or come back later and hope it finished. The phone's Lock Screen and Dynamic Island already exist for exactly this kind of long-running background task.

What would you like Shellbee to do?

Show OTA progress as an iOS Live Activity (Lock Screen + Dynamic Island) while one or more updates are in flight.

Behavior:

  • Surface: Live Activity only — no Home Screen widget. Live Activities are designed for real-time updates; widgets refresh on iOS's schedule and would lag.
  • Trigger: Auto-start whenever Z2M reports an OTA update is in progress, regardless of where it was kicked off (Shellbee, Z2M web frontend, or an automation). The app subscribes to the relevant bridge/response/device/ota_update/* and per-device update state already, so the Live Activity should hook into the same stream.
  • Concurrency: A single rolled-up Live Activity covers all in-progress OTAs (rather than one per device). Z2M can run several at once, and stacking N tiles on the Lock Screen would be noisy.
  • Content:
    • Currently-updating device name (the one whose progress is actively advancing)
    • Aggregate progress bar across all in-progress OTAs
  • Tap behavior: Deep-link into Shellbee and open the OTA list view (a screen showing every in-progress OTA — may need to be added if it doesn't exist as a dedicated view today).
  • End state: When all OTAs complete, briefly show a success state ("Updated to vX.Y.Z" or "N devices updated"), then auto-dismiss after ~30s. Standard iOS Live Activity pattern.

Implementation notes (non-binding):

  • Uses ActivityKit — requires iOS 16.1+ baseline (already met).
  • The AppStore already tracks OTA progress per device; the Live Activity controller should observe that state and start/update/end the activity accordingly.
  • Consider what happens on app termination — Live Activities continue running independently, but progress updates stop arriving once the WebSocket is gone. Either accept stale progress until reconnect, or show a "disconnected" state on the activity.

Does the Z2M web frontend already do this?

No — this would be Shellbee-specific.

(The Z2M web frontend shows OTA progress inline on the device row, but it has no equivalent of iOS Live Activities. This is a native-app advantage we should lean into.)

Alternatives you've considered

  • Local notification on completion only — works but loses the live progress signal; user can't see "it's at 60%, give it another minute" at a glance.
  • Push notification per progress milestone — would spam the Lock Screen.
  • Home Screen widget — considered and rejected: refresh cadence is wrong for live progress.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions