00
Simulation Console Select a scenario · configure parameters · launch · watch the pipeline
18 fps baseline — typical memory-care resident patterns throughout the day.
● SELECTED
Bathroom fall at 03:00 — AmbientPosture "On Floor", prolonged floor occupancy.
High entry + living room activity 01:00–04:00. Agitation or elopement-risk pattern.
Near-zero activity all zones all day. Early withdrawal or illness — triggers alert.
Extreme living room + entry spike 16:00–19:00. Classic late-day agitation pattern.
Structured check-ins at 10:00, 14:00, 18:00 — entry + living room engagement spikes.
Rooms
All 12 301–306 307–312 Single
Run Simulation Generator
Python / Lambda
idle
S3 raw/
Parquet frames
idle
Golden λ
UNLOAD combine
idle
ellamemory
Dashboard live
idle
01
Pilot Roster 12 rooms · FAC-MOCAREV-001 · Mount Olivet Careview Home
02
Activity Preview Normal Day scenario · 24-hour behavioral model
Compare with — none — Fall Event Night Wandering Isolation Day Sundowning Care Visit Day
Waking Returned Sundowning Sundowning Sundowning Sundowning Evening Evening LIVING ROOM Night trip Night trip Night trip Hygiene Hygiene Visit Visit Pre-dinner Eve hygiene Pre-bed BATHROOM Care check-in Departure ↗ Return ↙ Care check-in Care check-in Lunch ↗ ↙ Sundowning Sundowning Sundowning Sundowning Care check-in Care check-in ENTRY 12am 3am 6am 9am 12pm 3pm 6pm 9pm
Living Room
Bathroom
Entry
opacity = activity intensity · each column = 1 hour Night 22:00–06:00
Asleep, low activity 3× overnight bathroom trips (01h, 03:30h, 05h) Entry near-zero; no staff visits Day 06:00–15:00
Morning care: hygiene + standing Absent at dining 07:45–08:15, 11:45–12:30 Staff check-ins every ~2h on entry zone Sundowning 15:00–19:00
Living room activity spikes 25–40 counts Entry zone: repeated door-checking bursts Bathroom mostly empty during agitation 03
Device Configuration 3 zones · 1 device per zone · IWR6843AOP mmWave radar
Device ID DEV-MOH-301-A
Mount wall_mount_6m
Zone key living_room
FPS 1
Suffix A
Zone color 0,113,227
Device ID DEV-MOH-301-B
Mount roof_mount
Zone key bathroom
FPS 1
Suffix B
Zone color 180,83,9
Device ID DEV-MOH-301-C
Mount wall_mount_corner
Zone key entry
FPS 1
Suffix C
Zone color 91,33,182
04
How to Run scripts/generate_sim_frames.py · ambientcloud repo · Python 3.12+
STEP 01 Authenticate to AWS
eval "$(./scripts/resolve_env.sh dev)"
export AWS_PROFILE=pilot AWS_DEFAULT_REGION=us-east-1
# Verify access
aws sts get-caller-identity
STEP 02 Dry-run (validates schema, prints frame counts, skips S3 upload)
python3 scripts/generate_sim_frames.py --fps 18 --dry-run
# Output: 36 devices × 1,555,200 frames × 160 bytes ≈ 8.5 GB raw
# Parquet+ZSTD: ~197 MB for full pilot · day
STEP 03 Generate full 12-room pilot at 18 fps
python3 scripts/generate_sim_frames.py --fps 18
# Writes to s3://ambient-dev-parquet-<acct>/raw/date={today}/...
# One file per device: raw/date=.../facility=.../subject=.../device=.../sim_frames.parquet
STEP 04 Generate with a clinical scenario
python3 scripts/generate_sim_frames.py --fps 18 --scenario fall
# Available: normal | fall | wandering | isolation | sundowning | care_visit
# Modifies AmbientPosture, AmbientActivityCounts per scenario model
STEP 05 Trigger golden combine (merges 3 zone files per room)
aws lambda invoke \
--function-name ambient-dev-golden-combine \
--payload '{"date":"2026-05-19"}' \
--cli-binary-format raw-in-base64-out \
/tmp/golden-out.json
cat /tmp/golden-out.json
# {"date":"2026-05-19","combined":12,"skipped":0}
STEP 06 Verify golden files + Athena smoke query
aws s3 ls s3://ambient-dev-parquet-<acct>/golden/date=2026-05-19/ --recursive
aws athena start-query-execution \
--query-string "SELECT COUNT(*) FROM ambient_dev_raw.golden_frames WHERE date='2026-05-19' AND facility='FAC-MOCAREV-001' AND subject='MOCAREV-0001'" \
--work-group ambient-dev-analytics \
--query-execution-context Database=ambient_dev_raw
05
Golden Parquet AWS golden-combine Lambda · merges 3 zone files → 1 room file · powers ellamemory.com
Per-device (raw/)
DEV-MOH-301-A Living Room
DEV-MOH-301-B Bathroom
DEV-MOH-301-C Entry
14-column Schema V2 · no zone column · device partition in S3 path only
Golden (golden/)
golden_frames
14 columns + zone string partition: date / facility / subject UNION ALL of A + B + C
v_ambient_activity_index
SUM(ActivityCounts) per minute
v_zone_activity
Per-zone rows, filterable
Golden S3 Path
s3://ambient-dev-parquet-data/golden/date= 2026-05-24/facility= FAC-MOCAREV-001/subject= MOCAREV-0001/ *.parquetAthena UNLOAD writes multiple shards per subject. Partition projection on date/facility/subject — no device partition.
06
Athena Query Playground Pre-built queries · live execution when AWS credentials configured
Date
Activity Index — full day Zone Activity — per-zone breakdown Frame counts — all 12 subjects Posture scan — fall detection
SUM of AmbientActivityCounts per minute for one resident
SELECT minute, AmbientActivityIndex, AmbientOccupancy, AmbientPosture
FROM ambient_dev_raw.v_ambient_activity_index
WHERE date='2026-05-24'
AND facility='FAC-MOCAREV-001'
AND subject='MOCAREV-0001'
ORDER BY minute;
Configure AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY in Vercel env settings to run queries live.
07
Cost Model 12 rooms · 36 devices · us-east-1 pricing · daily run cadence
Service Formula Per run Per month (daily runs) S3 PUT requests 36 files × $0.000005 <$0.001 $0.005 S3 Storage (raw+golden) 0.06 GB × 2 × $0.023 — $0.081 Lambda golden-combine 600s × 256 MB × $0.0000167/GB-s $0.003 $0.075 Athena scan 0.050 GB × $5/TB <$0.001 $0.007 TOTAL $0.003 $0.169/mo
08
Data Volume At 1 fps sustained · us-east-1 pricing
Metric Per device Per room (3 devices) Full pilot (36 devices) Frames / day 86K 259K 3.11M Raw JSON / day 13 MB 40 MB 0.5 GB Gzip NDJSON / day 2 MB 6 MB 0.1 GB Parquet+ZSTD / day 2 MB 5 MB 0.1 GB Parquet / month 50 MB 0.1 GB 1.8 GB
09
CLI Reference scripts/generate_sim_frames.py · ambientcloud repo
zsh Copy
# Prerequisites
eval "$(./scripts/resolve_env.sh dev)"
export AWS_PROFILE=pilot AWS_DEFAULT_REGION=us-east-1
# Dry-run first
python3 scripts/generate_sim_frames.py --fps 18 --dry-run
# Full 12-room pilot at 18 fps
python3 scripts/generate_sim_frames.py --fps 18
# Specific rooms, custom date, scenario
python3 scripts/generate_sim_frames.py --rooms 301 302 303 --date 2026-05-19 --scenario fall
# Registry entries only (re-sync after DynamoDB changes)
python3 scripts/generate_sim_frames.py --registry-only
S3 Partition Path
s3://ambient-dev-parquet-data/raw/date= 2026-05-24/facility= FAC-MOCAREV-001/subject= MOCAREV-0001/device= DEV-MOH-301-A/sim_frames.parquetPartition columns (date / facility / subject / device) are path components only — not stored in the Parquet file body. Athena reads them via partition projection.
10
Frame Schema V2 15 data columns + 4 partition columns · ZSTD compression
Field Type Description captured_at timestamp(us, UTC) UTC frame timestamp, microsecond precision device_id string DEV-MOH-{room}-{A|B|C} frame_number int64 Monotonic counter from device boot point_x list<float32> X coordinates of radar point cloud point_y list<float32> Y coordinates (depth from sensor) point_z list<float32> Z coordinates (height) point_velocity list<float32> Radial velocity per point (m/s) point_snr list<float32> Signal-to-noise ratio per point (dB) track_ids list<int32> Tracker-assigned person IDs track_max_z list<float32> Max height per tracked person track_min_z list<float32> Min height per tracked person AmbientActivityCounts int32 Total radar points in this frame AmbientOccupancy int32 Persons tracked; 0=empty, 2+=visitor AmbientPosture string (nullable) Standing · Seated · On Floor · null Partition columns — path only, not in file body date string e.g. 2026-05-19 facility string e.g. FAC-MOCAREV-001 subject string e.g. MOCAREV-0001 device string e.g. DEV-MOH-301-A
Run History ▼