Add tabbed dashboard at /dashboard/ with three D3.js visualizations: - Vendor treemap (devices grouped by type and vendor) - SSID social graph (force-directed, shared probed SSIDs as edges) - Fingerprint clusters (packed circles by device behavior) Intelligence API endpoints at /api/v1/intelligence/ with param validation. Dashboard built on htmx + Pico CSS dark theme + D3 v7, all vendored locally (make vendor). 13 new tests (59 total).
2.8 KiB
2.8 KiB
ESP32-Web Cheatsheet
Server Management
make start # Start server
make stop # Stop server
make restart # Restart server
make status # Show PID + uptime
make logs # Tail logs
make dev # Run with debug mode
Database
make migrate # Apply migrations
make migrate-init # Initialize migrations
make migrate-create msg="description" # Create migration
Testing
make test # Run all tests
pytest -v # Verbose output
pytest -k test_sensors # Run specific tests
Static Assets
make vendor # Download Pico CSS, htmx, D3.js to static/vendor/
Container
make build # Build image
make container-run # Run container
make container-stop # Stop container
make container-logs # View logs
API Quick Reference
# Health
curl localhost:5500/health
# Sensors
curl localhost:5500/api/v1/sensors
curl localhost:5500/api/v1/sensors/HOSTNAME
curl -X POST localhost:5500/api/v1/sensors/HOSTNAME/command -H "Content-Type: application/json" -d '{"command":"STATUS"}'
# Devices
curl localhost:5500/api/v1/devices
curl "localhost:5500/api/v1/devices?type=ble&limit=50"
curl localhost:5500/api/v1/devices/MAC
# Alerts
curl localhost:5500/api/v1/alerts
curl "localhost:5500/api/v1/alerts?type=deauth&hours=48"
# Events
curl localhost:5500/api/v1/events
curl "localhost:5500/api/v1/events?type=presence"
# Probes
curl localhost:5500/api/v1/probes
curl localhost:5500/api/v1/probes/ssids
# Stats
curl localhost:5500/api/v1/stats
# Intelligence (Device Intelligence Dashboard)
curl localhost:5500/api/v1/intelligence/vendor-treemap
curl "localhost:5500/api/v1/intelligence/ssid-graph?hours=24&min_shared=1&limit=200"
curl "localhost:5500/api/v1/intelligence/fingerprint-clusters?hours=24"
# Dashboard
open http://localhost:5500/dashboard/
Query Parameters
| Parameter | Endpoints | Description |
|---|---|---|
| type | devices, alerts, events | Filter by type |
| hours | alerts, events, probes | Time window (default: 24) |
| limit | devices, alerts, events, probes | Max results (default: 100) |
| offset | devices, alerts, events, probes | Skip N results |
| ssid | probes | Filter by SSID |
| sensor_id | alerts, events | Filter by sensor |
| hours | intelligence/ssid-graph, intelligence/fingerprint-clusters | Time window (default: 24) |
| min_shared | intelligence/ssid-graph | Min shared SSIDs for link (default: 1) |
Files
| File | Description |
|---|---|
/tmp/esp32-web.pid |
Server PID file |
/tmp/esp32-web.log |
Server log file |
instance/esp32.db |
SQLite database |
.env |
Environment config |
Ports
| Port | Protocol | Description |
|---|---|---|
| 5500 | TCP | HTTP API |
| 5500 | UDP | Sensor data |
| 5501 | UDP | Sensor commands |