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