Open Autonomous Intelligence Initiative

Advocates for Open, ethical AI Models

EdgePERSensor

Purpose

EdgePERSensor defines the minimal OAII-conformant Sensor subclass required for edge-primary Personal Event Recognition (PER) for aging in place.

EdgePERSensor is designed to:

  • bind a concrete sensing capability to an EdgePERDevice
  • produce PERSignal instances suitable for Subject–Object and PrimaryUser interpretation
  • support conservative operation under uncertain conditions
  • expose policy-aware capture and summarization behaviors

EdgePERSensor is intentionally minimal and does not prescribe sensor technologies (PIR, mmWave, contact reed switch, camera, microphone, etc.).


Scope and Non-Goals

In Scope

  • Sensor identity and binding to an EdgePERDevice
  • Sensor type and observed domain
  • Capture and summarization method contracts
  • Calibration and health reporting hooks
  • Minimal notification contract for observation and degradation

Out of Scope

  • Vendor driver interfaces
  • Full signal schemas for all modalities (handled by PERSignal spec)
  • Cloud-based inference
  • Medical/diagnostic inference

Role in the Open SGI MVM Pipeline

EdgePERSensor performs the first two stages of the single pipeline:

  1. Capture: Acquire raw readings and package them as a PERSignal (or a modality-specific subtype).
  2. Summarize: Produce a reduced representation suitable for local event recognition and privacy-preserving logging.

The sensor itself does not assert user identity or beneficial/detrimental evaluation.


Required Attributes

EdgePERSensor extends the OAII Sensor base attributes with MVM constraints.

Identity and Binding

  • sensor_id (stable unique identifier)
  • world_ref (the PER Home World)
  • device_ref (EdgePERDevice.device_id)
  • sensor_type (enumerated; at minimum: motion or contact)

Observed Domain

  • observed_domain (domain descriptor)
  • value_domain (what values can be emitted)

Governance

  • privacy_class (default LOCAL)
  • access_class (default READ_WRITE)
  • capture_policy_ref (Policy ref; optional override)
  • redaction_policy_ref (Policy ref; optional override)

Runtime and Quality

  • sensor_state (INIT, READY, ACTIVE, DEGRADED, OFFLINE)
  • health_state (OK, WARN, ERROR)
  • calibration_state (CALIBRATED, NEEDS_CALIBRATION)
  • last_capture_time (EpochMillis)

Notifications

EdgePERSensor emits sensor-level notifications that MAY be consumed by Agents.

All deliveries MUST be policy-mediated by the hosting EdgePERDevice and/or active Policies.

  • sensor.observation (new capture)
  • sensor.state_changed
  • sensor.health_changed
  • sensor.calibration_changed

Methods

All methods use ParameterSet inputs and ResultSet outputs.

  • RegisterSensor(params) -> result
  • BindToDevice(params) -> result
  • ConfigureSensor(params) -> result
  • CaptureSignal(params) -> result (returns signal_id)
  • SummarizeSignal(params) -> result (returns a summary payload)
  • GetSensorStatus(params) -> result
  • Calibrate(params) -> result

ASN.1 Specification

Notes:

  • This module is designed to be code-generatable.
  • ParameterSet/ResultSet are repeated for MVM self-containment; implementations may import shared modules.
  • Signal references are represented as UUIDs; the PERSignal object is defined in the next spec.
OpenSGI-PER-EdgeSensor-MVM DEFINITIONS AUTOMATIC TAGS ::= BEGIN

-- =======================================
-- Basic Scalar Types
-- =======================================

UUID ::= OCTET STRING (SIZE(16))
IA5Text ::= IA5String
EpochMillis ::= INTEGER (0..MAX)
VersionString ::= IA5String (SIZE(1..64))

-- =======================================
-- Common Types (MVM local definitions)
-- =======================================

PrivacyClass ::= ENUMERATED {
  public(0),
  local(1),
  sensitive(2),
  restricted(3)
}

AccessClass ::= ENUMERATED {
  readOnly(0),
  readWrite(1),
  writeOnce(2)
}

StatusCode ::= ENUMERATED {
  success(0),
  partial(1),
  fail(2)
}

