Open Autonomous Intelligence Initiative

Advocates for Open, ethical AI Models

EdgePERDevice

Status

Draft v0.1 (Open SGI MVM)

Purpose

EdgePERDevice defines the minimal OAII-conformant Device subclass required to support edge-primary Personal Event Recognition (PER) for aging in place.

EdgePERDevice is intentionally conservative:

  • it performs local acquisition and coordination (not cloud-dependent)
  • it exposes policy-mediated notification and logging hooks
  • it supports world-specific interpretation through hosted mechanisms, not by embedding world semantics into raw signals

This specification is written to be implementable by independent teams while remaining non-prescriptive about vendors, transports, and storage.


Scope and Non-Goals

In Scope

  • Device identity, provenance, and configuration
  • Hosted sensors and sensor inventory
  • Local runtime state, health, and synchronization
  • Minimal mechanisms required for MVM pipeline integration
  • Policy hooks for privacy, disclosure, retention, and export
  • Method contracts for: register, configure, start/stop acquisition, health, and event-pipeline handoff

Out of Scope

  • UI/UX requirements
  • Cloud services
  • Medical/diagnostic claims
  • Vendor-specific device drivers
  • Mandatory geometric/level computations (optional Open SGI indexing may be layered later)

Role in the Open SGI MVM Pipeline

EdgePERDevice supplies:

  • trusted local acquisition from one or more sensors
  • a stable base for time and identity alignment
  • a host for minimal pipelines (capture → buffer → summarize → emit)

EdgePERDevice supports these use cases (from the MVM use-case post):

  • Primary User Arrival
  • Unexpected Entry (as uncertainty, not identity assertion)
  • Routine Movement Pattern
  • Prolonged Inactivity (contextual)
  • Device or Sensor Degradation
  • Routine Reintegration After Change (via data retention + policy + logging)
  • Quiet Confirmation for Caregivers (via interface delivery, policy-mediated)

Normative Behavior Summary

EdgePERDevice MUST:

  1. Provide a globally unique device_id and stable world_refs
  2. Maintain a local device_state and health_state
  3. Provide a sensor inventory and sensor binding references
  4. Enforce privacy/access constraints on disclosure and export operations
  5. Expose method contracts sufficient to:
    • register and provision the device into a World
    • configure acquisition and retention
    • start/stop capture
    • report health
    • emit device notifications (policy-mediated)

EdgePERDevice MUST NOT:

  • assert medical conclusions
  • bypass policies for notification/export
  • embed user identity claims into raw signals

Required Attributes

EdgePERDevice extends the OAII Device base attributes with MVM-required constraints.

Identity and Provenance

  • device_id (stable unique identifier)
  • device_type = edge-per-device
  • manufacturer, model, serial_number (if available)
  • firmware_version, software_version
  • provisioning_time

World Scope

  • world_refs (at minimum includes the PER Home World)
  • device_roles (e.g., ACQUISITION, LOCAL_INFERENCE_HOST, POLICY_ENFORCER)

Inventory and Bindings

  • hosted_sensors (list of Sensor references)
  • supported_signal_types (enumerated)
  • supported_event_types (enumerated)

Governance

  • privacy_class (default LOCAL)
  • access_class (default READ_WRITE)
  • retention_policy_ref (Policy reference)
  • export_policy_ref (Policy reference)

Runtime and Health

  • device_state (INIT, READY, RUNNING, DEGRADED, MAINTENANCE, OFFLINE)
  • health_state (OK, WARN, ERROR)
  • last_heartbeat_time
  • time_sync_state (SYNCED, UNSYNCED)
  • storage_state (OK, LOW, FULL)

Notifications

EdgePERDevice produces device-level notifications that MAY be consumed by Agents and Interfaces. All notification delivery MUST be policy-mediated.

  • device.heartbeat
  • device.state_changed
  • device.health_changed
  • device.storage_changed
  • device.sensor_inventory_changed

Methods

The following methods are required. Each method uses ParameterSet inputs and ResultSet outputs as OAII common types.

  • RegisterDevice(params) -> result
  • ProvisionWorld(params) -> result
  • ConfigureAcquisition(params) -> result
  • ConfigureRetention(params) -> result
  • StartCapture(params) -> result
  • StopCapture(params) -> result
  • GetDeviceStatus(params) -> result
  • GetSensorInventory(params) -> result
  • EmitNotification(params) -> result (policy-mediated)

ASN.1 Specification

