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