Multi-Device Dry-Run: 0002 Binding Record
Date: 2026-05-16
User: [email protected] (cmne10rir000h8mwi8gvxvwqs)
Purpose: Production dry-run for Account multi-device management testing
0002 Device Primary Data
| Field | Value | Source |
|---|---|---|
| aovis_device_id | aovis-n4k-000002 | ODM firmware naming spec v0.1 |
| serial_number | N4K-000002 | ODM firmware naming spec v0.1 |
| activation_code | WWHETGUX4AXN | ODM firmware naming spec v0.1 |
| model | NEXA Prime 4K | ODM firmware naming spec v0.1 |
ICCID Selection
ICCID: 8910300000050270478
Selected from 10 EIOTCLUB test ICCIDs provided by platform. Next sequential number after 0001 (8910300000050270479). Not previously present in local SimCard table, userId=null at bind time. Consumed same batch as 0001.
AWS Resources
| Resource | Name | Status | Created |
|---|---|---|---|
| IoT Thing | aovis-dev-aovis-n4k-000002 | ACTIVE | 2026-05-16 |
| IoT Certificate | Attached to Thing + policy AovisCameraThingPolicyV1 | ACTIVE | 2026-05-16 |
| KVS Stream | aovis-stream-aovis-n4k-000002 | ACTIVE, retention=720h | 2026-05-16 |
| WebRTC Channel | aovis-webrtc-aovis-n4k-000002 | ACTIVE | 2026-05-16 |
IAM Permission Fix
2026-05-16: Added kinesisvideo:DescribeSignalingChannel to managed policy aovis-backend-service-policy. New default version: v3. Existing statements otherwise unchanged from v2.
DB State After Binding
| Record | Key Value |
|---|---|
| Device.id | cmp7yt1qk0001qmgn9mcndpiy |
| Device.bindingStatus | active |
| Device.ownerUserId | cmne10rir000h8mwi8gvxvwqs |
| DeviceOwnership.role | OWNER |
| DeviceOwnership.boundAt | 2026-05-16 06:28:14 UTC |
| AuditLog action | device_activated (1 entry) |
| SimCard.userId | linked to guorui via activate flow |
Entitlement (trial only)
| Field | Value |
|---|---|
| sourceChannel | device_activation_trial |
| subscription status | TRIALING |
| externalSubscriptionId | device-trial:cmp7yt1qk0001qmgn9mcndpiy |
| entitlement type | cloud_playback |
| quota | 1 (24-hour rolling history) |
| status | ACTIVE |
| expiresAt | 2026-06-15 06:28:14 UTC |
Paid Standard Isolation
0001 paid Standard cloud subscription (cloud_playback quota=7, ai_summary, smart_search) remains strictly on 0001 Device.id cmp3hyo970000qm97c1foeybk. 0002 has no paid entitlements.
API Smoke Test Results
| Endpoint | Status | Notes |
|---|---|---|
| GET /api/devices/aovis-n4k-000002/webrtc | 200 | Returns WSS/HTTPS endpoints + 2 ICE servers |
| GET /api/devices/aovis-n4k-000002/shadow | 502 | No real device shadow (expected) |
| POST /api/devices/aovis-n4k-000002/clip | 400 | clip_too_long (no unauthorized/device_not_owned) |
Known Gaps
- IoT certificate private key: Generated during provisioning but not persisted locally. If a physical 0002 device needs to connect to AWS IoT, a new cert must be generated or the private key must be extracted from the provisioning session logs.
- UI confirmation: DeviceOwnership records verified in DB. UI render confirmed via server-side Prisma queries (
getDeviceBindings()). Full browser-based HTML verification was not done because NextAuth sessions are scoped to the aovis.app domain; localhost curl cannot create a valid auth session. - No real device: /shadow, /clip, /stream return expected error responses because no physical 0002 device is pushing data to KVS.