Notes:

  • This ASN.1 module is designed to be code-generatable.
  • It is self-contained for the MVM; implementations may map to OAII “Common Types” modules when available.
  • Methods are represented as operation request/response types suitable for RPC, messaging, or local calls.
OpenSGI-PER-EdgeDevice-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 Governance 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
}

-- =======================================
-- World and Policy References
-- =======================================

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

WorldRefList ::= SEQUENCE (SIZE(1..MAX)) OF WorldRef

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

-- =======================================
-- Device Inventory References
-- =======================================

SensorRef ::= SEQUENCE {
  sensorId     UUID,
  sensorType   IA5Text,
  bindingLabel IA5Text OPTIONAL
}

SensorRefList ::= SEQUENCE (SIZE(0..MAX)) OF SensorRef

SignalTypeId ::= ENUMERATED {
  motion(0),
  contact(1),
  deviceHealth(2),
  audioSnippet(3),
  videoFrame(4),
  other(255)
}

EventTypeId ::= ENUMERATED {
  subjectObjectEvent(0),
  primaryUserEvent(1),
  policyOutcomeEvent(2),
  other(255)
}

-- =======================================
-- Device State and Health
-- =======================================

DeviceType ::= ENUMERATED {
  edgePerDevice(0)
}

DeviceRole ::= ENUMERATED {
  acquisition(0),
  localInferenceHost(1),
  policyEnforcer(2),
  logAnchor(3)
}

DeviceRoleSet ::= SEQUENCE (SIZE(1..MAX)) OF DeviceRole

DeviceState ::= ENUMERATED {
  init(0),
  ready(1),
  running(2),
  degraded(3),
  maintenance(4),
  offline(5)
}

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

TimeSyncState ::= ENUMERATED {
  synced(0),
  unsynced(1)
}

StorageState ::= ENUMERATED {
  storageOk(0),
  storageLow(1),
  storageFull(2)
}

-- =======================================
-- EdgePERDevice Core Object
-- =======================================

EdgePERDevice ::= SEQUENCE {
  deviceId             UUID,
  deviceType           DeviceType,

  manufacturer         IA5Text OPTIONAL,
  model                IA5Text OPTIONAL,
  serialNumber         IA5Text OPTIONAL,

  firmwareVersion      VersionString OPTIONAL,
  softwareVersion      VersionString OPTIONAL,
  provisioningTime     EpochMillis OPTIONAL,

  worldRefs            WorldRefList,
  deviceRoles          DeviceRoleSet,

  hostedSensors        SensorRefList,
  supportedSignalTypes SEQUENCE (SIZE(1..MAX)) OF SignalTypeId,
  supportedEventTypes  SEQUENCE (SIZE(1..MAX)) OF EventTypeId,

  privacyClass         PrivacyClass,
  accessClass          AccessClass,

  retentionPolicyRef   PolicyRef OPTIONAL,
  exportPolicyRef      PolicyRef OPTIONAL,

  deviceState          DeviceState,
  healthState          HealthState,
  lastHeartbeatTime    EpochMillis OPTIONAL,
  timeSyncState        TimeSyncState,
  storageState         StorageState
}

-- =======================================
-- Notifications (Device-level)
-- =======================================

DeviceNotificationType ::= ENUMERATED {
  deviceHeartbeat(0),
  deviceStateChanged(1),
  deviceHealthChanged(2),
  deviceStorageChanged(3),
  deviceSensorInventoryChanged(4)
}

DeviceNotification ::= SEQUENCE {
  notificationId     UUID,
  notificationType   DeviceNotificationType,
  deviceId           UUID,
  worldId            UUID,
  timestamp          EpochMillis,

  -- Policy mediation metadata (what policy governed delivery)
  governingPolicy    PolicyRef OPTIONAL,

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

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

-- 1) RegisterDevice
RegisterDeviceRequest ::= SEQUENCE {
  deviceDescriptor   EdgePERDevice,
  params             ParameterSet OPTIONAL
}

RegisterDeviceResponse ::= SEQUENCE {
  result             ResultSet,
  registeredDeviceId UUID OPTIONAL
}

-- 2) ProvisionWorld
ProvisionWorldRequest ::= SEQUENCE {
  deviceId           UUID,
  worldRef           WorldRef,
  params             ParameterSet OPTIONAL
}

ProvisionWorldResponse ::= SEQUENCE {
  result             ResultSet
}

-- 3) ConfigureAcquisition
ConfigureAcquisitionRequest ::= SEQUENCE {
  deviceId           UUID,
  params             ParameterSet
}

ConfigureAcquisitionResponse ::= SEQUENCE {
  result             ResultSet
}

