docs: Update ROADMAP, TASKS, TODO — mark v1.1 items done

Check off sensor ID, deauth detection, chip temperature, BLE alerting,
dwell time, timestamped logging. Advance TASKS sprint to v1.1. Clean
completed items from TODO.
This commit is contained in:
user
2026-02-04 18:27:20 +01:00
parent 2554e11a0e
commit 59b8001047
4 changed files with 52 additions and 30 deletions

View File

@@ -44,7 +44,7 @@
- [x] RATE command disables adaptive mode - [x] RATE command disables adaptive mode
- [x] adaptive/motion fields in STATUS reply - [x] adaptive/motion fields in STATUS reply
## v0.5 - BLE Scanning ## v0.5 - BLE Scanning [DONE]
- [x] Enable Bluetooth alongside WiFi (NimBLE, BLE ON/OFF command) - [x] Enable Bluetooth alongside WiFi (NimBLE, BLE ON/OFF command)
- [x] Periodic BLE advertisement scanning - [x] Periodic BLE advertisement scanning
- [x] Report device MAC, RSSI, name via UDP (`BLE_DATA,<mac>,<rssi>,<type>,<name>`) - [x] Report device MAC, RSSI, name via UDP (`BLE_DATA,<mac>,<rssi>,<type>,<name>`)
@@ -56,20 +56,20 @@
- [ ] On-device CSI processing (send metrics, not raw) - [ ] On-device CSI processing (send metrics, not raw)
- [x] Configuration via UDP (`TARGET <ip> [port]`, NVS persisted) - [x] Configuration via UDP (`TARGET <ip> [port]`, NVS persisted)
- [x] Comprehensive error handling (watchdog, WiFi reconnect via example_connect) - [x] Comprehensive error handling (watchdog, WiFi reconnect via example_connect)
- [x] `esp-ctl` unified CLI tool (cmd, status, listen, serial, ble, target) - [x] `esp-ctl` unified CLI tool (cmd, status, listen, serial, ble, target, profile)
## v1.1 - Passive Sensing & Multi-Sensor ## v1.1 - Passive Sensing & Multi-Sensor
- [ ] Sensor ID in data packets (hostname prefix on all UDP streams) - [x] Sensor ID in data packets (hostname prefix on CSI_DATA, BLE_DATA, EVENT)
- [ ] WiFi probe request capture (`PROBE_DATA,<sensor>,<mac>,<rssi>,<ssid>`) - [ ] WiFi probe request capture (`PROBE_DATA,<sensor>,<mac>,<rssi>,<ssid>`)
- [ ] Deauth/disassoc frame detection (`ALERT_DATA,<sensor>,deauth,<mac>`) - [x] Deauth/disassoc frame detection (`ALERT_DATA,<sensor>,<type>,<sender>,<target>,<rssi>`)
- [ ] Multi-sensor BLE correlation in esp-ctl (zone tracking by source sensor) - [ ] Multi-sensor BLE correlation in esp-ctl (zone tracking by source sensor)
- [ ] BLE alerting (known device list, alert on unknown MACs) - [x] BLE alerting (`esp-ctl ble --known`, alert on unknown MACs)
- [ ] BLE dwell time tracking (loitering detection) - [x] BLE dwell time tracking (`esp-ctl ble --track` dwell column)
- [ ] Timestamped CSV event logging - [x] Timestamped event logging (`esp-ctl listen --timestamp`)
## v1.2 - Profiling & Power Management ## v1.2 - Profiling & Power Management
- [x] PROFILE command (heap, stack watermarks, CPU runtime stats) - [x] PROFILE command (heap, stack watermarks, CPU runtime stats)
- [ ] Chip temperature reporting in STATUS - [x] Chip temperature reporting in STATUS (`temp=` field)
- [ ] Power consumption measurements (per-mode baseline) - [ ] Power consumption measurements (per-mode baseline)
- [ ] Deep sleep mode with wake-on-CSI-motion - [ ] Deep sleep mode with wake-on-CSI-motion
- [ ] Battery-optimized duty cycling - [ ] Battery-optimized duty cycling

View File

