BetterFrame/kiosk/src
Mitchell R 991c2f0cd5
feat(onvif-events): PullPoint subscription for all ONVIF cameras
New kiosk/src/onvif_events.rs: for each ONVIF camera in the bundle,
creates a PullPoint subscription, polls every 3s, parses
NotificationMessage XML into structured JSON (topic + source key/values
+ data key/values + timestamp), and POSTs to /api/kiosk/event with
source_type=onvif + camera_id.

Forwards ALL event topics: motion, ANPR (LicensePlateRecognition),
line crossing, intrusion, digital input, analytics, tamper — everything
the camera exposes. Node-RED sorts what matters.

Subscription lifecycle:
  - CreatePullPointSubscription with 60s InitialTerminationTime
  - Renew every 55s before timeout
  - Unsubscribe on bundle change / shutdown
  - Auto-resubscribe on pull/renew failure (30s backoff)
  - Generation tracking via Weak<()> so old workers self-terminate
    when start() is called with a new bundle

WSSE PasswordDigest auth for SOAP calls — same scheme the server's
onvif.ts uses. sha1 crate added.

BundleCamera extended with onvif_host/port/username/password_encrypted
fields (server already ships them; kiosk just wasn't deserializing).

Gated by BF_ENABLE_ONVIF_EVENTS=1. Enabled by default in the pi-gen
image env file.

TODO: cluster-key-based decryption of onvif_password_encrypted. For
now relies on the RTSP URI having plaintext credentials embedded (which
the ONVIF import path already ensures via rtspWithCredentials).
2026-05-21 12:03:30 +02:00
..
at_rest.rs feat(harden): hardware-bound at-rest encryption of kiosk state files 2026-05-21 11:34:29 +02:00
bundle.rs feat(onvif-events): PullPoint subscription for all ONVIF cameras 2026-05-21 12:03:30 +02:00
cec.rs feat(display): report and control power state 2026-05-21 09:10:30 +02:00
firmware.rs chore(kiosk): silence dead_code warnings on intentionally-held fields 2026-05-19 04:30:42 +02:00
gpio.rs fix: gpio lines binding must be mut for read_event 2026-05-13 01:23:09 +02:00
hwmon.rs feat(kiosk): improve display controls and health 2026-05-21 02:03:12 +02:00
local_server.rs feat(preview): pull entity snapshot from active kiosk first 2026-05-21 10:35:27 +02:00
main.rs feat(onvif-events): PullPoint subscription for all ONVIF cameras 2026-05-21 12:03:30 +02:00
onvif_events.rs feat(onvif-events): PullPoint subscription for all ONVIF cameras 2026-05-21 12:03:30 +02:00
os_update.rs feat(os-ota): kiosk-side RAUC bundle consumer 2026-05-21 10:47:45 +02:00
pipeline.rs fix: filter rtspsrc pads — only link video to decodebin, skip audio 2026-05-10 20:51:29 +02:00
server.rs feat(harden): hardware-bound at-rest encryption of kiosk state files 2026-05-21 11:34:29 +02:00
ui.rs feat(onvif-events): PullPoint subscription for all ONVIF cameras 2026-05-21 12:03:30 +02:00
ws_client.rs feat(display): report and control power state 2026-05-21 09:10:30 +02:00