# WiFi CSI Motion Sensing - Electronics Projects Reference Date: 2026-07-14 Tags: [electronics, esp32, csi, motion-detection, home-assistant, esphome, reference] Related: [[local_network_improvements]] [[Grace Poppy Storybook Image Voice App]] ## Purpose Camera-free motion detection using WiFi Channel State Information (CSI). ESP32 listens to WiFi distortions caused by people moving. No camera, no PIR, total privacy. Good for ESP32 website/demo, home automation, kids safety, energy saving. ## Two Projects Evaluated ### 1. eSPECTRe (RECOMMENDED for production) - Repo: https://github.com/francescopace/espectre - Stars: ~8.8k, License: GPLv3, Updated: active daily, language: C++/Python - Hardware: ESP32, S3, C3, C6, C5 all supported. S3/C6 recommended ~€10 / $9-15. Needs 8MB flash + PSRAM for S3 - Stack: ESPHome component only — YAML flash. No extra server. - How: Generates 100 pps ping traffic to router, extracts 64 subcarrier amplitudes (HT20), gain lock 3s median AGC/FFT, auto-selects 12 best subcarriers via NBVI (Normalized Baseline Variability Index), computes spatial turbulence = std or CV, moving variance window 100, adaptive P95*1.1 threshold, Hampel outlier filter, hit filter 3 on/3 off -> binary motion - Two detectors: - MVS (default): variance heuristic, needs 10s quiet calibration at boot - ML (experimental): MLP 9→32→16→1 (865 params, 816 MACs), 150µs S3 / 1.9ms C6, no calibration needed, 0.8% FP on S3 in 60s tests - HA: Native ESPHome auto-discovery -> binary_sensor motion + movement score + adjustable threshold - Performance: 67% flash S3, 1.5% CPU @100pps MVS, 4.3% ML S3. Published PERFORMANCE.md with real confusion matrices, shows failures too. - Setup: 10-15 min - `esphome run espectre-c6.yaml` or Chrome web flash via ESPConnect, provisioning BLE/USB/Captive Portal - Placement: 3-8m from router optimal, 1-1.5m height, avoid metal obstacles - Limitations: Binary motion only (no person vs pet), ~50m² per sensor, detects any movement, through-wall works but reduced via concrete - Best for: Website feature "Private Motion Sensing", home security away mode, elderly no-movement alerts, auto lights, energy saving ### 2. RuView / WiFi-DensePose (research demo, heavy marketing) - Repo: https://github.com/ruvnet/RuView - Stars: 80.6k (likely inflated), License: MIT - Hardware: ESP32-S3 ($9) or C6 ($6-10 research) + Rust sensing server on Pi/laptop + optional Cognitum Seed $140 appliance - Stack: ESP-IDF C firmware + Rust server + Python torch + React dashboard + Docker + HA MQTT + Matter bridge - What ESP32 actually does: Tier0 raw CSI UDP 0xC5110001 @20Hz stable, Tier1 phase unwrap/Welford/top-K, Tier2 biquad breathing 0.1-0.5Hz 6-30 BPM, HR 0.8-2.0Hz 40-120 BPM, presence = variance threshold (false positives fans/microwave, needs 60s empty room calib), person count = top_k/2 heuristic not ML - Claims that are NOT on ESP32: 17-keypoint pose, SOTA 82.69% PCK, world model, 105 cogs, witness chain -> all server side, model loader currently broken (JSONL vs binary RVF mismatch), through-wall ~5m signal dependent - HA: 21 entities per node via MQTT auto-discovery + Matter bridge - Pros: Real CSI capture example, breathing DSP reference, MIT, Docker demo no HW, prebuilt bins - Cons: Hype >> code, 100+ ADRs, funnel to cognitum.one paid, heavy deps, unencrypted UDP - Use as: Inspiration only, not direct integration for product. Reference Espressif esp-csi official example instead for clean code. ## Comparison | | RuView | eSPECTRe | |---|---|---| | Focus | Pose + vitals + 105 cogs | One thing: motion | | Install | esptool + provision.py + cargo run + docker | esphome yaml / web flash 10 min | | Edge compute | Heuristic + server ML | On-device MVS/ML | | Credibility | Marketing heavy, hides caveats in small print | Publishes bad results too (C6 21% FP) | | License | MIT but commercial funnel | GPLv3 pure OSS | ## Recommendation for Reyna Family / Website - Feature eSPECTRe on ESP32 page, not RuView. - Tagline: "Turn any €10 ESP32 into a camera-free motion sensor — no cloud, total privacy" - Immediate project: Flash 1x S3 DevKitC-1 with espectre-s3.yaml -> HA -> automation ideas: lights, security, kid room night exit alert (links to Grace Poppy safety) - Future extension: Could combine with existing ESP32 fleet (esp32_screen .123 RLCD, kitchen voice .122, Faith+Grace-Poppy .107) - add CSI sensing side by side with book player? Note resource constraints: RLCD already heavy. - If want breathing HR: borrow RuView biquad filter idea, implement minimal in Arduino/ESPHome custom component, MQTT to backend, skip Rust server. ## Links & Assets - eSPECTRe SETUP.md: full yaml examples, tuning guide TUNING.md, ALGORITHMS.md scientific docs - eSPECTRe PERFORMANCE.md: per-chip Recall/Precision/F1, flash/RAM/CPU budgets - RuView firmware: firmware/esp32-csi-node/release_bins/ + ADR-018 binary format spec - Placement guide optimal: 3-8m, 1-1.5m height, 50-70m² per sensor ## TODO if building - [ ] Test flash S3/C6 devkit with eSPECTRe, verify HA discovery - [ ] Create minimal landing page section with image: Home Assistant dashboard screenshot + external antenna bundle photo - [ ] Document GPLv3 compliance if publishing firmware bins on reynafamily.com - [ ] Evaluate combining CSI motion with Tactility Book Player (320x240) as idle detection -> pause/play? - [ ] Try ML detector vs MVS in 220 Emerald house layout (concrete walls = reduced sensitivity)