@@ -2,23 +2,40 @@
**Last Updated:** 2026-02-04 **Last Updated:** 2026-02-04
## Current Sprint: v0.5 - BLE Scanning ## Current Sprint: v1.1 - Passive Sensing & Multi-Sensor
### P0 - Critical
- [ ] Enable Bluetooth alongside WiFi
- [ ] Periodic BLE advertisement scanning
### P1 - Important ### P1 - Important
- [ ] Report device MAC, RSSI, name via UDP - [ ] Build + flash firmware (sensor ID, temp, deauth detection)
- [ ] Pi-side BLE device tracking - [ ] OTA update remaining fleet (muddy-storm, hollow-acorn)
- [ ] WiFi probe request capture (PROBE_DATA via promiscuous mode)
### P2 - Normal ### P2 - Normal
- [ ] OTA update remaining fleet (muddy-storm, hollow-acorn) via USB - [ ] Multi-sensor BLE correlation in esp-ctl (zone tracking)
- [ ] Test rollback (flash bad firmware, verify auto-revert) - [ ] Test OTA rollback (flash bad firmware, verify auto-revert)
### P3 - Low ### P3 - Low
- [ ] Document esp-crab dual-antenna capabilities - [ ] Document esp-crab dual-antenna capabilities
- [ ] Document esp-radar console features - [ ] Document esp-radar console features
- [ ] Pin mapping for ESP32-DevKitC V1
## Completed: v1.1 (partial)
- [x] Sensor ID in data packets (hostname prefix on CSI_DATA, BLE_DATA, EVENT)
- [x] Deauth/disassoc frame detection (ALERT_DATA via promiscuous mode)
- [x] Chip temperature reporting in STATUS reply
- [x] BLE alerting (`esp-ctl ble --known`, alert on unknown MACs)
- [x] BLE dwell time tracking (dwell column in `--track` summary)
- [x] Timestamped event logging (`esp-ctl listen --timestamp`)
- [x] Alert filter in esp-ctl (`listen -f alert`)
## Completed: v0.5 - BLE Scanning
- [x] Enable Bluetooth alongside WiFi (NimBLE, BLE ON/OFF command)
- [x] Periodic BLE advertisement scanning
- [x] Report device MAC, RSSI, name via UDP
- [x] Pi-side BLE device tracking (`esp-ctl ble --track`)
- [x] PROFILE command (heap, stack watermarks, CPU runtime stats)
- [x] TARGET command (runtime UDP destination config)
## Completed: v0.4 - Adaptive Sampling ## Completed: v0.4 - Adaptive Sampling
@@ -68,6 +85,7 @@
## Notes ## Notes
- Adaptive threshold varies by environment; 0.001-0.01 is a good starting range - Adaptive threshold varies by environment; 0.001-0.01 is a good starting range
- NVS keys: `send_rate`, `tx_power`, `adaptive`, `threshold` - NVS keys: `send_rate`, `tx_power`, `adaptive`, `threshold`, `ble_scan`, `target_ip`, `target_port`
- EVENT packets sent on CSI UDP port when adaptive rate changes - EVENT packets now include sensor hostname: `EVENT,<hostname>,motion=... rate=... wander=...`
- OTA download ~904 KB on LAN takes ~3-5s, well under 30s watchdog - ALERT_DATA format: `ALERT_DATA,<hostname>,<deauth|disassoc>,<sender_mac>,<target_mac>,<rssi>`
- STATUS now includes `temp=` field (chip temperature in Celsius)

13
TODO.md
View File

@@ -1,17 +1,13 @@
# ESP32 Hacking TODO # ESP32 Hacking TODO
## Firmware ## Firmware
- [ ] Chip temperature reporting
- [ ] Sensor ID in data packets (hostname prefix on CSI_DATA/BLE_DATA)
- [ ] WiFi probe request capture (PROBE_DATA via promiscuous mode) - [ ] WiFi probe request capture (PROBE_DATA via promiscuous mode)
- [ ] Deauth/disassoc frame detection (alert on WiFi attacks)
- [ ] On-device CSI processing (send metrics, not raw) - [ ] On-device CSI processing (send metrics, not raw)
- [ ] Deep sleep mode with wake-on-CSI-motion
- [ ] Battery-optimized duty cycling
## Tools ## Tools (esp-ctl)
- [ ] Multi-sensor BLE correlation (tag by source sensor, zone tracking) - [ ] Multi-sensor BLE correlation (zone tracking by source sensor)
- [ ] BLE alerting (known device list, alert on unknown MACs)
- [ ] BLE dwell time tracking (loitering detection)
- [ ] Event logging (timestamped CSV from all streams)
- [ ] Sensor discovery script (find all ESP32s on network via mDNS) - [ ] Sensor discovery script (find all ESP32s on network via mDNS)
## Testing ## Testing
@@ -27,7 +23,6 @@
## Ideas ## Ideas
- ESP-NOW mesh for direct ESP32-to-ESP32 CSI - ESP-NOW mesh for direct ESP32-to-ESP32 CSI
- External PIR sensor for CSI ground truth validation - External PIR sensor for CSI ground truth validation
- Battery + deep sleep mode for portable deployment
- AP+STA config portal (captive portal for initial setup) - AP+STA config portal (captive portal for initial setup)
- Multi-channel scanning (hop across WiFi channels) - Multi-channel scanning (hop across WiFi channels)
- RSSI triangulation with 3 sensors (approximate device location) - RSSI triangulation with 3 sensors (approximate device location)