-- 4) ConfigureRetention
ConfigureRetentionRequest ::= SEQUENCE {
  deviceId           UUID,
  retentionPolicyRef PolicyRef,
  params             ParameterSet OPTIONAL
}

ConfigureRetentionResponse ::= SEQUENCE {
  result             ResultSet
}

-- 5) StartCapture
StartCaptureRequest ::= SEQUENCE {
  deviceId           UUID,
  params             ParameterSet OPTIONAL
}

StartCaptureResponse ::= SEQUENCE {
  result             ResultSet
}

-- 6) StopCapture
StopCaptureRequest ::= SEQUENCE {
  deviceId           UUID,
  params             ParameterSet OPTIONAL
}

StopCaptureResponse ::= SEQUENCE {
  result             ResultSet
}

-- 7) GetDeviceStatus
GetDeviceStatusRequest ::= SEQUENCE {
  deviceId           UUID,
  params             ParameterSet OPTIONAL
}

GetDeviceStatusResponse ::= SEQUENCE {
  result             ResultSet,
  deviceStatus       EdgePERDevice OPTIONAL
}

-- 8) GetSensorInventory
GetSensorInventoryRequest ::= SEQUENCE {
  deviceId           UUID,
  params             ParameterSet OPTIONAL
}

GetSensorInventoryResponse ::= SEQUENCE {
  result             ResultSet,
  hostedSensors      SensorRefList OPTIONAL
}

-- 9) EmitNotification (policy-mediated)
EmitNotificationRequest ::= SEQUENCE {
  deviceId           UUID,
  notification       DeviceNotification,

  -- If present, overrides default policy reference for this emission attempt.
  requestedPolicy    PolicyRef OPTIONAL,

  params             ParameterSet OPTIONAL
}

EmitNotificationResponse ::= SEQUENCE {
  result             ResultSet,
  delivered          BOOLEAN OPTIONAL
}

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

EdgePERDeviceOperation ::= CHOICE {
  registerDevice          RegisterDeviceRequest,
  provisionWorld          ProvisionWorldRequest,
  configureAcquisition    ConfigureAcquisitionRequest,
  configureRetention      ConfigureRetentionRequest,
  startCapture            StartCaptureRequest,
  stopCapture             StopCaptureRequest,
  getDeviceStatus         GetDeviceStatusRequest,
  getSensorInventory      GetSensorInventoryRequest,
  emitNotification        EmitNotificationRequest
}

EdgePERDeviceOperationResult ::= CHOICE {
  registerDeviceResult       RegisterDeviceResponse,
  provisionWorldResult       ProvisionWorldResponse,
  configureAcquisitionResult ConfigureAcquisitionResponse,
  configureRetentionResult   ConfigureRetentionResponse,
  startCaptureResult         StartCaptureResponse,
  stopCaptureResult          StopCaptureResponse,
  getDeviceStatusResult      GetDeviceStatusResponse,
  getSensorInventoryResult   GetSensorInventoryResponse,
  emitNotificationResult     EmitNotificationResponse
}

END


ParameterSet Payload Conventions

To keep the ASN.1 module compact, ParameterSet.params and ResultSet.result are opaque octet strings.

For the MVM, implementations SHOULD use a stable serialization (e.g., CBOR or JSON) with the following conventional keys.

ConfigureAcquisitionRequest.params

  • samplingIntervalMs (INTEGER)
  • debounceIntervalMs (INTEGER)
  • zoneMapRef (UUID or text)
  • bufferSeconds (INTEGER)
  • maxSignalRateHz (INTEGER)

ConfigureRetentionRequest.params

  • rawRetentionSeconds (INTEGER)
  • summaryRetentionDays (INTEGER)
  • eventRetentionDays (INTEGER)
  • logRetentionDays (INTEGER)
  • redactionMode (ENUM text)

EmitNotificationRequest.params

  • targetAudience (text)
  • priority (text)
  • requireAck (BOOLEAN)

Implementation Notes

  • EdgePERDevice may host multiple sensors; the MVM minimum is one motion or contact sensor.
  • Device health and storage state changes SHOULD trigger notifications.
  • Device MUST refuse exports and notifications that violate active policy constraints.
  • World semantics belong in Event interpretation, Policies, and Agents—not in raw signal acquisition.

Next Specification

Spec 2: EdgePERSensor

  • defines minimal sensor abstraction and capture/summarize behavior
  • binds sensors to EdgePERDevice
  • produces PERSignal types suitable for Subject–Object and PrimaryUser interpretation

Leave a comment