Real-time 3D Wi-Fi signal heatmapper with rogue AP detection and physical localization. Walk around, click your position, and watch the heatmap build like a live thermal camera.
- 3D OpenGL heatmap — GPU-accelerated Phong-shaded surface via VisPy
- Auto router detection — signal-weighted centroid from your clicks
- Connected device mapping — live device names + positions around the router
- Real-time RSSI — last point updates automatically when signal changes
- Wall drawing — drag to add drywall, brick, or concrete obstacles
- Scrolling waterfall — live RSSI history overlay
- Turntable camera — arrow keys rotate the 3D view
- Tokyo Night theme — dark UI throughout
Toggle the Threat Scanner panel to access the AP scanner and rogue AP localization tool:
- AP Scanner — enumerate all nearby networks (SSID, BSSID, channel, security, RSSI)
- Rogue Detector — whitelist-based heuristics flag evil twins, open corporate SSIDs, hidden APs
- Survey Mode — click floor points around a target AP to collect RSSI samples
- Localization Engine — nonlinear least-squares fit with error ellipse and GDOP
- 3D Threat Overlay — red ceiling marker, confidence ellipse, drop line on the 3D canvas
- Reporting — export survey sessions as JSON/CSV/HTML reports
python main.py| Action | Result |
|---|---|
| Click on floor | Record signal measurement |
| Click-drag | Draw a wall |
| Arrow keys | Rotate camera |
| Auto-sample checkbox | Auto-record every 1s |
| Demo Data button | 20 synthetic points instantly |
| ⚡ Threat Scanner | Open AP scanner + rogue AP survey |
Three decoupled pipelines on separate threads:
- Wi-Fi (
wifi/networking.py) — OS-level RSSI polling with automatic simulated fallback - Heatmap (
heatmap/) — Gaussian blob kernel regression, physics path-loss model, router estimation - UI (
ui/) — PyQt6 window with VisPy OpenGL 3D canvas
| OS | Method | Permissions |
|---|---|---|
| Linux | /proc/net/wireless, iw, iwconfig |
None needed |
| Windows | netsh wlan show interfaces |
None needed |
| macOS | airport -I |
May be missing on Ventura+ |
Edit heatmap/math.py:
- CELL_METERS (default 0.3): real-world meters per grid cell
- TX_POWER_DBM (default -30.0): RSSI at 1 cell from router
