ESPHome 2026.4.0
Loading...
Searching...
No Matches
bme68x_bsec2.h
Go to the documentation of this file.
1#pragma once
2
6
7#ifdef USE_BSEC2
8
9#ifdef USE_SENSOR
11#endif
12
13#ifdef USE_TEXT_SENSOR
15#endif
16
17#include <cinttypes>
18#include <queue>
19
20#include <bsec2.h>
21
22namespace esphome::bme68x_bsec2 {
23
29
34
40
45
47 public:
48 void setup() override;
49 void dump_config() override;
50 void loop() override;
51
52 void set_algorithm_output(AlgorithmOutput algorithm_output) { this->algorithm_output_ = algorithm_output; }
53 void set_operating_age(OperatingAge operating_age) { this->operating_age_ = operating_age; }
54 void set_temperature_offset(float offset) { this->temperature_offset_ = offset; }
55 void set_voltage(Voltage voltage) { this->voltage_ = voltage; }
56
57 void set_sample_rate(SampleRate sample_rate) { this->sample_rate_ = sample_rate; }
58 void set_temperature_sample_rate(SampleRate sample_rate) { this->temperature_sample_rate_ = sample_rate; }
59 void set_pressure_sample_rate(SampleRate sample_rate) { this->pressure_sample_rate_ = sample_rate; }
60 void set_humidity_sample_rate(SampleRate sample_rate) { this->humidity_sample_rate_ = sample_rate; }
61
62 void set_bsec2_configuration(const uint8_t *data, const uint32_t len) {
63 this->bsec2_configuration_ = data;
65 }
66
67 void set_state_save_interval(uint32_t interval) { this->state_save_interval_ms_ = interval; }
68
69#ifdef USE_SENSOR
71 void set_pressure_sensor(sensor::Sensor *sensor) { this->pressure_sensor_ = sensor; }
72 void set_humidity_sensor(sensor::Sensor *sensor) { this->humidity_sensor_ = sensor; }
74 void set_iaq_sensor(sensor::Sensor *sensor) { this->iaq_sensor_ = sensor; }
79#endif
80#ifdef USE_TEXT_SENSOR
82#endif
83 virtual uint32_t get_hash() = 0;
84
85 protected:
86 void set_config_(const uint8_t *config, u_int32_t len);
87 float calc_sensor_sample_rate_(SampleRate sample_rate);
89
90 void run_();
91 void read_(int64_t trigger_time_ns);
92 void publish_(const bsec_output_t *outputs, uint8_t num_outputs);
93 int64_t get_time_ns_();
94
95#ifdef USE_SENSOR
96 void publish_sensor_(sensor::Sensor *sensor, float value, bool change_only = false);
97#endif
98#ifdef USE_TEXT_SENSOR
99 void publish_sensor_(text_sensor::TextSensor *sensor, const char *value);
100#endif
101
102 void load_state_();
103 void save_state_(uint8_t accuracy);
104
105 void queue_push_(std::function<void()> &&f) { this->queue_.push(std::move(f)); }
106
107 struct bme68x_dev bme68x_;
108 bsec_bme_settings_t bsec_settings_;
109 bsec_version_t version_;
110 struct bme68x_heatr_conf bme68x_heatr_conf_;
111
112 std::queue<std::function<void()>> queue_;
114
115 uint8_t const *bsec2_configuration_{nullptr};
116#ifdef USE_SENSOR
126#endif
127#ifdef USE_TEXT_SENSOR
129#endif
130
131 int64_t last_time_ms_{0};
132 int64_t trigger_time_ns_{0}; // Stored for set_timeout lambda to help avoid heap allocation on supported 32-bit
133 // toolchains with small std::function SBO
134
135 uint32_t state_save_interval_ms_{21600000}; // 6 hours - 4 times a day
139 bsec_library_return_t bsec_status_{BSEC_OK};
140
142
146 SampleRate sample_rate_{SAMPLE_RATE_LP}; // Core/gas sample rate
150
151 uint8_t bsec_instance_[BSEC_INSTANCE_SIZE];
152 uint8_t op_mode_; // operating mode of sensor
153 int8_t bme68x_status_{BME68X_OK};
155};
156
157} // namespace esphome::bme68x_bsec2
158#endif
ESPDEPRECATED("set_retry is deprecated and will be removed in 2026.8.0. Use set_timeout or set_interval instead.", "2026.2.0") void set_retry(const std uint32_t uint8_t std::function< RetryResult(uint8_t)> && f
Definition component.h:441
void publish_(const bsec_output_t *outputs, uint8_t num_outputs)
void publish_sensor_(sensor::Sensor *sensor, float value, bool change_only=false)
void set_algorithm_output(AlgorithmOutput algorithm_output)
void set_breath_voc_equivalent_sensor(sensor::Sensor *sensor)
void set_bsec2_configuration(const uint8_t *data, const uint32_t len)
void set_iaq_static_sensor(sensor::Sensor *sensor)
void set_co2_equivalent_sensor(sensor::Sensor *sensor)
text_sensor::TextSensor * iaq_accuracy_text_sensor_
void set_iaq_accuracy_sensor(sensor::Sensor *sensor)
struct bme68x_heatr_conf bme68x_heatr_conf_
void set_pressure_sensor(sensor::Sensor *sensor)
void set_temperature_sensor(sensor::Sensor *sensor)
void set_sample_rate(SampleRate sample_rate)
uint8_t bsec_instance_[BSEC_INSTANCE_SIZE]
void set_pressure_sample_rate(SampleRate sample_rate)
void set_config_(const uint8_t *config, u_int32_t len)
void set_iaq_accuracy_text_sensor(text_sensor::TextSensor *sensor)
void set_state_save_interval(uint32_t interval)
void set_temperature_sample_rate(SampleRate sample_rate)
float calc_sensor_sample_rate_(SampleRate sample_rate)
void set_humidity_sample_rate(SampleRate sample_rate)
void set_gas_resistance_sensor(sensor::Sensor *sensor)
std::queue< std::function< void()> > queue_
void set_operating_age(OperatingAge operating_age)
void set_iaq_sensor(sensor::Sensor *sensor)
void queue_push_(std::function< void()> &&f)
void set_humidity_sensor(sensor::Sensor *sensor)
Base-class for all sensors.
Definition sensor.h:47
std::string size_t len
Definition helpers.h:1045
static void uint32_t