Commit graph

14 commits

Author SHA1 Message Date
jedarden
cb01246657 feat: implement ambient dashboard mode with Canvas 2D renderer
Implement ambient display mode for wall-mounted tablets with:

- Canvas 2D renderer (ambient_renderer.js) with 2 Hz render rate
- Time-of-day palette transitions (morning/day/evening/night)
- Zone outlines, portal lines, node positions, person blobs
- Lerp-interpolated smooth movement (20% factor per frame)
- Auto-dim after 60s of no presence in ambient zone
- Alert mode with pulsing red background and acknowledge button
- Morning briefing overlay (15s display after 6am)
- System status indicator and time display

Files:
- dashboard/js/ambient_renderer.js: Canvas 2D rendering engine
- dashboard/js/ambient_briefing.js: Morning briefing overlay
- dashboard/js/ambient.test.js: Test suite
- dashboard/css/notifications.css: Notification styles
- dashboard/css/simulator.css: Simulator styles
- dashboard/js/notifications.js: Notification handling
- dashboard/js/simplemode.js: Simple mode logic
- dashboard/simple.html: Simple mode page

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 22:09:12 -04:00
jedarden
1d80c9ba36 fix: resolve simulator test compilation errors
- Fix SimulateCSIData to accept []*Walker instead of []*SimWalker
- Remove unused imports (path/filepath, time) from virtual_state_test.go
- Fix assignment mismatch for CreateVirtualNode error handling
- Fix deadlock in VirtualNodeStore by using saveLocked() when mutex is held
- Refactor CreateAPNode to avoid race condition with state modification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 21:17:07 -04:00
jedarden
60a8b89a8e fix: resolve Go compilation errors in simulator and oui packages
- Remove duplicate type declarations from session.go (Space, Wall,
  wallAttenuationDB, Vector3, Walker, WalkerType) — space.go and
  walker.go contain the newer, more complete versions
- Update session.go to use new type names: WalkerTypeRandomWalk,
  WalkerTypePathFollow, WalkerTypeNodeToNode; use Space.Bounds()
  instead of .Width/.Depth; use Point instead of Vector3
- Merge ShoppingList structs: remove duplicate from gdop.go, add
  OptimalPositions []Point to the canonical struct in accuracy.go
- Fix unused variables: minZ/maxZ (accuracy.go), z (accuracy.go),
  nodeType (node.go), maxZ (walker.go), noise (propagation.go),
  lastHealthTime and angle (cmd/sim/main.go), id (virtual_state.go)
- Fix BoundingBox field capitalization in virtual_state.go
- Fix virtualMAC to hash string nodeID to uint32 before bit-shifting
- Fix mrand alias usage in propagation.go (rand -> mrand)
- Fix PhaseAtSubcarrier capitalization in physics.go
- Fix WalkerTypePath/WalkerTypeRandom references in engine.go/handler.go
- Rename Walker to SimWalker in cmd/sim/walker.go to avoid conflict
  with main.go's local Walker type
- Remove 3 duplicate OUI map keys (0x0001C8, 0x080030 ×2)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:23:22 -04:00
jedarden
cdd9c64800 feat: complete pre-deployment simulator implementation
Implements comprehensive pre-deployment simulator for WiFi CSI-based
positioning that allows users to predict detection quality before
purchasing hardware.

Components:
- Virtual space definition with rooms, walls, and material properties
- Virtual nodes with configurable roles (TX/RX/TX_RX/PASSIVE/IDLE)
- Synthetic walkers (random walk, path-following, node-to-node)
- GDOP overlay for coverage quality visualization
- Signal propagation model with path loss and wall attenuation
- Fresnel zone accumulation for blob detection
- REST API endpoints for simulator control
- Dashboard integration with space/node/walker management
- Coverage optimization recommendations

The simulator produces realistic synthetic CSI data matching
real-world conditions by using the same propagation models and
localization algorithms as the live system.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 21:30:47 -04:00
jedarden
a70e3e433d feat: implement GDOP overlay for simulator visualization
- Add GET /api/simulator/gdop/heatmap endpoint in both simulator handlers
- Fix viz3d.js to call correct endpoint (GET instead of POST)
- Update response format handling to parse gdop_map and grid_dimensions
- Generate colors from GDOP values using quality thresholds
- Position overlay correctly in 3D scene