ResultSet ::= SEQUENCE {
  status          StatusCode,
  resultVersion   VersionString,
  errorCode       IA5Text OPTIONAL,
  errorDetail     IA5Text OPTIONAL,
  result          OCTET STRING OPTIONAL
}

ParameterSet ::= SEQUENCE {
  paramsVersion   VersionString,
  params          OCTET STRING
}

WorldRef ::= SEQUENCE {
  worldId     UUID,
  worldRole   IA5Text OPTIONAL
}

PolicyRef ::= SEQUENCE {
  policyId    UUID,
  policyType  IA5Text OPTIONAL
}

-- =======================================
-- Domains
-- =======================================

DomainType ::= ENUMERATED {
  discreteSet(0),
  numericRange(1),
  vector(2),
  media(3),
  other(255)
}

DiscreteValue ::= IA5Text

DiscreteSet ::= SEQUENCE {
  values SEQUENCE (SIZE(1..MAX)) OF DiscreteValue
}

NumericRange ::= SEQUENCE {
  minValue INTEGER,
  maxValue INTEGER
}

ObservedDomain ::= SEQUENCE {
  domainName   IA5Text,
  domainType   DomainType,
  domainSpec   OCTET STRING OPTIONAL
}

ValueDomain ::= SEQUENCE {
  domainType   DomainType,
  domainSpec   OCTET STRING
}

-- =======================================
-- Sensor Types and State
-- =======================================

SensorType ::= ENUMERATED {
  motion(0),
  contact(1),
  deviceHealth(2),
  audio(3),
  video(4),
  other(255)
}

SensorState ::= ENUMERATED {
  init(0),
  ready(1),
  active(2),
  degraded(3),
  offline(4)
}

HealthState ::= ENUMERATED {
  ok(0),
  warn(1),
  error(2)
}

CalibrationState ::= ENUMERATED {
  calibrated(0),
  needsCalibration(1)
}

-- =======================================           
-- EdgePERSensor Core Object
-- =======================================

EdgePERSensor ::= SEQUENCE {
  sensorId           UUID,
  worldRef           WorldRef,
  deviceId           UUID,

  sensorType         SensorType,
  observedDomain     ObservedDomain,
  valueDomain        ValueDomain,

  privacyClass       PrivacyClass,
  accessClass        AccessClass,

  capturePolicyRef   PolicyRef OPTIONAL,
  redactionPolicyRef PolicyRef OPTIONAL,

  sensorState        SensorState,
  healthState        HealthState,
  calibrationState   CalibrationState,

  lastCaptureTime    EpochMillis OPTIONAL
}

-- =======================================
-- Sensor Notifications
-- =======================================

SensorNotificationType ::= ENUMERATED {
  sensorObservation(0),
  sensorStateChanged(1),
  sensorHealthChanged(2),
  sensorCalibrationChanged(3)
}

SensorNotification ::= SEQUENCE {
  notificationId     UUID,
  notificationType   SensorNotificationType,
  sensorId           UUID,
  deviceId           UUID,
  worldId            UUID,
  timestamp          EpochMillis,

  governingPolicy    PolicyRef OPTIONAL,

  -- Opaque payload for extensibility; implementations may define a schema
  payload            OCTET STRING OPTIONAL
}

-- =======================================
-- Method Contracts (Operation Types)
-- =======================================

-- 1) RegisterSensor
RegisterSensorRequest ::= SEQUENCE {
  sensorDescriptor EdgePERSensor,
  params           ParameterSet OPTIONAL
}

RegisterSensorResponse ::= SEQUENCE {
  result       ResultSet,
  sensorId     UUID OPTIONAL
}

-- 2) BindToDevice
BindToDeviceRequest ::= SEQUENCE {
  sensorId     UUID,
  deviceId     UUID,
  params       ParameterSet OPTIONAL
}

BindToDeviceResponse ::= SEQUENCE {
  result       ResultSet
}

-- 3) ConfigureSensor
ConfigureSensorRequest ::= SEQUENCE {
  sensorId     UUID,
  params       ParameterSet
}

ConfigureSensorResponse ::= SEQUENCE {
  result       ResultSet
}

