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:
- Provide a globally unique
device_idand stableworld_refs - Maintain a local
device_stateandhealth_state - Provide a sensor inventory and sensor binding references
- Enforce privacy/access constraints on disclosure and export operations
- 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-devicemanufacturer,model,serial_number(if available)firmware_version,software_versionprovisioning_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_timetime_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.heartbeatdevice.state_changeddevice.health_changeddevice.storage_changeddevice.sensor_inventory_changed
Methods
The following methods are required. Each method uses ParameterSet inputs and ResultSet outputs as OAII common types.
RegisterDevice(params) -> resultProvisionWorld(params) -> resultConfigureAcquisition(params) -> resultConfigureRetention(params) -> resultStartCapture(params) -> resultStopCapture(params) -> resultGetDeviceStatus(params) -> resultGetSensorInventory(params) -> resultEmitNotification(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