[BUG] Calibration does not finish, no `movement` measured
Before you start
- I searched existing issues for similar reports.
- I tested against the current website or a recent release or development build. If I could not, I explained why below.
Area affected
Home Assistant or controller integration
Firmware
ESPHome
Installation or connection
ESPHome local build
ESPectre version or commit
3.0.0-rc1
Board and chip
Seeed Xiao ESP32 S3 plus
Website page or origin
No response
Browser and version
No response
Host OS
No response
Controller or integration
HASS 2026.8.3
What happened?
movement_sensor is not reporting any values. calibration_active_sensor does not turn off (lightweight detector mode).
What did you expect to happen?
On the previous builds the movement_sensor reported a very noisy graph and motion_sensor tripped every now and then. On 3.0.0-rc1 movement_sensor is always 0 and motion_sensor never trips.
Steps to reproduce
Compile with ESPhome, check with HASS dashboarding.
Relevant config or command
Relevant ESPhome configuration (this is a package definition included by the overall YAML):
defaults:
package:
device:
name: "Wi-Fi CSI sensor in ${device.name} in ${area.name}"
id: wifi_csi_sensor_device_in_${device.id}_in_${area.id}
area_id: ${area.id}
# defaults
direct_api: false
segmentation_window_size_ms: 1000
csi_target_pps: 100
csi_traffic_mode: internal
csi_traffic_multicast_group: 239.255.0.1
evaluation_interval_ms: 250
motion_on_hits: 4
motion_off_hits: 3
lowpass_enabled: false
lowpass_cutoff: 11.0
hampel_enabled: true
hampel_window: 7
hampel_threshold: 5.0
traffic_generator_mode: ping
detection_algorithm: lightweight
esphome:
devices:
- name: ${package.device.name}
id: ${package.device.id}
# Load ESPectre component from GitHub
external_components:
- source:
type: local
path: components/espectre/src/cpp/frontend/esphome/components
components: [ espectre ]
# ESPectre - WiFi CSI Motion Detection
espectre:
id: wifi_csi
direct_api: ${direct_api}
segmentation_window_size_ms: ${segmentation_window_size_ms}
csi_target_pps: ${csi_target_pps}
csi_traffic_mode: ${csi_traffic_mode}
csi_traffic_multicast_group: ${csi_traffic_multicast_group}
evaluation_interval_ms: ${evaluation_interval_ms}
motion_on_hits: ${motion_on_hits}
motion_off_hits: ${motion_off_hits}
lowpass_enabled: ${lowpass_enabled}
lowpass_cutoff: ${lowpass_cutoff}
hampel_enabled: ${hampel_enabled}
hampel_window: ${hampel_window}
hampel_threshold: ${hampel_threshold}
traffic_generator_mode: ${traffic_generator_mode}
detection_algorithm: ${detection_algorithm}
movement_sensor:
name: Movement
device_id: ${package.device.id}
icon: mdi:waves
# filters:
# - multiply: 100 # Scale 0-1 to 0-100
# - clamp:
# min_value: 0
# max_value: 100 # Cap at 100%
# - round: 1 # Round to 1 decimal
# internal: true # Hide from Home Assistant
disabled_by_default: true
motion_sensor:
name: Motion
device_id: ${package.device.id}
# icon: mdi:wifi-star
device_class: motion
filters:
- delayed_on_off:
time_on: !lambda |-
return id(${package.device.id}_motion_delayed_on).state * 1000.0;
time_off: !lambda |-
return id(${package.device.id}_motion_delayed_off).state * 1000.0;
threshold_number:
device_id: ${package.device.id}
name: Threshold
entity_category: config
recalibrate_button:
device_id: ${package.device.id}
name: Recalibrate
entity_category: config
traffic_rate_sensor:
name: Traffic rate
device_id: ${package.device.id}
csi_callback_rate_sensor:
name: CSI callback rate
device_id: ${package.device.id}
csi_accepted_rate_sensor:
name: CSI accepted rate
device_id: ${package.device.id}
csi_admitted_rate_sensor:
name: CSI admitted rate
device_id: ${package.device.id}
csi_filtered_rate_sensor:
name: CSI filtered rate
device_id: ${package.device.id}
csi_missing_rate_sensor:
name: CSI missing rate
device_id: ${package.device.id}
csi_excess_rate_sensor:
name: CSI excess rate
device_id: ${package.device.id}
csi_stale_rate_sensor:
name: CSI stale rate
device_id: ${package.device.id}
csi_out_of_order_rate_sensor:
name: CSI out-of-order rate
device_id: ${package.device.id}
csi_occupancy_sensor:
name: CSI occupancy
device_id: ${package.device.id}
wifi_channel_sensor:
name: Wi-Fi channel
device_id: ${package.device.id}
wifi_rssi_sensor:
name: Wi-Fi RSSI
device_id: ${package.device.id}
diagnostics_button:
name: Get diagnostics
device_id: ${package.device.id}
calibration_active_sensor:
name: Calibration active
device_id: ${package.device.id}
# numbers
motion_on_hits_number:
name: Hits for motion on
device_id: ${package.device.id}
motion_off_hits_number:
name: Hits for motion off
device_id: ${package.device.id}
detector_select:
name: Detector
device_id: ${package.device.id}
csi_traffic_mode_select:
name: CSI traffic mode
device_id: ${package.device.id}
traffic_generator_mode_select:
name: Traffic generator mode
device_id: ${package.device.id}
sensing_switch:
name: Sensing
device_id: ${package.device.id}
number:
- platform: template
name: "Motion delayed on time"
id: ${package.device.id}_motion_delayed_on
device_id: ${package.device.id}
icon: mdi:clock-start
entity_category: config
min_value: 0.00
max_value: 10.00
initial_value: 2.00
optimistic: true
step: 0.05
restore_value: true
unit_of_measurement: seconds
mode: slider
disabled_by_default: true
# internal: true
- platform: template
name: "Motion delayed off time"
id: ${package.device.id}_motion_delayed_off
device_id: ${package.device.id}
icon: mdi:clock-end
entity_category: config
min_value: 10.00
max_value: 300.00
initial_value: 10.00
optimistic: true
step: 10.00
restore_value: true
unit_of_measurement: seconds
mode: slider
disabled_by_default: true
# internal: true
# EOFRelevant HASS dashboard:
decluttering_templates:
wifi_csi_sensor:
card:
type: vertical-stack
cards:
- type: entities
entities:
- entity: binary_sensor.[[sensor]]_motion
name: Motion
color: state
secondary_info: last-changed
- type: history-graph
entities:
- entity: sensor.[[sensor]]_movement
hours_to_show: 0.025
show_names: false
min_y_axis: 0
max_y_axis: 1
- type: entities
title: Settings
entities:
- entity: number.[[sensor]]_threshold
icon: mdi:tune-vertical
name: Threshold
secondary_info: last-changed
- entity: switch.[[sensor]]_sensing
icon: mdi:refresh
name: Sensing
- entity: button.[[sensor]]_recalibrate
icon: mdi:refresh
name: Recalibrate
- entity: binary_sensor.[[sensor]]_calibration_active
icon: mdi:refresh
name: Calibrating
- type: custom:expander-card
title: Diagnostics
cards:
- type: entities
entities:
- entity: button.[[sensor]]_get_diagnostics
name: Get diagnostics
secondary_info: last-changed
- entity: sensor.[[sensor]]_csi_occupancy
name: Occupancy
- entity: sensor.[[sensor]]_traffic_rate
name: Traffic rate
- entity: sensor.[[sensor]]_csi_callback_rate
name: Callback rate
- entity: sensor.[[sensor]]_csi_accepted_rate
name: Accepted rate
- entity: sensor.[[sensor]]_csi_admitted_rate
name: Admitted rate
- entity: sensor.[[sensor]]_csi_filtered_rate
name: Filtered rate
- entity: sensor.[[sensor]]_csi_missing_rate
name: Missing rate
- entity: sensor.[[sensor]]_csi_excess_rate
name: Excess rate
- entity: sensor.[[sensor]]_csi_stale_rate
name: Stale rate
- entity: sensor.[[sensor]]_csi_out_of_order_rate
name: Out-of-order rate
- type: custom:expander-card
title: Configuration
cards:
- type: entities
title: Configuration
entities:
- entity: select.[[sensor]]_detector
name: Detector
- entity: select.[[sensor]]_csi_traffic_mode
name: CSI traffic mode
- entity: select.[[sensor]]_traffic_generator_mode
name: Traffic generator modeTo make the history-graph work, sensor.xxx_movement_sensor was enabled in HASS.
Relevant logs
11:46:59
[I]
[espectre.runtime:064]
[--------------------] | mvmt:0.000000 thr:0.662185 | CALIBRATING | csi:20/53 tx:99 occ:25% miss:67 excess:32 stale:0 ooo:0 | ch:1 rssi:-45
11:46:59
[I]
[espectre.runtime:064]
[--------------------] | mvmt:0.000000 thr:0.662185 | CALIBRATING | csi:37/96 tx:100 occ:37% miss:77 excess:58 stale:0 ooo:0 | ch:1 rssi:-44
11:46:59
[I]
[espectre.runtime:064]
[--------------------] | mvmt:0.000000 thr:0.662185 | CALIBRATING | csi:25/48 tx:100 occ:25% miss:74 excess:22 stale:0 ooo:0 | ch:1 rssi:-44
11:46:59
[I]
[espectre.runtime:064]
[--------------------] | mvmt:0.000000 thr:0.662185 | CALIBRATING | csi:19/59 tx:97 occ:19% miss:82 excess:40 stale:0 ooo:0 | ch:1 rssi:-44
11:46:59
[I]
[espectre.runtime:064]
[--------------------] | mvmt:0.000000 thr:0.662185 | CALIBRATING | csi:42/129 tx:99 occ:43% miss:58 excess:85 stale:0 ooo:0 | ch:1 rssi:-45
11:46:59
[I]
[espectre.runtime:064]
[--------------------] | mvmt:0.000000 thr:0.662185 | CALIBRATING | csi:47/148 tx:99 occ:48% miss:51 excess:100 stale:0 ooo:0 | ch:1 rssi:-45
11:47:00
[I]
[espectre.runtime:064]
[--------------------] | mvmt:0.000000 thr:0.662185 | CALIBRATING | csi:45/121 tx:100 occ:44% miss:55 excess:75 stale:0 ooo:0 | ch:1 rssi:-44
11:47:01
[I]
[espectre.runtime:064]
[--------------------] | mvmt:0.000000 thr:0.662185 | CALIBRATING | csi:47/104 tx:100 occ:50% miss:47 excess:56 stale:0 ooo:0 | ch:1 rssi:-45
11:47:02
[I]
[espectre.runtime:064]
[--------------------] | mvmt:0.000000 thr:0.662185 | CALIBRATING | csi:22/48 tx:99 occ:22% miss:78 excess:25 stale:0 ooo:0 | ch:1 rssi:-44Crash debug artifacts
No response
Additional context
The ESP is running alongside bluetooth_proxy, ble_tracker and taixia components. This was also the case with previous release of espectre where movement_sensor did report values.
Note that on the previous release, ble_channel_enabled was set to false. In the current release this configuration option is not available anymore.
Source: francescopace/espectre