Sentinel Technical Specifications
How Sentinel discovers ONVIF cameras, ingests Wiegand/OSDP/BACnet door controllers, drives AI threat detection on edge GPUs, validates alarm panels for UL central-station dispatch, and keeps 90 days of evidence with immutable audit logs.
Capabilities & Performance
Device registry
surfaces registered + currently-online ONVIF/RTSP cameras (full subnet WS-Discovery probe via a discovery adapter is on the roadmap)
RTSP transcoding
GPU-accelerated RTSP→HLS, sub-second viewer latency
AI detection
10+ types — person, vehicle, weapon, package, animal, face, license-plate, behavior, anomaly, threat-score
Environmental sensors
8 metric types — temperature, humidity, CO, smoke, flood, air quality, pressure, custom
Arm modes
4 — away, stay, night, disarmed — with entry/exit/alarm delays
Door protocols
Wiegand (26/34/37-bit), OSDP (Secure Channel), BACnet, TCP, dry-relay, standalone
Reader types
RFID, NFC, biometric, keypad
Mantrap interlock
Two-door sequencing with tailgating detection
Central station signal formats
SIA-DC09, Contact ID, Ademco
Retention
90 days default, 7–365 day range, legal-hold immune
Storage backends
AWS S3, Cloudflare R2, MinIO, local — your choice, your bucket
Audit trail
Immutable access logs and AI threat logs (write-once) for SOC2/HIPAA/GDPR
NOC latency
Sub-second via WebSocket push (vs 5–30s polling)
1. AI Threat Detection
Detection types (10): person, vehicle, weapon, package, animal, face, license-plate, behavior (loitering / tailgating / wrong-direction), anomaly (baseline deviation), threat-score (weighted aggregate).
Confidence thresholds are configurable per detection type, per zone. Bounding boxes are normalized (0–1) so they survive resolution changes.
Watchlist matching runs face/plate detections against per-tenant watchlist entries. Matches trigger immediate alerts; matches are logged with confidence and reviewer feedback (true-positive / false-positive) for model improvement.
Anomaly detection builds per-zone behavior profiles (occupancy, motion frequency, access attempts) from observed activity over time. A profile moves from "learning" to "active" once it accumulates a sufficient sample size and confidence level, and goes stale (excluded from detection) if it isn't refreshed. Deviations from an active baseline trigger alerts with severity tiered by deviation magnitude.
Threat scoring combines weighted factors — person detected, after-hours, badge denied, motion-unusual — into a 0–1 composite score with per-factor justification surfaced to the operator.
Inference targets: edge GPU via the Bridge appliance (NVIDIA GTX 1070+ tested) or cloud fallback. Edge mode keeps frames on-premise — important for HIPAA / GDPR-sensitive sites.
2. Access Control
Door / gate / turnstile / elevator / mantrap — five access-point shapes, all driven by the same access engine.
Controller protocols: Wiegand (26 / 34 / 37-bit), OSDP with Secure Channel encryption, BACnet, TCP, dry-relay, and standalone (reader makes its own decisions). Each access point can be re-protocoled without re-keying.
Readers: RFID (HID Prox), NFC (mobile wallet), biometric (fingerprint / face), keypad. Mobile credentials over BLE are first-class.
Anti-passback prevents badge sharing — a badge can't re-enter the same zone without first exiting. Configurable timer.
Mantrap interlock sequences two doors: outer opens, person enters vestibule, outer closes, then inner can open. Tailgating attempts (no inner open within delay) trigger an alarm with camera evidence attached.
Schedule-driven access: per access-point time windows, day-of-week rules, access-level overrides per holiday.
Lockdown cascade locks all access points in a zone (or all zones) in under a second and emits sentinel.lockdown.activated for cross-module response (fleet driver alerts, smart-spaces elevator restriction, helpdesk ticket creation).
3. Alarm Panel Integration
Bridge serial-USB connects existing DSC, Honeywell, Bosch, Ademco, and Vista panels into the Aeion event bus — no rip-and-replace.
Partition state machine: disarmed → arming → armed_away / armed_stay / armed_night → entry_delay → alarm → tamper. Each transition is logged with actor, mode, and timestamp.
Entry / exit / alarm delays are configurable per partition (defaults: 30s entry, 60s exit, 5-min alarm duration).
Two-zone verification is the false-alarm killer — central station only dispatches when two zones trip within a configurable window OR when a camera confirms motion in the alarm zone.
Auto-arming schedules arm at a defined time on configured days; manual arm with PIN bypass is fully audited.
Panic types: fire, medical, police — each routes to a different central-station dispatch path.
Sensor bypass is logged and surfaced in the panel state UI so an operator can never forget a bypassed sensor.
Central station signal formats: SIA-DC09 (modern IP), Contact ID (legacy POTS), Ademco. The transport layer auto-selects per provider account.
4. Environmental Monitoring
Metric types (8): temperature, humidity, CO (carbon-monoxide), smoke, flood (water level), air quality index, pressure, custom.
Threshold rules are per-sensor and time-windowed — e.g., "alert if temperature > 80°F for 5 consecutive readings" cuts thermal-spike noise.
Anomaly detection compares live readings against per-sensor baselines learned from accumulated observation history, surfacing deviations that fixed thresholds would miss.
Device health checks (battery level, signal strength, last-heartbeat) auto-create maintenance tickets when a sensor goes offline.
5. Recording & Retention
Recording modes: continuous, motion-triggered, schedule-driven, event-triggered. Motion regions are drawn directly on the camera preview in admin UI and stored as normalized rectangles.
Storage backends: AWS S3, Cloudflare R2, MinIO (self-hosted), local disk. Customer brings their own bucket and credentials — Sentinel never holds your footage in a multi-tenant vault unless you ask it to.
Retention policies run on a 6-hour cron (off-peak by default). Default 90 days, configurable 7–365 days. Recordings approaching the retention edge can be archived to cold tier (S3 Glacier, R2 Archive) instead of deleted.
Legal hold is a per-recording boolean — when set, the retention cron skips that recording regardless of age. Releases are audit-logged with the actor and reason.
Audit trail captures every retention action — delete, archive, hold, release — to a separate immutable table for SOC2 / ISO27001 evidence.
6. Hardware Adapter Architecture
Sentinel ships an adapter pattern for every hardware-touching service: PTZ control, access-point locking, alarm-panel transport, NVR pipeline. Each service has a typed adapter slot that vendor-specific implementations plug into at runtime.
Honest no-op is the rule: when no adapter is installed, the service returns { enabled: false, reason: "no_*_adapter" } — surfaced in dashboards as a visible gap, never silently succeeded. This prevents the worst class of integration bug ("the UI says door unlocked but the door never moved").
Vendor firmware adapters provide a pluggable framework for Axis, Hikvision, Hanwha, Dahua, and Bosch cameras; the vendor-specific firmware-push protocols (VAPIX / ISAPI / SUNAPI / DSS / RCP) are in progress, so an un-implemented vendor reports an honest "not implemented" rather than silently claiming success. PTZ control adapters cover ONVIF, Pelco-D / Coaxitron, and generic RS-485 serial. Access lock adapters cover HID, Schlage Engage, dormakaba, Salto, Kisi, and generic relay-board.
Swap at runtime — drop in a new vendor adapter without rebooting Sentinel; the slot picks it up via DI on the next call.
7. Cross-Module Events
Sentinel subscribes to:
- smart-space.occupancy.changed — auto-evaluates zone automation rules (PTZ presets, after-hours camera tilt, lighting overrides)
- smart-space.automation.trigger_incident — a physical automation sensor trip auto-creates a security incident
- fleet.vehicle.approaching — pre-opens a gate or access point for an approaching fleet vehicle
- fleet.location.updated — geofence-based access gating from live vehicle location
Sentinel emits:
- sentinel.lockdown.activated — fan-out to fleet (fleet.alert.broadcast driver alerts) and notifications (security push)
- sentinel.event.created — atomic security event (intrusion, badge denied, sensor trip)
- sentinel.incident.created — war-room record created, severity tiered, evidence chain initiated; auto-creates a helpdesk ticket on critical/high severity
- sentinel.alarm.triggered — alarm partition crossed into alarm state
- sentinel.access.denied — credential rejected at an access point
Customer-facing webhook subscribers can subscribe to any of the above via the standard Aeion webhook UI. Events carry tenant, severity, zone, device, and timestamp — enough to drive PagerDuty / Opsgenie / custom dashboards.
8. What We Track — Customer-Queryable Collections
| Collection | What it holds |
|---|---|
| `sentinel_devices` | Cameras with ONVIF/RTSP config, PTZ caps, recording config, zone assignment |
| `sentinel_access_points` | Doors/gates/turnstiles/elevators/mantraps with controller protocol and schedules |
| `sentinel_alarm_partitions` | Partition state, arm modes, entry/exit delays, auto-arm schedules, verification rules |
| `sentinel_access_logs` | Every badge swipe — immutable, no update/delete |
| `sentinel_ai_threat_logs` | Every AI detection with bounding box, confidence, watchlist match — immutable |
| `sentinel_anomaly_detections` | Baseline deviations with severity, expected vs actual, status |
| `sentinel_incidents` | War-room records with evidence chain, timeline, cross-module links |
| `sentinel_recordings` | NVR clip metadata with storage URI, motion windows, legal-hold flag |
| `sentinel_visitors` | Pre-registration, NDA signatures, badge codes, check-in/out times |
| `sentinel_zones` | Security zones (campus → building → room hierarchy) |
| `sentinel_environmental_alerts` | Threshold violations from environmental sensors |
| `sentinel_central_station_configs` | UL monitoring account credentials and dispatch routing |
| `sentinel_keypad_codes` | Per-partition disarm codes (encrypted, never returned in API responses) |
9. Real-Time NOC — WebSocket Push
The NOC command center subscribes to four WebSocket channels: events:critical, devices, access, alarms. The gateway is a Redis-event-bus → WebSocket proxy — every event your system emits is mirrored to every authenticated subscriber in under a second.
Browser clients see device status indicators flip green / red live, access-denied toasts appear within ~500ms of the badge swipe, alarm-panel state transitions update the floor map immediately, and the live event feed scrolls in real time. Polling-based dashboards (5–30s refresh) miss the cluster of events that defines an incident — push delivery is the difference between catching a tailgate and reading about it tomorrow.
Key Architecture Decisions
Audit immutability
Access logs + AI threat logs are write-once — SOC2 / HIPAA / GDPR evidence chain integrity
Retention timing
6-hour cron, off-peak by default — Doesn't lock the NVR table during a recording burst
Legal hold
Per-recording flag — Investigation shield — retention can't accidentally delete
False-alarm cut
Two-zone verification + camera confirmation — Catches >70% of nuisance alarms before central-station
Adapter pattern
Honest no-op + runtime slot — No silent fake-success bugs; drop-in vendor support
Real-time NOC
Redis event bus → WebSocket push — Sub-second latency vs 5–30s polling
Storage
Bring your own bucket (S3/R2/MinIO/local) — Customer data sovereignty; no multi-tenant vault unless asked
Edge AI
Bridge GPU inference optional — HIPAA/GDPR-sensitive sites keep frames on-premise
Hardware support
Bridge serial-USB for legacy panels — Works with existing DSC/Honeywell/Bosch — no rip-and-replace
Encryption
PIN codes + monitoring credentials sealed — Sensitive fields never serialized in API responses