ESPHome 2026.3.0-dev
Loading...
Searching...
No Matches
filter.h
Go to the documentation of this file.
1#pragma once
2
4#ifdef USE_BINARY_SENSOR_FILTER
5
9
10namespace esphome::binary_sensor {
11
12class BinarySensor;
13
14class Filter {
15 public:
16 virtual optional<bool> new_value(bool value) = 0;
17
18 virtual void input(bool value);
19
20 void output(bool value);
21
22 protected:
24
25 Filter *next_{nullptr};
28};
29
30class TimeoutFilter : public Filter, public Component {
31 public:
32 optional<bool> new_value(bool value) override { return value; }
33 void input(bool value) override;
34 template<typename T> void set_timeout_value(T timeout) { this->timeout_delay_ = timeout; }
35
36 protected:
38};
39
40class DelayedOnOffFilter : public Filter, public Component {
41 public:
42 optional<bool> new_value(bool value) override;
43
44 float get_setup_priority() const override;
45
46 template<typename T> void set_on_delay(T delay) { this->on_delay_ = delay; }
47 template<typename T> void set_off_delay(T delay) { this->off_delay_ = delay; }
48
49 protected:
52};
53
54class DelayedOnFilter : public Filter, public Component {
55 public:
56 optional<bool> new_value(bool value) override;
57
58 float get_setup_priority() const override;
59
60 template<typename T> void set_delay(T delay) { this->delay_ = delay; }
61
62 protected:
64};
65
66class DelayedOffFilter : public Filter, public Component {
67 public:
68 optional<bool> new_value(bool value) override;
69
70 float get_setup_priority() const override;
71
72 template<typename T> void set_delay(T delay) { this->delay_ = delay; }
73
74 protected:
76};
77
78class InvertFilter : public Filter {
79 public:
80 optional<bool> new_value(bool value) override;
81};
82
84 uint32_t delay;
85 uint32_t time_off;
86 uint32_t time_on;
87};
88
89class AutorepeatFilter : public Filter, public Component {
90 public:
91 explicit AutorepeatFilter(std::initializer_list<AutorepeatFilterTiming> timings);
92
93 optional<bool> new_value(bool value) override;
94
95 float get_setup_priority() const override;
96
97 protected:
98 void next_timing_();
99 void next_value_(bool val);
100
102 uint8_t active_timing_{0};
103};
104
105class LambdaFilter : public Filter {
106 public:
107 explicit LambdaFilter(std::function<optional<bool>(bool)> f);
108
109 optional<bool> new_value(bool value) override;
110
111 protected:
112 std::function<optional<bool>(bool)> f_;
113};
114
121 public:
122 explicit StatelessLambdaFilter(optional<bool> (*f)(bool)) : f_(f) {}
123
124 optional<bool> new_value(bool value) override { return this->f_(value); }
125
126 protected:
127 optional<bool> (*f_)(bool);
128};
129
130class SettleFilter : public Filter, public Component {
131 public:
132 optional<bool> new_value(bool value) override;
133
134 float get_setup_priority() const override;
135
136 template<typename T> void set_delay(T delay) { this->delay_ = delay; }
137
138 protected:
140 bool steady_{true};
141};
142
143} // namespace esphome::binary_sensor
144
145#endif // USE_BINARY_SENSOR_FILTER
Helper class to deduplicate items in a series of values.
Definition helpers.h:1590
Fixed-capacity vector - allocates once at runtime, never reallocates This avoids std::vector template...
Definition helpers.h:299
float get_setup_priority() const override
Definition filter.cpp:124
AutorepeatFilter(std::initializer_list< AutorepeatFilterTiming > timings)
Definition filter.cpp:79
FixedVector< AutorepeatFilterTiming > timings_
Definition filter.h:101
optional< bool > new_value(bool value) override
Definition filter.cpp:81
Base class for all binary_sensor-type classes.
float get_setup_priority() const override
Definition filter.cpp:75
optional< bool > new_value(bool value) override
Definition filter.cpp:65
TemplatableValue< uint32_t > delay_
Definition filter.h:75
optional< bool > new_value(bool value) override
Definition filter.cpp:53
TemplatableValue< uint32_t > delay_
Definition filter.h:63
float get_setup_priority() const override
Definition filter.cpp:63
TemplatableValue< uint32_t > on_delay_
Definition filter.h:50
float get_setup_priority() const override
Definition filter.cpp:51
optional< bool > new_value(bool value) override
Definition filter.cpp:42
TemplatableValue< uint32_t > off_delay_
Definition filter.h:51
virtual void input(bool value)
Definition filter.cpp:27
virtual optional< bool > new_value(bool value)=0
Deduplicator< bool > dedup_
Definition filter.h:27
void output(bool value)
Definition filter.cpp:20
optional< bool > new_value(bool value) override
Definition filter.cpp:77
LambdaFilter(std::function< optional< bool >(bool)> f)
Definition filter.cpp:126
std::function< optional< bool >(bool)> f_
Definition filter.h:112
optional< bool > new_value(bool value) override
Definition filter.cpp:128
float get_setup_priority() const override
Definition filter.cpp:145
TemplatableValue< uint32_t > delay_
Definition filter.h:139
optional< bool > new_value(bool value) override
Definition filter.cpp:130
Optimized lambda filter for stateless lambdas (no capture).
Definition filter.h:120
StatelessLambdaFilter(optional< bool >(*f)(bool))
Definition filter.h:122
optional< bool > new_value(bool value) override
Definition filter.h:124
void input(bool value) override
Definition filter.cpp:36
TemplatableValue< uint32_t > timeout_delay_
Definition filter.h:37
optional< bool > new_value(bool value) override
Definition filter.h:32
mopeka_std_values val[4]
void HOT delay(uint32_t ms)
Definition core.cpp:27