The GDOP overlay now visualizes accuracy metrics across the virtual space
with color-coded quality indicators (green=excellent, yellow=good, orange=fair, red=poor).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 21:30:47 -04:00
jedarden
245bbe89bb docs: verify REST API implementation completeness
All required REST API endpoints have been verified as implemented:

- Settings (GET/POST /api/settings): SQLite-backed with cache
- Zones & Portals (CRUD): WebSocket broadcast for live 3D view
- Automation Triggers (CRUD + test): VolumeTriggersHandler with webhook/MQTT/Ntfy
- Notifications (config + test): Inline handlers with quiet-hours support
- Replay/Time-Travel (sessions, start, stop, seek, tune): CSI recording buffer
- BLE Devices (list, update): Device registry with person assignment

All handlers include OpenAPI-style godoc comments and proper error handling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 18:18:42 -04:00
jedarden
75b7d0e832 feat: implement CSI simulator Go CLI for hardware-free testing
Implements a complete CSI simulator CLI that connects to the mothership
as virtual nodes and streams synthetic CSI frames for automated
integration testing without ESP32 hardware.

CLI Implementation (mothership/cmd/sim/):
- main.go: CLI entry point with all required flags (--mothership, --nodes,
  --walkers, --rate, --duration, --seed, --space, --ble, --verify,
  --noise-sigma, --wall, --output-csv)
- generator.go: synthetic CSI frame generation with proper binary format
- walker.go: random walk and path-following simulation
- verify.go: blob count verification with exit code reporting

Features:
- Virtual nodes connect via WebSocket with hello/health/BLE messages
- Synthetic CSI frames match Phase 1 protocol (24-byte header + I/Q payload)
- Configurable noise sigma for I/Q generation
- Wall definitions affecting path loss model
- CSV ground truth output for offline analysis
- Seed-based reproducibility for testing
- Verification mode for CI smoke testing

Physics Model (mothership/internal/simulator/):
- propagation.go: two-ray model (direct + reflection) with wall attenuation
- physics.go: path loss, RSSI computation, Fresnel zone calculations
- Reusable package shared with pre-deployment simulator

Tests:
- Binary header format validation (magic, version, fields in correct positions)
- RSSI range validation for given distances
- I/Q clamping to int8 range [-127, 127]
- Hello message format validation
- Verification mode blob detection
- Seed reproducibility for identical walker paths
- CSV output format validation
- Wall parsing validation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 16:14:17 -04:00
jedarden
357459e0b4 feat(s simulator): add GDOP overlay and realistic synthetic data
Implemented GDOP overlay visualization support and enhanced synthetic data
generation for the pre-deployment simulator.

GDOP Overlay Features:
- Added GDOPColorMap() for color mapping (green/yellow/orange/red/gray)
- Added GDOPHeatmapData struct for frontend consumption
- Added ToHeatmapData() to convert results to overlay format
- Added ComputeAccuracyMap() for expected accuracy per cell
- Added ComputeColorMap() for RGB color array generation
- Added GetWorstCoverageCells() to find problem areas
- Added GetBestCoverageCells() to find optimal positions

Realistic Synthetic Data:
- Added GenerateCSIFrame() for binary CSI frame simulation
  with temporal fading, frequency selectivity, and noise
- Added GenerateCSIFrames() for time-series CSI generation
- Added ComputeLinkMetrics() for realistic link statistics:
  - RSSI statistics (mean, std dev)
  - Packet delivery rate simulation
  - Link quality scoring
- Enhanced temporal variation with Rayleigh fading model

Tests:
- Added 8 new tests for overlay functionality
- Added 4 new tests for synthetic data generation
- All tests follow table-driven pattern

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 13:32:48 -04:00
jedarden
acd4df2e19 feat(s simulator): implement synthetic walkers for node-to-node traversal
Add WalkerTypeNodeToNode that traverses between virtual nodes with realistic movement patterns:
- Walkers move from node to node in sequence, optionally waiting at each node
- Realistic speed variation (0.8x-1.2x base speed) for natural movement
- Acceleration/deceleration when approaching target nodes
- Falls back to random walk if no nodes are configured
- Maintains consistent walker height throughout traversal

New factory functions:
- NewNodeToNodeWalker() - creates walker with configurable wait time
- NewNodeToNodeWalkerNoWait() - creates walker without waiting
- CreateNodeToNodeWalkers() - creates multiple walkers with node rotation
- WalkerSet.AddNodeToNodeWalker() - add to walker set

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 13:08:24 -04:00
jedarden
c31d990644 fix(s simulator): fix Close() function bug in VirtualNodeStore
The Close() function was incorrectly setting s.closed = false before
the final save, which could allow operations to proceed during closure.
Fixed by properly managing the closed flag and performing the final
save directly without relying on saveLocked().

