mirror of
https://github.com/esphome/esphome.git
synced 2025-10-25 13:13:48 +01:00
239 lines
6.3 KiB
YAML
239 lines
6.3 KiB
YAML
sensor:
|
|
# Source sensor for testing filters
|
|
- platform: template
|
|
name: "Source Sensor"
|
|
id: source_sensor
|
|
lambda: return 42.0;
|
|
update_interval: 1s
|
|
|
|
# Streaming filters (window_size == send_every) - uses StreamingFilter base class
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Streaming Min Filter"
|
|
filters:
|
|
- min:
|
|
window_size: 10
|
|
send_every: 10 # Batch window → StreamingMinFilter
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Streaming Max Filter"
|
|
filters:
|
|
- max:
|
|
window_size: 10
|
|
send_every: 10 # Batch window → StreamingMaxFilter
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Streaming Moving Average Filter"
|
|
filters:
|
|
- sliding_window_moving_average:
|
|
window_size: 10
|
|
send_every: 10 # Batch window → StreamingMovingAverageFilter
|
|
|
|
# Sliding window filters (window_size != send_every) - uses SlidingWindowFilter base class with ring buffer
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Sliding Min Filter"
|
|
filters:
|
|
- min:
|
|
window_size: 10
|
|
send_every: 5 # Sliding window → MinFilter with ring buffer
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Sliding Max Filter"
|
|
filters:
|
|
- max:
|
|
window_size: 10
|
|
send_every: 5 # Sliding window → MaxFilter with ring buffer
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Sliding Median Filter"
|
|
filters:
|
|
- median:
|
|
window_size: 10
|
|
send_every: 5 # Sliding window → MedianFilter with ring buffer
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Sliding Quantile Filter"
|
|
filters:
|
|
- quantile:
|
|
window_size: 10
|
|
send_every: 5
|
|
quantile: 0.9 # Sliding window → QuantileFilter with ring buffer
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Sliding Moving Average Filter"
|
|
filters:
|
|
- sliding_window_moving_average:
|
|
window_size: 10
|
|
send_every: 5 # Sliding window → SlidingWindowMovingAverageFilter with ring buffer
|
|
|
|
# Edge cases
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Large Batch Window Min"
|
|
filters:
|
|
- min:
|
|
window_size: 1000
|
|
send_every: 1000 # Large batch → StreamingMinFilter (4 bytes, not 4KB)
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Small Sliding Window"
|
|
filters:
|
|
- median:
|
|
window_size: 3
|
|
send_every: 1 # Frequent output → MedianFilter with 3-element ring buffer
|
|
|
|
# send_first_at parameter test
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Early Send Filter"
|
|
filters:
|
|
- max:
|
|
window_size: 10
|
|
send_every: 10
|
|
send_first_at: 1 # Send after first value
|
|
|
|
# ValueListFilter-based filters tests
|
|
# FilterOutValueFilter - single value
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Filter Out Single Value"
|
|
filters:
|
|
- filter_out: 42.0 # Should filter out exactly 42.0
|
|
|
|
# FilterOutValueFilter - multiple values
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Filter Out Multiple Values"
|
|
filters:
|
|
- filter_out: [0.0, 42.0, 100.0] # List of values to filter
|
|
|
|
# FilterOutValueFilter - with NaN
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Filter Out NaN"
|
|
filters:
|
|
- filter_out: nan # Filter out NaN values
|
|
|
|
# FilterOutValueFilter - mixed values with NaN
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Filter Out Mixed with NaN"
|
|
filters:
|
|
- filter_out: [nan, 0.0, 42.0]
|
|
|
|
# ThrottleWithPriorityFilter - single priority value
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Throttle with Single Priority"
|
|
filters:
|
|
- throttle_with_priority:
|
|
timeout: 1000ms
|
|
value: 42.0 # Priority value bypasses throttle
|
|
|
|
# ThrottleWithPriorityFilter - multiple priority values
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Throttle with Multiple Priorities"
|
|
filters:
|
|
- throttle_with_priority:
|
|
timeout: 500ms
|
|
value: [0.0, 42.0, 100.0] # Multiple priority values
|
|
|
|
# ThrottleWithPriorityFilter - with NaN priority
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Throttle with NaN Priority"
|
|
filters:
|
|
- throttle_with_priority:
|
|
timeout: 1000ms
|
|
value: nan # NaN as priority value
|
|
|
|
# Combined filters - FilterOutValueFilter + other filters
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Filter Out Then Throttle"
|
|
filters:
|
|
- filter_out: [0.0, 100.0]
|
|
- throttle: 500ms
|
|
|
|
# Combined filters - ThrottleWithPriorityFilter + other filters
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Throttle Priority Then Scale"
|
|
filters:
|
|
- throttle_with_priority:
|
|
timeout: 1000ms
|
|
value: [42.0]
|
|
- multiply: 2.0
|
|
|
|
# CalibrateLinearFilter - piecewise linear calibration
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Calibrate Linear Two Points"
|
|
filters:
|
|
- calibrate_linear:
|
|
- 0.0 -> 0.0
|
|
- 100.0 -> 100.0
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Calibrate Linear Multiple Segments"
|
|
filters:
|
|
- calibrate_linear:
|
|
- 0.0 -> 0.0
|
|
- 50.0 -> 55.0
|
|
- 100.0 -> 102.5
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Calibrate Linear Least Squares"
|
|
filters:
|
|
- calibrate_linear:
|
|
method: least_squares
|
|
datapoints:
|
|
- 0.0 -> 0.0
|
|
- 50.0 -> 55.0
|
|
- 100.0 -> 102.5
|
|
|
|
# CalibratePolynomialFilter - polynomial calibration
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Calibrate Polynomial Degree 2"
|
|
filters:
|
|
- calibrate_polynomial:
|
|
degree: 2
|
|
datapoints:
|
|
- 0.0 -> 0.0
|
|
- 50.0 -> 55.0
|
|
- 100.0 -> 102.5
|
|
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Calibrate Polynomial Degree 3"
|
|
filters:
|
|
- calibrate_polynomial:
|
|
degree: 3
|
|
datapoints:
|
|
- 0.0 -> 0.0
|
|
- 25.0 -> 26.0
|
|
- 50.0 -> 55.0
|
|
- 100.0 -> 102.5
|
|
|
|
# OrFilter - filter branching
|
|
- platform: copy
|
|
source_id: source_sensor
|
|
name: "Or Filter with Multiple Branches"
|
|
filters:
|
|
- or:
|
|
- multiply: 2.0
|
|
- offset: 10.0
|
|
- lambda: return x * 3.0;
|