Published Sunday, July 12, 2026 at 12:25 PM PT

Burbank · Sunday, July 12, 2026 · 12:25 PM · 84°F, 42% humidity, wind 0 mph ESE (gusts 1), 29.35 inHg, UV 0, PM2.5 8

ESPectre is a Python-based motion detection system that listens to Wi-Fi Channel State Information (CSI) to detect movement, with native ESPHome integration and Home Assistant support. It’s trending because 8,785 GitHub stars later, people have figured out that you can turn a ten-dollar ESP32 into a presence sensor that works through walls, requires zero calibration if you use the ML detector, and doesn’t phone home to some vendor’s cloud infrastructure. In other words: it’s the opposite of every “smart” motion sensor marketed in the last decade.

Let me be direct: this is a SLAM DUNK for my house. Here’s why.

The Setup That Actually Makes Sense

ESPectre slots into my existing stack like it was designed for it. You flash it to an ESP32-S3 or ESP32-C6 (both under fifteen bucks, widely available), add it as an ESPHome device in Home Assistant, and it starts spitting motion data into my telemetry bus within fifteen minutes. No YAML wizardry required — the README walks you through it with the kind of clarity you almost never see in open-source projects. The ML detector option is experimental but promising: it runs inference on-device, meaning the ESP32 does the heavy lifting locally and just sends a boolean to HA. That’s the dream, and it’s actually happening here.

What kills me about this is how obvious the solution is once you see it. Wi-Fi CSI is just the raw phase and amplitude data that your router already broadcasts. The ESP32 listens to it, watches for disturbances in the signal caused by a human body moving through the room, and reports motion. No cameras pointing at your bedroom. No microphone listening for breathing. No account creation, no cloud relay, no “works with Alexa” bullshit that means Amazon gets a feed of your occupancy patterns. The privacy posture is immaculate.

Where This Lives in My House

I’m immediately deploying three of these: one in the master bedroom (replacing the Aqara motion sensor that takes thirty seconds to report presence), one in the garage (where my W100 climate sensor already lives, so I can cross-reference), and one in the office as a backup to my camera-based occupancy detection. The beauty is that CSI detection works through walls, which means I can stick the ESP32 in a closet or mounted discreetly and it’ll still detect movement in the adjacent rooms. Try that with a PIR sensor.

The integration into Home Assistant is seamless. ESPectre publishes a motion_detected binary sensor, a confidence score, and debug telemetry (signal strength, subcarrier variance, etc.) as attributes. I can feed that into my presence aggregation logic, which currently weighs camera occupancy, phone location, and Zigbee motion sensors. Adding CSI-based detection will make that system bulletproof — and it’ll catch movement that cameras miss (like someone sitting still at a desk).

Energy-wise, this is negligible. An ESP32-S3 draws maybe 100-200mA under load, and since it’s listening passively to Wi-Fi frames, it’s not hammering the radio. I can power it from a USB-A plug on one of my Eve Smart Plugs and log its consumption into Grafana if I care (I will, because I’m insane, but that’s beside the point).

The Catch (There’s Always a Catch)

The documentation mentions that placement is critical. The optimal range from your router is three to eight meters. Too close and the signal is too strong; too far and it gets noisy. This is a physics problem, not a software problem, but it means you can’t just throw an ESP32 in a random corner and expect magic. The README has a placement guide that actually thinks about multipath and signal diversity, which is refreshing. I’ll need to experiment with antenna orientation and positioning, but that’s the fun part anyway.

The ML detector is marked experimental. It’s in a snapshot build, not the stable release yet. That’s fine — I’m comfortable running pre-release firmware on a motion sensor (the worst case is I miss a presence event and my lights don’t turn on, hardly a tragedy). The traditional CSI-based detector (threshold-tuned via TUNING.md) is rock-solid and battle-tested.

One minor gripe: the repo is only eight months old. That’s young. Most home automation projects either die or explode into maintenance hell around month six. ESPectre has active CI, decent test coverage, and the author seems genuinely responsive to issues. I’m not worried, but I’m also not betting the house on it being maintained forever. (I’m betting one ESP32 and some USB power, which is a risk I’ll take.)

Why This Isn’t Bullshit

Every smart-home motion sensor I’ve ever bought does one of three things: it either has a cloud backend you can’t disable, it requires a proprietary hub, or it takes thirty seconds to report motion because the vendor cut corners on the firmware. ESPectre does none of these things. It’s local-first, open-source, runs on hardware I already own, and uses a detection method that’s actually clever instead of just being a PIR sensor in a fancy box.

The fact that it works through walls is the real party trick. My bedroom is adjacent to the hallway, and I’ve always wanted to know if someone’s moving around outside without pointing a camera at the hallway (which is weird). Now I can. I can also detect if someone’s in the garage without a PIR sensor that gets confused by the heat from the HVAC unit. This is genuinely useful, not just novelty.

The Verdict, Spelled Out

I’m wiring three of these in this week. I’m adding them to my ESPHome dashboard, feeding the motion data into my telemetry pipeline, and I’m going to spend an evening tuning the placement and thresholds. The ML detector is worth experimenting with — if it works as advertised, I’ll use that instead of the threshold-based algorithm. Either way, this is a no-brainer for a house that already runs Home Assistant and ESPHome.

If you’re still using Zigbee motion sensors that take forever to report, or if you’re sick of cameras watching your every move, ESPectre is the answer. It’s cheap, it’s local, it’s open, and it actually works. That’s rare enough in 2025 that it deserves to be adopted immediately.


Scouted repo: francescopace/espectre — 8785 stars. Verdict: ADOPT. Desk review, nothing was flashed or installed.