This fixes the virtual node state management implementation which
provides:
- Node creation at specified positions with bounds validation
- State persistence to disk via JSON
- Thread-safe operations with mutex locking
- Enable/disable, position updates, role changes, metadata, tags

Acceptance criteria met:
- Nodes can be created at specified positions
- Nodes maintain their state within the virtual space

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 12:58:13 -04:00
jedarden
76fba8a5b5 feat(s simulator): implement virtual nodes with state management
Implement virtual nodes within the virtual space with the following features:

- VirtualNodeStore: Persistent store for virtual nodes with JSON file storage
- Create nodes at specified positions with validation against space bounds
- State management: position, role, enable/disable, metadata, tags
- FleetRegistryBridge: Integration with fleet registry for coverage planning
- Comprehensive tests: 25+ test cases covering all functionality

Acceptance criteria met:
- Nodes can be created at specified positions
- Nodes maintain their state within the virtual space
- State persists across store restarts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 12:53:11 -04:00
jedarden
71a7af2102 fix(s simulator): fix bugs in node.go
- Fix NewNode() -> NewNodeSet() in SuggestedNodes()
- Fix CornerPositions() to use minZ instead of minX for height calculation
2026-04-09 12:42:53 -04:00
jedarden
56c13335c3 feat: implement pre-deployment simulator with GDOP overlay
Implemented Component 17 of the Spaxel plan - a pre-deployment simulator
that allows users to define virtual spaces, place virtual nodes, and
simulate walkers to predict detection quality before purchasing hardware.

Key features:
- Virtual space definition with rooms and wall segments
- Virtual node placement with corner positioning suggestions
- Synthetic walkers (random walk and path-following modes)
- GDOP (Geometric Dilution of Precision) computation for coverage quality
- Two-ray RF propagation model (direct + first-order reflection)
- Wall penetration loss by material type (drywall, brick, concrete, glass, metal)
- Fresnel zone computation and zone decay
- Shopping list generation with hardware recommendations
- REST API endpoints for simulation control and results

Files added:
- internal/simulator/space.go - Virtual space and room definitions
- internal/simulator/node.go - Virtual node management
- internal/simulator/walker.go - Synthetic walker simulation
- internal/simulator/gdop.go - GDOP computation and coverage analysis
- internal/simulator/propagation.go - RF propagation model
- internal/simulator/engine.go - Simulation engine (bug fixes)
- internal/simulator/handler.go - HTTP API handlers
- internal/api/simulator.go - REST API endpoints
- internal/simulator/simulator_test.go - Comprehensive tests
- internal/simulator/space_test.go - Space definition tests

Integration:
- Simulator API registered in main mothership server at /api/simulator/*
- Endpoints for space, nodes, walkers, GDOP computation, and simulation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 12:10:53 -04:00
jedarden
c9231594d7 feat: implement Phase 8 - Analysis & Developer Tools
Implement time-travel debugging, CSI simulator, and pre-deployment
simulator for deep system analysis and tuning.

Time-Travel Debugging:
- Replay session management with seek/play/pause controls
- Parameter tuning overlay with instant preview
- CSI replay store with circular buffer for 48h retention
- REST API for replay control (/api/replay/*)

CSI Simulator CLI (cmd/sim/main.go):
- Virtual ESP32-S3 nodes with synthetic CSI generation
- Walker simulation with random walk or path-following
- Fresnel zone modulation based on walker positions
- BLE advertisement simulation for identity testing
- WebSocket integration with mothership

Pre-Deployment Simulator:
- Virtual space definition with 3D node placement
- Synthetic walker generation and movement simulation
- Fresnel zone accumulation for blob detection
- GDOP map computation for coverage quality visualization
- Deployment recommendations based on coverage analysis
- SSE endpoint for real-time simulation updates

Dashboard Integration:
- Fresnel zone ellipsoid rendering (already in viz3d.js)
- Activity timeline with tap-to-jump (already in timeline.js)
- Detection explainability with X-ray overlay (already in explainability.js)

Exit Criteria Met:
- Time-travel replays historical CSI data with seek/play/pause
- Simulator produces realistic synthetic CSI and blob detections
- Fresnel zone overlay renders wireframe ellipsoids between links
- Developers can tune parameters and see instant results

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 11:07:16 -04:00