mirror of
https://github.com/esphome/esphome.git
synced 2025-03-19 06:55:16 +01:00
add value option to timeout filter (#5222)
Co-authored-by: Samuel Sieb <samuel@sieb.net>
This commit is contained in:
parent
f457269a68
commit
b56c606523
4 changed files with 19 additions and 6 deletions
|
@ -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:
|
||||||
|
|
Loading…
Add table
Reference in a new issue