I have four PIR motion sensors bolted to walls in my flat, a couple of mmWave presence sensors under the TV console, and a Frigate instance chewing through camera frames in the basement rack next to my HP EliteDesk. So when I saw a thread on the Home Assistant community forum claiming my router had been capable of sensing motion in my living room this whole time — no extra hardware, no camera, just Wi-Fi doing what Wi-Fi already does — I assumed it was overselling itself. It wasn’t, entirely. It also isn’t magic. Here’s what I found once I stopped skimming replies and actually read the project.
What ESPectre Actually Does
ESPectre, built by Francesco Pace and released under GPLv3, uses Wi-Fi Channel State Information (CSI) — the fine-grained data an ESP32 radio already sees about how a Wi-Fi signal is distorted between your router and the device — to notice when a body moves through that signal path. No microphone, no lens, no cloud service parsing a video stream. The processing happens entirely on the ESP32 itself.
The hardware bar is refreshingly low: a CSI-capable ESP32 (the S3, C3, C6, or the original ESP32 all qualify — a roughly €10 part) and a spot 3 to 8 meters from your existing router, no special access point required. The clever bit is something the author calls NBVI — Normalized Band Variance Index — which auto-selects the useful subcarriers from the CSI data so you don’t have to hand-tune anything for your specific room. There’s also an experimental ML-based detector in the works that skips the calibration step entirely. It flashes over ESPHome, so if you’re already comfortable editing YAML for other sensors in your setup, there’s genuinely nothing new to learn to get a device reporting a binary motion state into Home Assistant.

The Home Assistant Community’s Verdict So Far
The community forum thread has been quietly running since December and picked up a fresh wave of testers this month, which is where I found it. The tone is unusually consistent for a forum thread: people flash it, it works better than they expected, and they say so. One tester running an ESP32-S3-N16R8 through ESPHome summed it up bluntly after getting it running: “It works perfectly.” Even the founder of a competing commercial Wi-Fi-sensing product showed up to wish the project well, which tells you something about how small and collegial this corner of the ecosystem still is.
That’s the kind of signal I actually trust more than a polished launch post — a thread full of people with mismatched hardware, in real rooms, reporting back over weeks.
The Rough Edges Nobody’s Glossing Over
To the thread’s credit, the rough edges are right there in the open too, and they’re the kind of thing that would have bitten me if I’d rushed into it. ESP8266-based devices — including plenty of older Sonoff hardware people already have deployed — can’t run this at all; CSI extraction needs the ESP32 radio specifically. One user on an ESP32-C3 saw memory warnings (“Send error: -1 errno: 12”) that didn’t stop detection but weren’t reassuring either. Another reported that adding a Bluetooth proxy to the same ESP32 broke a previously working ESPectre setup entirely — a combination the author himself hadn’t tested. And after a power loss, the detection threshold can come back reporting “unknown” until you manually re-tune it.
The bigger conceptual limit, though, is that this measures motion, not presence. Sit still long enough and it reports the room as empty, same as a PIR would — it can’t yet tell “empty room” from “person sitting quietly,” and it can’t tell a person from a cat crossing the same signal path. Pace has said presence detection is on his roadmap, alongside a Python-side “micro-espectre” project exploring micro-movement analysis for things like breathing or typing detection. That’s a real research direction, not marketing filler, but it isn’t shipped yet.
Where This Fits in a Local-First Stack
What actually pulled me in isn’t that it’s clever — plenty of things are clever — it’s that it’s local by default and open by license. No account, no app phoning home, no subscription gate on the “good” detection mode, GPLv3 all the way down with a commercial license only for anyone embedding it in a product. That’s the same reason I run Home Assistant OS bare-metal on a used EliteDesk instead of leaning on a hub-in-the-cloud: I want the failure mode of my internet going down to be “automations still run,” not “my motion sensor is now a brick.” ESPectre’s whole pitch is built around that same failure mode, which is probably why it resonates so quickly with this particular community.
Where I wouldn’t reach for it yet: anywhere I actually need presence, not motion — my home office, where I sit still reading for twenty minutes and don’t want the lights cutting out. My mmWave sensors already solve that, and they solve it today, not on a roadmap. Where I would reach for it: hallways, stairwells, entryways — the spots where a cheap PIR already does the job, but where “just flash an ESP32 I probably already own” beats ordering one more single-purpose sensor and waiting for a delivery.
Would I Actually Install This?
Yes, in one spot, as a genuine experiment rather than a replacement for anything load-bearing in my automations. I’ve got a spare ESP32-C6 in the parts bin and a stairwell that’s underserved by motion coverage right now, which feels like exactly the low-stakes test the forum crowd is describing. I’m not ripping out the mmWave sensors or trusting Frigate’s job to a signal-processing trick just yet — the presence gap is real, and my automations depend on presence, not motion, in the rooms that matter most. But for a project with no company behind it, no funding round, and a GitHub repo and a forum thread as its entire go-to-market, “works perfectly” from strangers with mismatched hardware is a better signal than most Kickstarter demo videos I’ve watched. I’ll report back once the stairwell has had a few weeks to prove it wrong.

Leave a Reply