mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	add value option to timeout filter (#5222)
Co-authored-by: Samuel Sieb <samuel@sieb.net>
This commit is contained in:
		| @@ -23,6 +23,7 @@ from esphome.const import ( | |||||||
|     CONF_SEND_EVERY, |     CONF_SEND_EVERY, | ||||||
|     CONF_SEND_FIRST_AT, |     CONF_SEND_FIRST_AT, | ||||||
|     CONF_STATE_CLASS, |     CONF_STATE_CLASS, | ||||||
|  |     CONF_TIMEOUT, | ||||||
|     CONF_TO, |     CONF_TO, | ||||||
|     CONF_TRIGGER_ID, |     CONF_TRIGGER_ID, | ||||||
|     CONF_TYPE, |     CONF_TYPE, | ||||||
| @@ -543,11 +544,18 @@ async def heartbeat_filter_to_code(config, filter_id): | |||||||
|     return var |     return var | ||||||
|  |  | ||||||
|  |  | ||||||
| @FILTER_REGISTRY.register( | TIMEOUT_SCHEMA = cv.maybe_simple_value( | ||||||
|     "timeout", TimeoutFilter, cv.positive_time_period_milliseconds |     { | ||||||
|  |         cv.Required(CONF_TIMEOUT): cv.positive_time_period_milliseconds, | ||||||
|  |         cv.Optional(CONF_VALUE, default="nan"): cv.float_, | ||||||
|  |     }, | ||||||
|  |     key=CONF_TIMEOUT, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @FILTER_REGISTRY.register("timeout", TimeoutFilter, TIMEOUT_SCHEMA) | ||||||
| async def timeout_filter_to_code(config, filter_id): | async def timeout_filter_to_code(config, filter_id): | ||||||
|     var = cg.new_Pvariable(filter_id, config) |     var = cg.new_Pvariable(filter_id, config[CONF_TIMEOUT], config[CONF_VALUE]) | ||||||
|     await cg.register_component(var, {}) |     await cg.register_component(var, {}) | ||||||
|     return var |     return var | ||||||
|  |  | ||||||
|   | |||||||
| @@ -375,13 +375,13 @@ void OrFilter::initialize(Sensor *parent, Filter *next) { | |||||||
|  |  | ||||||
| // TimeoutFilter | // TimeoutFilter | ||||||
| optional<float> TimeoutFilter::new_value(float value) { | optional<float> TimeoutFilter::new_value(float value) { | ||||||
|   this->set_timeout("timeout", this->time_period_, [this]() { this->output(NAN); }); |   this->set_timeout("timeout", this->time_period_, [this]() { this->output(this->value_); }); | ||||||
|   this->output(value); |   this->output(value); | ||||||
|  |  | ||||||
|   return {}; |   return {}; | ||||||
| } | } | ||||||
|  |  | ||||||
| TimeoutFilter::TimeoutFilter(uint32_t time_period) : time_period_(time_period) {} | TimeoutFilter::TimeoutFilter(uint32_t time_period, float new_value) : time_period_(time_period), value_(new_value) {} | ||||||
| float TimeoutFilter::get_setup_priority() const { return setup_priority::HARDWARE; } | float TimeoutFilter::get_setup_priority() const { return setup_priority::HARDWARE; } | ||||||
|  |  | ||||||
| // DebounceFilter | // DebounceFilter | ||||||
|   | |||||||
| @@ -315,7 +315,8 @@ class ThrottleFilter : public Filter { | |||||||
|  |  | ||||||
| class TimeoutFilter : public Filter, public Component { | class TimeoutFilter : public Filter, public Component { | ||||||
|  public: |  public: | ||||||
|   explicit TimeoutFilter(uint32_t time_period); |   explicit TimeoutFilter(uint32_t time_period, float new_value); | ||||||
|  |   void set_value(float new_value) { this->value_ = new_value; } | ||||||
|  |  | ||||||
|   optional<float> new_value(float value) override; |   optional<float> new_value(float value) override; | ||||||
|  |  | ||||||
| @@ -323,6 +324,7 @@ class TimeoutFilter : public Filter, public Component { | |||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   uint32_t time_period_; |   uint32_t time_period_; | ||||||
|  |   float value_; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| class DebounceFilter : public Filter, public Component { | class DebounceFilter : public Filter, public Component { | ||||||
|   | |||||||
| @@ -87,6 +87,9 @@ sensor: | |||||||
|       - throttle: 100ms |       - throttle: 100ms | ||||||
|       - debounce: 500s |       - debounce: 500s | ||||||
|       - timeout: 10min |       - timeout: 10min | ||||||
|  |       - timeout: | ||||||
|  |           timeout: 10min | ||||||
|  |           value: 0 | ||||||
|       - calibrate_linear: |       - calibrate_linear: | ||||||
|           method: exact |           method: exact | ||||||
|           datapoints: |           datapoints: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user