github francescopace/espectre 2.8.0
v2.8.0 - Detection hardening, ML cross-chip reliability, and runtime motion policy

5 hours ago

Highlights

  • Detection and calibration hardened across stacks: multi-strategy NBVI band selection, Hampel on by default, stricter NBVI defaults, conservative hint-band fallback, unified 12-subcarrier defaults, and a 100-packet detection window.
  • Runtime motion policy aligned between firmware and Micro-ESPectre: edge-driven binary motion publish, configurable motion_on_hits / motion_off_hits (default 3 / 3), and evaluation_interval decoupled from publish_interval.
  • ML detector reliability improved on all chips: datasets recollected, chip-grouped training, updated 9-feature model (9 -> 32 -> 16 -> 1), Hampel-aligned weights, raw-std features for ML, and a more gradual temperature-scaled Movement Score for Home Assistant.
  • Traffic generator defaults to ping: ICMP ping replaces DNS as the default CSI traffic source on both ESPHome and Micro-ESPectre (dns remains available).

Detection and calibration

  • Traffic generator default is ping: improves compatibility with routers that ignore or rate-limit root-domain DNS queries.
  • Hampel enabled by default (hampel_enabled=true, threshold 5.0 MAD).
  • NBVI selects the lowest-FP band among four strategies per window (Entropy Spaced, MAD Clustered, Classic Spaced, Classic Clustered); scoring exposes nbvi_classic, nbvi_entropy, and nbvi_mad.
  • NBVI defaults tightened: alpha 0.75, percentile 5, noise_gate_percentile 15; calibration FP uses the runtime adaptive threshold (P95 x 1.1).
  • Hint-band fallback is more conservative: keeps the current/default band when both candidates already meet the <=5% FP target and the hint is not meaningfully worse.
  • Default detection window is 100 packets (DETECTOR_DEFAULT_WINDOW_SIZE / SEG_WINDOW_SIZE).
  • Motion state is edge-driven and filterable: binary IDLE <-> MOTION transitions publish immediately; motion_on_hits / motion_off_hits apply consecutive-hit filtering to both MVS and ML (default 3 / 3).
  • evaluation_interval decoupled from publish_interval: detector evaluation defaults to every 25 packets; metric/log publishing keeps its own cadence.
  • Micro-ESPectre runtime matches firmware policy: same evaluation/hit filtering before MQTT publish; info reports the new knobs; ./me deploy ships runtime_policy.py.
  • Micro-ESPectre per-packet overhead reduced for ML and MVS on device.

ML detector

  • ML uses raw turbulence std, not CV normalization: fixes ESP32 feature-scale mismatch with gain-locked chips; CV normalization remains MVS-only.
  • Movement Score is more gradual for Home Assistant: temperature scaling before sigmoid; default threshold 5.0 unchanged for binary detection.
  • Production model refreshed: 9 inputs (turb_mean, turb_std, turb_max, turb_min, turb_iqr, turb_skewness, turb_autocorr, turb_mad, waveform_length); topology 9 -> 32 -> 16 -> 1; weights retrained on Hampel-filtered input.
  • Training pipeline hardened: StratifiedGroupKFold by chip, stratified internal validation, hard-positive mining for near-threshold motion.
  • Per-chip datasets recollected under stricter quality controls (gain-locked, 128 SC HT20, balanced baseline/motion); used for NBVI validation, MVS tests, and ML training.

Added

  • examples/espectre-s3-touch-lcd.yaml: Waveshare-compatible ESP32-S3 Touch LCD 1.47" profile with on-device motion status.
  • ./me detect: live host-side ML inference from the UDP CSI stream (replaces tools/12_test_motion_stream.py).
  • CSI research notebooks: micro-espectre/notebooks/01_csi_data_explorer.ipynb, 02_feature_extraction_and_ml.ipynb.

Changed

  • ESPHome baseline 2026.5.0; examples/QEMU now require min_version: 2026.5.0.
  • Docs and config templates: ping default traffic generator; ./me detect documented alongside stream and collect.
  • Removed examples/uart/; optional hardware_uart: UART0 documented for USB-UART bridge setups.

Fixed

  • Cross-stack real-data test pairing: C++ harness matches Python by using full ISO timestamps with fractional seconds.
  • Micro-ESPectre collector and dataset QA: monotonic packet drain during interactive collect; consistent pair-ratio rounding in quality reports.
  • Code scanning and collect tooling: addressed reported alerts; safer temp files, UDP bind handling, and --bind-ip on ./me collect.

CI and project maintenance

  • DCO commit-signoff enforcement and CodeQL workflow for C++ and Python.
  • QEMU smoke tests stabilized: PHY emulator limits handled, ESP32 coverage restored, unsupported C6 matrix entries removed.
  • Workflow permissions and Dependabot grouping tuned to reduce noise.

Don't miss a new espectre release

NewReleases is sending notifications on new releases.