Detecting a person walking through a house by watching the shadow their body casts on ambient WiFi.

Water absorbs 2.4 and 5 GHz. Walking through a room shifts RSSI by one to three dBm — and crucially, it shifts each access point by a different amount depending on what's between it and the receiver. That difference is the signal.
Z-scores against the calibrated baseline. Anything past 2.5σ trips the zone. Drag through the floorplan above and watch which BSSIDs react.
It treated RSSI as a location fingerprint for the scanner's own position — which room is the laptop in. That's a solved and useless question when the laptop never moves.
Fingerprint the receiver. Walk the house, label rooms, classify live readings with KNN. Answers "where am I" — for a machine sitting on a desk.
The scanner is fixed. Detect someone else by how their body perturbs the ambient field. The dot tracks the most disturbed zone, not the receiver.
Scan an empty house for 30 seconds. Compute a stable mean and standard deviation per BSSID.
Live RSSI expressed as a Z-score against that baseline. The deviation is the motion signal — raw dBm never is.
Each calibrated zone has a signature: which BSSIDs deviate, and in which direction. Match live deviations against the library.
Zone transitions over time become a path. Room-level resolution, no better — and the code doesn't pretend otherwise.
Presence and motion detection are reliable. Room-level zoning works after calibration. Path tracking is a sequence of transitions.
Sub-room positioning. Counting people. Anything through more than a couple of interior walls without a second AP in the geometry.
CSI — per-subcarrier phase and amplitude — is sensitive enough to detect breathing, but needs a card with an exposed CSI driver.
802.11mc FTM gives real round-trip distance instead of inferred attenuation, if the router supports it.
An asyncio.Lock() constructed outside the event loop, and a deprecated @app.on_event startup hook.
The Windows batch launcher died on a folder path containing spaces and a trailing backslash. Nothing to do with RF at all.
Windows-side scanning goes through netsh, which caps the poll rate and quietly caches results. That ceiling is the real constraint on temporal resolution, not the physics.