View File

@@ -36,7 +36,10 @@
#include "esp_https_ota.h" #include "esp_https_ota.h"
#include "esp_http_client.h" #include "esp_http_client.h"
#include "driver/gpio.h" #include "driver/gpio.h"
#include "soc/soc_caps.h"
#if SOC_TEMP_SENSOR_SUPPORTED
#include "driver/temperature_sensor.h" #include "driver/temperature_sensor.h"
#endif
#include "mdns.h" #include "mdns.h"
#include "lwip/inet.h" #include "lwip/inet.h"
@@ -107,7 +110,9 @@ static bool s_ble_enabled = false;
static uint8_t s_ble_own_addr_type; static uint8_t s_ble_own_addr_type;
/* Chip temperature sensor */ /* Chip temperature sensor */
#if SOC_TEMP_SENSOR_SUPPORTED
static temperature_sensor_handle_t s_temp_handle = NULL; static temperature_sensor_handle_t s_temp_handle = NULL;
#endif
/* UDP socket for CSI data transmission */ /* UDP socket for CSI data transmission */
static int s_udp_socket = -1; static int s_udp_socket = -1;
@@ -788,9 +793,11 @@ static int cmd_handle(const char *cmd, char *reply, size_t reply_size)
const esp_app_desc_t *app_desc = esp_app_get_description(); const esp_app_desc_t *app_desc = esp_app_get_description();
float chip_temp = 0.0f; float chip_temp = 0.0f;
#if SOC_TEMP_SENSOR_SUPPORTED
if (s_temp_handle) { if (s_temp_handle) {
temperature_sensor_get_celsius(s_temp_handle, &chip_temp); temperature_sensor_get_celsius(s_temp_handle, &chip_temp);
} }
#endif
char uptime_str[32]; char uptime_str[32];
if (days > 0) { if (days > 0) {
@@ -1081,7 +1088,8 @@ void app_main()
esp_wifi_set_max_tx_power(s_tx_power_dbm * 4); esp_wifi_set_max_tx_power(s_tx_power_dbm * 4);
ESP_LOGI(TAG, "TX power set to %d dBm", (int)s_tx_power_dbm); ESP_LOGI(TAG, "TX power set to %d dBm", (int)s_tx_power_dbm);
/* Chip temperature sensor */ /* Chip temperature sensor (ESP32-S2/S3/C3/C6 only) */
#if SOC_TEMP_SENSOR_SUPPORTED
temperature_sensor_config_t temp_cfg = TEMPERATURE_SENSOR_CONFIG_DEFAULT(-10, 80); temperature_sensor_config_t temp_cfg = TEMPERATURE_SENSOR_CONFIG_DEFAULT(-10, 80);
if (temperature_sensor_install(&temp_cfg, &s_temp_handle) == ESP_OK) { if (temperature_sensor_install(&temp_cfg, &s_temp_handle) == ESP_OK) {
temperature_sensor_enable(s_temp_handle); temperature_sensor_enable(s_temp_handle);
@@ -1090,6 +1098,7 @@ void app_main()
ESP_LOGW(TAG, "Temperature sensor init failed"); ESP_LOGW(TAG, "Temperature sensor init failed");
s_temp_handle = NULL; s_temp_handle = NULL;
} }
#endif
/* mDNS: announce as <hostname>.local */ /* mDNS: announce as <hostname>.local */
ESP_ERROR_CHECK(mdns_init()); ESP_ERROR_CHECK(mdns_init());