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