mirror of
https://github.com/esphome/esphome.git
synced 2025-10-23 20:23:50 +01:00
add
This commit is contained in:
@@ -453,7 +453,7 @@ async def skip_initial_filter_to_code(config, filter_id):
|
||||
return cg.new_Pvariable(filter_id, config)
|
||||
|
||||
|
||||
@FILTER_REGISTRY.register("min", MinFilter, MIN_SCHEMA)
|
||||
@FILTER_REGISTRY.register("min", Filter, MIN_SCHEMA)
|
||||
async def min_filter_to_code(config, filter_id):
|
||||
window_size: int = config[CONF_WINDOW_SIZE]
|
||||
send_every: int = config[CONF_SEND_EVERY]
|
||||
@@ -463,10 +463,11 @@ async def min_filter_to_code(config, filter_id):
|
||||
# Saves 99.98% memory for large windows (e.g., 20KB → 4 bytes for window_size=5000)
|
||||
if window_size == send_every:
|
||||
# Use streaming filter - O(1) memory instead of O(n)
|
||||
rhs = cg.new_Pvariable(StreamingMinFilter, window_size, send_first_at)
|
||||
return cg.Pvariable(filter_id, rhs)
|
||||
rhs = StreamingMinFilter.new(window_size, send_first_at)
|
||||
return cg.Pvariable(filter_id, rhs, StreamingMinFilter)
|
||||
# Use sliding window filter - maintains ring buffer
|
||||
return cg.new_Pvariable(filter_id, window_size, send_every, send_first_at)
|
||||
rhs = MinFilter.new(window_size, send_every, send_first_at)
|
||||
return cg.Pvariable(filter_id, rhs, MinFilter)
|
||||
|
||||
|
||||
MAX_SCHEMA = cv.All(
|
||||
@@ -481,7 +482,7 @@ MAX_SCHEMA = cv.All(
|
||||
)
|
||||
|
||||
|
||||
@FILTER_REGISTRY.register("max", MaxFilter, MAX_SCHEMA)
|
||||
@FILTER_REGISTRY.register("max", Filter, MAX_SCHEMA)
|
||||
async def max_filter_to_code(config, filter_id):
|
||||
window_size: int = config[CONF_WINDOW_SIZE]
|
||||
send_every: int = config[CONF_SEND_EVERY]
|
||||
@@ -489,9 +490,10 @@ async def max_filter_to_code(config, filter_id):
|
||||
|
||||
# Optimization: Use streaming filter for batch windows (window_size == send_every)
|
||||
if window_size == send_every:
|
||||
rhs = cg.new_Pvariable(StreamingMaxFilter, window_size, send_first_at)
|
||||
return cg.Pvariable(filter_id, rhs)
|
||||
return cg.new_Pvariable(filter_id, window_size, send_every, send_first_at)
|
||||
rhs = StreamingMaxFilter.new(window_size, send_first_at)
|
||||
return cg.Pvariable(filter_id, rhs, StreamingMaxFilter)
|
||||
rhs = MaxFilter.new(window_size, send_every, send_first_at)
|
||||
return cg.Pvariable(filter_id, rhs, MaxFilter)
|
||||
|
||||
|
||||
SLIDING_AVERAGE_SCHEMA = cv.All(
|
||||
@@ -508,7 +510,7 @@ SLIDING_AVERAGE_SCHEMA = cv.All(
|
||||
|
||||
@FILTER_REGISTRY.register(
|
||||
"sliding_window_moving_average",
|
||||
SlidingWindowMovingAverageFilter,
|
||||
Filter,
|
||||
SLIDING_AVERAGE_SCHEMA,
|
||||
)
|
||||
async def sliding_window_moving_average_filter_to_code(config, filter_id):
|
||||
@@ -518,9 +520,10 @@ async def sliding_window_moving_average_filter_to_code(config, filter_id):
|
||||
|
||||
# Optimization: Use streaming filter for batch windows (window_size == send_every)
|
||||
if window_size == send_every:
|
||||
rhs = cg.new_Pvariable(StreamingMovingAverageFilter, window_size, send_first_at)
|
||||
return cg.Pvariable(filter_id, rhs)
|
||||
return cg.new_Pvariable(filter_id, window_size, send_every, send_first_at)
|
||||
rhs = StreamingMovingAverageFilter.new(window_size, send_first_at)
|
||||
return cg.Pvariable(filter_id, rhs, StreamingMovingAverageFilter)
|
||||
rhs = SlidingWindowMovingAverageFilter.new(window_size, send_every, send_first_at)
|
||||
return cg.Pvariable(filter_id, rhs, SlidingWindowMovingAverageFilter)
|
||||
|
||||
|
||||
EXPONENTIAL_AVERAGE_SCHEMA = cv.All(
|
||||
|
Reference in New Issue
Block a user