mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Implement send_first_at for exponential_moving_average (#3240)
This commit is contained in:
		| @@ -408,18 +408,30 @@ async def sliding_window_moving_average_filter_to_code(config, filter_id): | |||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @FILTER_REGISTRY.register( | EXPONENTIAL_AVERAGE_SCHEMA = cv.All( | ||||||
|     "exponential_moving_average", |  | ||||||
|     ExponentialMovingAverageFilter, |  | ||||||
|     cv.Schema( |     cv.Schema( | ||||||
|         { |         { | ||||||
|             cv.Optional(CONF_ALPHA, default=0.1): cv.positive_float, |             cv.Optional(CONF_ALPHA, default=0.1): cv.positive_float, | ||||||
|             cv.Optional(CONF_SEND_EVERY, default=15): cv.positive_not_null_int, |             cv.Optional(CONF_SEND_EVERY, default=15): 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( | ||||||
|  |     "exponential_moving_average", | ||||||
|  |     ExponentialMovingAverageFilter, | ||||||
|  |     EXPONENTIAL_AVERAGE_SCHEMA, | ||||||
| ) | ) | ||||||
| async def exponential_moving_average_filter_to_code(config, filter_id): | async def exponential_moving_average_filter_to_code(config, filter_id): | ||||||
|     return cg.new_Pvariable(filter_id, config[CONF_ALPHA], config[CONF_SEND_EVERY]) |     return cg.new_Pvariable( | ||||||
|  |         filter_id, | ||||||
|  |         config[CONF_ALPHA], | ||||||
|  |         config[CONF_SEND_EVERY], | ||||||
|  |         config[CONF_SEND_FIRST_AT], | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @FILTER_REGISTRY.register( | @FILTER_REGISTRY.register( | ||||||
|   | |||||||
| @@ -200,8 +200,8 @@ optional<float> SlidingWindowMovingAverageFilter::new_value(float value) { | |||||||
| } | } | ||||||
|  |  | ||||||
| // ExponentialMovingAverageFilter | // ExponentialMovingAverageFilter | ||||||
| ExponentialMovingAverageFilter::ExponentialMovingAverageFilter(float alpha, size_t send_every) | ExponentialMovingAverageFilter::ExponentialMovingAverageFilter(float alpha, size_t send_every, size_t send_first_at) | ||||||
|     : send_every_(send_every), send_at_(send_every - 1), alpha_(alpha) {} |     : send_every_(send_every), send_at_(send_every - send_first_at), alpha_(alpha) {} | ||||||
| optional<float> ExponentialMovingAverageFilter::new_value(float value) { | optional<float> ExponentialMovingAverageFilter::new_value(float value) { | ||||||
|   if (!std::isnan(value)) { |   if (!std::isnan(value)) { | ||||||
|     if (this->first_value_) { |     if (this->first_value_) { | ||||||
|   | |||||||
| @@ -194,7 +194,7 @@ class SlidingWindowMovingAverageFilter : public Filter { | |||||||
|  */ |  */ | ||||||
| class ExponentialMovingAverageFilter : public Filter { | class ExponentialMovingAverageFilter : public Filter { | ||||||
|  public: |  public: | ||||||
|   ExponentialMovingAverageFilter(float alpha, size_t send_every); |   ExponentialMovingAverageFilter(float alpha, size_t send_every, size_t send_first_at); | ||||||
|  |  | ||||||
|   optional<float> new_value(float value) override; |   optional<float> new_value(float value) override; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -358,6 +358,7 @@ sensor: | |||||||
|       - exponential_moving_average: |       - exponential_moving_average: | ||||||
|           alpha: 0.1 |           alpha: 0.1 | ||||||
|           send_every: 15 |           send_every: 15 | ||||||
|  |           send_first_at: 15 | ||||||
|       - throttle_average: 60s |       - throttle_average: 60s | ||||||
|       - throttle: 1s |       - throttle: 1s | ||||||
|       - heartbeat: 5s |       - heartbeat: 5s | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user