ESPHome 2026.2.1
Loading...
Searching...
No Matches
combination.h
Go to the documentation of this file.
1#pragma once
2
5
6#include <vector>
7
8namespace esphome {
9namespace combination {
10
12 public:
14 virtual void log_source_sensors() = 0;
15
16 protected:
19 void log_config_(const LogString *combo_type);
20};
21
24 public:
26 void setup() override;
27
28 void add_source(Sensor *sensor);
29
32 virtual void handle_new_value(float value) = 0;
33
35 void log_source_sensors() override;
36
37 protected:
38 std::vector<Sensor *> sensors_;
39};
40
41// Base class for opertions that require one parameter to compute the combination
43 public:
44 void add_source(Sensor *sensor, std::function<float(float)> const &stddev);
45 void add_source(Sensor *sensor, float stddev);
46
48 void log_source_sensors() override;
49
50 protected:
51 std::vector<std::pair<Sensor *, std::function<float(float)>>> sensor_pairs_;
52};
53
55 public:
56 void dump_config() override;
57 void setup() override;
58
59 void set_process_std_dev(float process_std_dev) {
60 this->update_variance_value_ = process_std_dev * process_std_dev * 0.001f;
61 }
62 void set_std_dev_sensor(Sensor *sensor) { this->std_dev_sensor_ = sensor; }
63
64 protected:
65 void update_variance_();
66 void correct_(float value, float stddev);
67
68 // Optional sensor for publishing the current error
70
71 // Tick of the last update
72 uint32_t last_update_{0};
73 // Change of the variance, per ms
75
76 // Best guess for the state and its variance
77 float state_{NAN};
78 float variance_{INFINITY};
79};
80
82 public:
83 void dump_config() override { this->log_config_(LOG_STR("linear")); }
84 void setup() override;
85
86 void handle_new_value(float value);
87};
88
90 public:
91 void dump_config() override { this->log_config_(LOG_STR("max")); }
92
93 void handle_new_value(float value) override;
94};
95
97 public:
98 void dump_config() override { this->log_config_(LOG_STR("mean")); }
99
100 void handle_new_value(float value) override;
101};
102
104 public:
105 void dump_config() override { this->log_config_(LOG_STR("median")); }
106
107 void handle_new_value(float value) override;
108};
109
111 public:
112 void dump_config() override { this->log_config_(LOG_STR("min")); }
113
114 void handle_new_value(float value) override;
115};
116
118 public:
119 void dump_config() override { this->log_config_(LOG_STR("most_recently_updated")); }
120
121 void handle_new_value(float value) override;
122};
123
125 public:
126 void dump_config() override { this->log_config_(LOG_STR("range")); }
127
128 void handle_new_value(float value) override;
129};
130
132 public:
133 void dump_config() override { this->log_config_(LOG_STR("sum")); }
134
135 void handle_new_value(float value) override;
136};
137
138} // namespace combination
139} // namespace esphome
void log_config_(const LogString *combo_type)
Logs the sensor for use in dump_config.
virtual void log_source_sensors()=0
Logs all source sensor's names.
Base class for operations that do not require an extra parameter to compute the combination.
Definition combination.h:23
void setup() override
Adds a callback to each source sensor.
virtual void handle_new_value(float value)=0
Computes the combination.
void log_source_sensors() override
Logs all source sensor's names in sensors_.
void log_source_sensors() override
Logs all source sensor's names in sensor_pairs_.
void add_source(Sensor *sensor, std::function< float(float)> const &stddev)
std::vector< std::pair< Sensor *, std::function< float(float)> > > sensor_pairs_
Definition combination.h:51
void set_process_std_dev(float process_std_dev)
Definition combination.h:59
void correct_(float value, float stddev)
Base-class for all sensors.
Definition sensor.h:43
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7