ESPHome 2026.5.1
Loading...
Searching...
No Matches
combination.h
Go to the documentation of this file.
1#pragma once
2
6
7#include <functional>
8
9namespace esphome::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 set_source_count(size_t count) { this->sensor_sources_.init(count); }
45 void add_source(Sensor *sensor, std::function<float(float)> const &compute);
46 void add_source(Sensor *sensor, float value);
47
49 void log_source_sensors() override;
50
51 protected:
57
59};
60
62 public:
63 void dump_config() override;
64 void setup() override;
65
66 void set_process_std_dev(float process_std_dev) {
67 this->update_variance_value_ = process_std_dev * process_std_dev * 0.001f;
68 }
69 void set_std_dev_sensor(Sensor *sensor) { this->std_dev_sensor_ = sensor; }
70
71 protected:
72 void update_variance_();
73 void correct_(float value, float stddev);
74
75 // Optional sensor for publishing the current error
77
78 // Tick of the last update
80 // Change of the variance, per ms
82
83 // Best guess for the state and its variance
84 float state_{NAN};
85 float variance_{INFINITY};
86};
87
89 public:
90 void dump_config() override { this->log_config_(LOG_STR("linear")); }
91 void setup() override;
92
93 void handle_new_value(float value);
94};
95
97 public:
98 void dump_config() override { this->log_config_(LOG_STR("max")); }
99
100 void handle_new_value(float value) override;
101};
102
104 public:
105 void dump_config() override { this->log_config_(LOG_STR("mean")); }
106
107 void handle_new_value(float value) override;
108};
109
111 public:
112 void dump_config() override { this->log_config_(LOG_STR("median")); }
113
114 void handle_new_value(float value) override;
115};
116
118 public:
119 void dump_config() override { this->log_config_(LOG_STR("min")); }
120
121 void handle_new_value(float value) override;
122};
123
125 public:
126 void dump_config() override { this->log_config_(LOG_STR("most_recently_updated")); }
127
128 void handle_new_value(float value) override;
129};
130
132 public:
133 void dump_config() override { this->log_config_(LOG_STR("range")); }
134
135 void handle_new_value(float value) override;
136};
137
139 public:
140 void dump_config() override { this->log_config_(LOG_STR("sum")); }
141
142 void handle_new_value(float value) override;
143};
144
145} // namespace esphome::combination
Fixed-capacity vector - allocates once at runtime, never reallocates This avoids std::vector template...
Definition helpers.h:529
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 sensors' names in sensor_sources_.
void add_source(Sensor *sensor, std::function< float(float)> const &compute)
void set_process_std_dev(float process_std_dev)
Definition combination.h:66
void correct_(float value, float stddev)
Base-class for all sensors.
Definition sensor.h:47
static void uint32_t