1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-15 01:32:19 +01:00

Implement median filter (#697)

Add median filter to sensors component
This commit is contained in:
Jasper van der Neut - Stulen
2019-08-27 19:39:04 +02:00
committed by Brandon Davidson
parent c5db457700
commit 0fc267dfc7
4 changed files with 86 additions and 0 deletions

View File

@@ -61,6 +61,7 @@ SensorPublishAction = sensor_ns.class_('SensorPublishAction', automation.Action)
# Filters
Filter = sensor_ns.class_('Filter')
MedianFilter = sensor_ns.class_('MedianFilter', Filter)
SlidingWindowMovingAverageFilter = sensor_ns.class_('SlidingWindowMovingAverageFilter', Filter)
ExponentialMovingAverageFilter = sensor_ns.class_('ExponentialMovingAverageFilter', Filter)
LambdaFilter = sensor_ns.class_('LambdaFilter', Filter)
@@ -127,6 +128,19 @@ def filter_out_filter_to_code(config, filter_id):
yield cg.new_Pvariable(filter_id, config)
MEDIAN_SCHEMA = cv.All(cv.Schema({
cv.Optional(CONF_WINDOW_SIZE, default=5): cv.positive_not_null_int,
cv.Optional(CONF_SEND_EVERY, default=5): cv.positive_not_null_int,
cv.Optional(CONF_SEND_FIRST_AT, default=1): cv.positive_not_null_int,
}), validate_send_first_at)
@FILTER_REGISTRY.register('median', MedianFilter, MEDIAN_SCHEMA)
def median_filter_to_code(config, filter_id):
yield cg.new_Pvariable(filter_id, config[CONF_WINDOW_SIZE], config[CONF_SEND_EVERY],
config[CONF_SEND_FIRST_AT])
SLIDING_AVERAGE_SCHEMA = cv.All(cv.Schema({
cv.Optional(CONF_WINDOW_SIZE, default=15): cv.positive_not_null_int,
cv.Optional(CONF_SEND_EVERY, default=15): cv.positive_not_null_int,