
ESPectre - Motion detection system based on Wi-Fi spectre analysis (CSI), with Home Assistant integration.
Motion detection system based on Wi-Fi spectre analysis (CSI), with native Home Assistant integration via ESPHome.
[!TIP] New ML Detector: Neural network-based motion detection. No calibration required, runs on-device. This is an experimental feature, and feedback is welcome in the dedicated ML detector discussion. A snapshot build with the latest changes is also available (use
-mlassets for the machine learning based detector), or follow Setup guide for custom configuration.
ESP32-S3 DevKit with external antennas
Setup time: ~10-15 minutes
Difficulty: Easy (YAML configuration only)
Home Assistant dashboard with real-time motion detection, threshold control, and debug sensors
When someone moves in a room, they "disturb" the Wi-Fi waves traveling between the router and the sensor. It's like when you move your hand in front of a flashlight and see the shadow change.
The ESP32 device "listens" to these changes and understands if there's movement.
Want to understand the technical details? See ALGORITHMS.md for CSI explanation and signal processing documentation.
Optimal sensor placement is crucial for reliable movement detection.
Optimal range: 3-8 meters
Do:
Don't:
ESPectre uses a focused processing pipeline for motion detection:
┌─────────────┐
│ CSI Data │ Raw Wi-Fi Channel State Information
└──────┬──────┘
│
▼
┌─────────────┐
│ Gain Lock │ AGC/FFT stabilization (~3 seconds)
│ │ Locks hardware gain for stable measurements
└──────┬──────┘
│
▼
┌─────────────┐
│ Auto │ Automatic subcarrier selection (once at boot)
│ Calibration │ Selects optimal 12 subcarriers (NBVI)
└──────┬──────┘
│
▼
┌─────────────┐
│ Adaptive │ auto: P95 × 1.1 | min: P100
│ Threshold │ or fixed manual value
└──────┬──────┘
│
▼
┌─────────────┐
│ Hampel │ Turbulence outlier removal
│ Filter │ (enabled by default)
└──────┬──────┘
│
▼
┌─────────────┐
│ Low-pass │ Noise reduction (smoothing)
│ Filter │ (optional, disabled by default)
└──────┬──────┘
│
▼
┌─────────────┐
│ Detection │ MVS or ML score
│ Evaluation │ every evaluation_interval packets
└──────┬──────┘
│
▼
┌─────────────┐
│ Hit Filter │ motion_on_hits / motion_off_hits
│ │ edge-driven IDLE ↔ MOTION
└──────┬──────┘
│
▼
┌─────────────┐
│ Home │ Edge-driven motion binary +
│ Assistant │ periodic Movement Score / Threshold
└─────────────┘
┌─────────┐ ┌─────────┐ ┌─────────┐
│ ESP32 │ │ ESP32 │ │ ESP32 │
│ Room 1 │ │ Room 2 │ │ Room 3 │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└────────────┴────────────┘
│
│ ESPHome Native API
▼
┌────────────────────┐
│ Home Assistant │
│ (Auto-discovery) │
└────────────────────┘
Each sensor is automatically discovered by Home Assistant with:
ESPectre implements NBVI (Normalized Band Variance Index) for automatic subcarrier selection, achieving near-optimal performance (F1>96%) with zero manual configuration. The algorithm selects 12 non-consecutive subcarriers based on stability metrics and spectral diversity.
⚠️ IMPORTANT (MVS mode): Keep the room quiet and still for 10 seconds after device boot. The auto-calibration runs during this time and movement will affect detection accuracy. ML mode skips calibration.
For algorithm details, see ALGORITHMS.md.
Q: Do I need programming knowledge to use it?
A: No! ESPectre uses YAML configuration files. Just download the example, flash it, and configure WiFi via the ESPHome app or web interface.
Q: Does it work with my router?
A: Yes, if your router has 2.4GHz Wi-Fi (virtually all modern routers have it).
Q: How much does it cost in total?
A: Hardware: ~€10 for an ESP32 device (S3/C6 recommended, other variants also work). Software: All free and open source. You'll also need Home Assistant running somewhere (Raspberry Pi ~€35-50, or any existing PC/NAS).
Q: Do I need to modify anything on the router?
A: No! The router works normally. The sensor "listens" to Wi-Fi signals without modifying anything.
Q: Does it work through walls?
A: Yes, the 2.4GHz Wi-Fi signal penetrates drywall. Reinforced concrete walls reduce sensitivity but detection remains possible at reduced distances.
Q: How many sensors are needed for a house?
A: It depends on size. One sensor can monitor ~50 m². For larger homes, use multiple sensors (1 sensor every 50-70 m² for optimal coverage).
Q: Can it distinguish between people and pets?
A: The system uses a 2-state segmentation model (IDLE/MOTION) that identifies generic movement without distinguishing between people, pets, or other moving objects. For more sophisticated classification (people vs pets, activity recognition, gesture detection), trained AI/ML models would be required (see Future Evolution section).
Q: Does it work with mesh Wi-Fi networks?
A: Yes, it works normally. Make sure the ESP32 connects to the 2.4 GHz band.
Q: How accurate is the detection?
A: Detection accuracy is highly environment-dependent and requires proper tuning. Factors affecting performance include: room layout, wall materials, furniture placement, distance from router (optimal: 3-8m), and interference levels. In optimal conditions with proper tuning, the system provides reliable movement detection. Adjust the segmentation_threshold parameter to tune sensitivity for your specific environment.
Q: What's the power consumption?
A: ~500mW typical during continuous operation. The firmware includes support for power optimization, and deep sleep modes can be implemented for battery-powered deployments, though this would require custom modifications to the code.
A: Yes, open an or contact me via email.
The system collects anonymous data related to the physical characteristics of the Wi-Fi radio channel:
CSI data represents only the properties of the transmission medium and does not contain direct identifying information.
WARNING: Despite the intrinsic anonymity of CSI data, this system can be used for:
The user is solely responsible for using this system and must:
For algorithm details (MVS, NBVI calibration, Hampel filter), see ALGORITHMS.md.
For performance metrics (confusion matrix, F1-score, benchmarks), see PERFORMANCE.md.
This project follows a dual-platform approach to balance innovation speed with production stability:
Target: End users, smart home enthusiasts, Home Assistant users
Target: Researchers, developers, academic/industrial applications
Micro-ESPectre gives you the fundamentals for:
┌─────────────────────┐ Validated ┌──────────────────────┐
│ Micro-ESPectre │ ─────────────────► │ ESPectre │
│ (R&D Platform) │ algorithms │ (Production Platform)│
│ │ │ │
│ • Fast prototyping │ │ • ESPHome component │
│ • Algorithm testing │ │ • Home Assistant │
│ • Data analysis │ │ • End-user ready │
│ • MQTT flexibility │ │ • Native API │
└─────────────────────┘ └──────────────────────┘
Innovation cycle: New features and algorithms are first developed and validated in Micro-ESPectre (Python), then ported to ESPectre (C++) once proven effective.
While ESPectre v2.x focuses on motion detection (MVS + automatic subcarrier selection), the project is exploring machine learning capabilities for advanced applications:
The ML Detector is already available with detection_algorithm: ml in your YAML configuration. For algorithm details, see ALGORITHMS.md and PERFORMANCE.md for current metrics
The ML data collection and training infrastructure is documented in ML_DATA_COLLECTION.md.
See ROADMAP.md for detailed plans, timelines, and how to contribute.
| Blog | Discussion |
|---|---|
| Home Assistant | ESPectre - Wi-Fi Motion Detection for Home Assistant |
| Videos | Video |
|---|---|
| @GithubAwesome | ESPectre |
| Podcasts | Episode |
|---|---|
| Hackaday | Podcast Episode 355: Person Detectors, Walkie Talkies, Open Smartphones... |
ESPectre leverages the native Wi-Fi CSI capabilities of ESP32 chips. Thanks to Espressif for making CSI accessible in the ESP-IDF framework and for recognizing ESPectre as a community project in their esp-csi repository.
This project is released under the GNU General Public License v3.0 (GPLv3).
GPLv3 ensures that:
See LICENSE for the full license text.
Contributions are submitted under GPLv3 and must include a DCO
Signed-off-by trailer on each commit (git commit -s).
Francesco Pace
Email: [email protected]
LinkedIn: linkedin.com/in/francescopace
If you find ESPectre useful and want to support its development, you can buy me a coffee. It's completely optional. I work on this project because I'm passionate about it. Contributions help me buy new hardware to expand the list of tested and supported devices, and dedicate more time to new features.
| Distance | Signal | Multipath | Sensitivity | Noise | Recommendation |
|---|
| < 2m | Too strong | Minimal | Low | Low | ❌ Too close |
| 3-8m | Strong | Good | High | Low | ✅ Optimal |
| > 10-15m | Weak | Variable | Low | High | ❌ Too far |
| Capability | Status | Description |
|---|
| ML Detector | Experimental | Neural network (MLP 9→32→16→1) |
| Gesture Recognition | Planned | Detect hand gestures (swipe, push, circle) for smart home control |
| Human Activity Recognition | Planned | Identify activities (sitting, walking, falling) |
| People Counting | Planned | Estimate number of people in a room |
| 3D Localization | Research | Indoor positioning (30-50cm accuracy) via phase-coherent antenna array |
| Document | Description |
|---|
| Intro | (This file) Project overview, quick start, FAQ |
| Setup Guide | Installation and configuration with ESPHome |
| Tuning Guide | Parameter tuning for optimal detection |
| Performance | Benchmarks, confusion matrix, F1-score |
| The Game | Browser game, USB streaming API, interactive threshold tuning |
| Test Suite | PlatformIO Unity test documentation |
| Document | Description |
|---|
| Intro | R&D platform overview, CLI, MQTT, Web Monitor |
| Algorithms | Scientific documentation of MVS, NBVI calibration, Hampel filter |
| Analysis Tools | CSI analysis and optimization scripts |
| ML Data Collection | Building labeled datasets for machine learning |
| References | Academic papers and research resources |
| Document | Description |
|---|
| Roadmap | Project vision and ML plans |
| Contributing | How to contribute (code, data, docs) |
| Changelog | Version history and release notes |
| Security | Security policy and vulnerability reporting |
| Code of Conduct | Community guidelines |
| Articles | Title |
|---|