Skip to main content

Concepts

Facet ──Signal──▶ Refraction ──row──▶ Capture Set
▲ │
└───device action───┘

Prism turns hardware events into structured, actionable data. A Facet streams Signals; a Refraction processes them and can command devices, call out to other systems, notify people, and append rows to a Capture Set.

Facets

A Facet is a hardware device managed by Prism. Two types ship today:

  • RFID reader (rfid_reader) — UHF RFID; raises a Signal per tag read. Drivers for Chainway and Impinj readers.
  • Camera (camera) — IP/USB; periodic and on-demand snapshots.

Each Facet runs a Facet Agent — an on-device service on a single-board computer (e.g. Raspberry Pi / RockPi) that wraps the hardware, keeps a secure connection to Prism, advertises the device's capabilities (the Signals it emits, the actions it accepts, its settings), and streams Signals up. One board can host several Facets (e.g. an RFID reader plus a camera).

Prism owns each Facet's identity: on adoption it issues a platform agent name (agt-<word>-<hash>) that is the device's connection identity and topic namespace — not the device's self-reported hardware id. A Facet moves through a lifecycle:

pre-provisioned / pending adoption → adopted → assigned (org + Site) → suspended → decommissioned

See Setup & onboarding for how Facets are provisioned and adopted.

Signals

A Signal is an event emitted by a Facet (or generated by the platform). It carries a type and a JSON payload, and is scoped to your org. Examples:

  • rfid.tag_readepc, antenna_port, rssi, tid, timestamp
  • camera.snapshot — a signed image URL, captured_at, what triggered it
  • Facet heartbeats and reader errors

Signals are the input to Refractions and appear on the live Signals timeline.

Refractions

A Refraction is an event-driven, no-code workflow graph. A trigger Signal enters, and the graph's Stages run in sequence, connected by pass / fail edges. Stages filter and branch, transform data, command devices, call APIs, send notifications, run AI steps, and write to Capture Sets. Refractions are versioned and are draft, active, or disabled.

The Refractions page covers triggers, the full stage catalog, the filter / expression language, and the execution model in depth.

Capture Sets

A Capture Set is a named, append-only collection of rows written by Refraction stages. Its schema is inferred from the first row and only ever grows (columns are additive); rows are immutable. A row is a timestamp plus the payload fields you selected, any media references, and a link back to the execution that wrote it. Capture Sets are the durable output of Prism and the thing you query and export.

Sites

A Site is an org-scoped physical grouping of Facets — "Warehouse A", "Office Lobby". Indoor Sites carry building / floor / zone; outdoor Sites carry coordinates. Each Facet belongs to at most one Site.

Spectrum

Spectrum is the live monitoring dashboard. You compose saved Views from widgets — camera snapshot, RFID live feed, facet status, signal counter, capture-set row counter — all updating in real time over a WebSocket.

Organizations & roles

Prism is multi-tenant; everything is scoped to your organization. Four role tiers:

RoleCan
Platform admin (Intrasys)Register hardware, provision orgs, cross-org support (audited).
Org adminBuild/enable Refractions, manage Facets, Sites, users, API keys.
Org operatorRun and monitor; decide approvals.
Org viewerRead-only.

How data flows

A Facet Agent streams Signals over MQTT (TLS) to Prism's broker; the platform records each Signal, dispatches it to the Refraction engine, and fans it out live to the browser. Camera images are uploaded over HTTPS and served back as short-lived signed URLs. Device commands travel back down the same secure channel to the Facet. Live dashboards update over a per-org realtime connection.