-- 4) CaptureSignal
CaptureSignalRequest ::= SEQUENCE {
  sensorId     UUID,

  -- capture parameters: windowing, debouncing, modality options
  params       ParameterSet OPTIONAL
}

CaptureSignalResponse ::= SEQUENCE {
  result       ResultSet,

  -- reference to produced signal object (defined in PERSignal spec)
  signalId     UUID OPTIONAL,

  -- optional quick metadata without revealing full payload
  captureTime  EpochMillis OPTIONAL
}

-- 5) SummarizeSignal
SummarizeSignalRequest ::= SEQUENCE {
  sensorId     UUID,
  signalId     UUID,

  -- summarization parameters: redaction mode, aggregation window
  params       ParameterSet OPTIONAL
}

SummarizeSignalResponse ::= SEQUENCE {
  result       ResultSet,

  -- summary payload (opaque) suitable for local event recognition and logging
  summary      OCTET STRING OPTIONAL
}

-- 6) GetSensorStatus
GetSensorStatusRequest ::= SEQUENCE {
  sensorId     UUID,
  params       ParameterSet OPTIONAL
}

GetSensorStatusResponse ::= SEQUENCE {
  result       ResultSet,
  sensorStatus EdgePERSensor OPTIONAL
}

-- 7) Calibrate
CalibrateRequest ::= SEQUENCE {
  sensorId     UUID,

  -- calibration parameters: baseline capture duration, thresholds
  params       ParameterSet OPTIONAL
}

CalibrateResponse ::= SEQUENCE {
  result       ResultSet,
  calibrationState CalibrationState OPTIONAL
}

-- =======================================
-- Operation Union (Optional Convenience)
-- =======================================

EdgePERSensorOperation ::= CHOICE {
  registerSensor     RegisterSensorRequest,
  bindToDevice       BindToDeviceRequest,
  configureSensor    ConfigureSensorRequest,
  captureSignal      CaptureSignalRequest,
  summarizeSignal    SummarizeSignalRequest,
  getSensorStatus    GetSensorStatusRequest,
  calibrate          CalibrateRequest
}

EdgePERSensorOperationResult ::= CHOICE {
  registerSensorResult   RegisterSensorResponse,
  bindToDeviceResult     BindToDeviceResponse,
  configureSensorResult  ConfigureSensorResponse,
  captureSignalResult    CaptureSignalResponse,
  summarizeSignalResult  SummarizeSignalResponse,
  getSensorStatusResult  GetSensorStatusResponse,
  calibrateResult        CalibrateResponse
}

END


ParameterSet Payload Conventions

For compactness, ParameterSet.params and ResultSet.result are opaque octet strings.

For the MVM, implementations SHOULD adopt a stable serialization (CBOR or JSON). Recommended keys follow.

ConfigureSensorRequest.params

  • zoneId (text) — logical zone label (e.g., ENTRY, HALLWAY)
  • sensitivity (integer or float)
  • debounceMs (integer)
  • minEventGapMs (integer)
  • enableSummaries (boolean)

CaptureSignalRequest.params

  • captureWindowMs (integer)
  • maxPayloadBytes (integer)
  • redactionMode (text)

SummarizeSignalRequest.params

  • summaryType (text) — e.g., COUNT, BOOLEAN, FEATURES
  • aggregationWindowMs (integer)
  • redactionMode (text)

CalibrateRequest.params

  • baselineWindowMs (integer)
  • expectedNoiseLevel (integer/float)
  • autoThreshold (boolean)

Implementation Notes

  • The MVM minimum is one sensor of type motion or contact.
  • A deviceHealth sensor MAY be virtual.
  • For privacy, sensors SHOULD prefer summarized outputs for logging and event recognition, retaining raw payloads only as permitted by retention policy.
  • The sensor never claims user identity; PrimaryUser interpretation is performed later by Events, Knowledge, Policies, and Agents.

Next Specification

Spec 3: PERSignal (Signal Subclass)

  • defines the minimal signal object produced by EdgePERSensor
  • standardizes temporal extent, value domains, and confidence
  • supports modality-specific payload patterns while preserving edge privacy

Leave a comment