ESPHome 2026.2.1
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 {
23namespace bme68x_bsec2 {
24
30
35
41
46
48 public:
49 void setup() override;
50 void dump_config() override;
51 void loop() override;
52
53 void set_algorithm_output(AlgorithmOutput algorithm_output) { this->algorithm_output_ = algorithm_output; }
54 void set_operating_age(OperatingAge operating_age) { this->operating_age_ = operating_age; }
55 void set_temperature_offset(float offset) { this->temperature_offset_ = offset; }
56 void set_voltage(Voltage voltage) { this->voltage_ = voltage; }
57
58 void set_sample_rate(SampleRate sample_rate) { this->sample_rate_ = sample_rate; }
59 void set_temperature_sample_rate(SampleRate sample_rate) { this->temperature_sample_rate_ = sample_rate; }
60 void set_pressure_sample_rate(SampleRate sample_rate) { this->pressure_sample_rate_ = sample_rate; }
61 void set_humidity_sample_rate(SampleRate sample_rate) { this->humidity_sample_rate_ = sample_rate; }
62
63 void set_bsec2_configuration(const uint8_t *data, const uint32_t len) {
64 this->bsec2_configuration_ = data;
66 }
67
68 void set_state_save_interval(uint32_t interval) { this->state_save_interval_ms_ = interval; }
69
70#ifdef USE_SENSOR
72 void set_pressure_sensor(sensor::Sensor *sensor) { this->pressure_sensor_ = sensor; }
73 void set_humidity_sensor(sensor::Sensor *sensor) { this->humidity_sensor_ = sensor; }
75 void set_iaq_sensor(sensor::Sensor *sensor) { this->iaq_sensor_ = sensor; }
80#endif
81#ifdef USE_TEXT_SENSOR
83#endif
84 virtual uint32_t get_hash() = 0;
85
86 protected:
87 void set_config_(const uint8_t *config, u_int32_t len);
88 float calc_sensor_sample_rate_(SampleRate sample_rate);
90
91 void run_();
92 void read_(int64_t trigger_time_ns);
93 void publish_(const bsec_output_t *outputs, uint8_t num_outputs);
94 int64_t get_time_ns_();
95
96#ifdef USE_SENSOR
97 void publish_sensor_(sensor::Sensor *sensor, float value, bool change_only = false);
98#endif
99#ifdef USE_TEXT_SENSOR
100 void publish_sensor_(text_sensor::TextSensor *sensor, const std::string &value);
101#endif
102
103 void load_state_();
104 void save_state_(uint8_t accuracy);
105
106 void queue_push_(std::function<void()> &&f) { this->queue_.push(std::move(f)); }
107
108 struct bme68x_dev bme68x_;
109 bsec_bme_settings_t bsec_settings_;
110 bsec_version_t version_;
111 uint8_t bsec_instance_[BSEC_INSTANCE_SIZE];
112
113 struct bme68x_heatr_conf bme68x_heatr_conf_;
114 uint8_t op_mode_; // operating mode of sensor
115 bsec_library_return_t bsec_status_{BSEC_OK};
116 int8_t bme68x_status_{BME68X_OK};
117
118 int64_t last_time_ms_{0};
120
121 std::queue<std::function<void()>> queue_;
122
123 uint8_t const *bsec2_configuration_{nullptr};
126
128 uint32_t state_save_interval_ms_{21600000}; // 6 hours - 4 times a day
130
132
136
137 SampleRate sample_rate_{SAMPLE_RATE_LP}; // Core/gas sample rate
141
142#ifdef USE_SENSOR
152#endif
153#ifdef USE_TEXT_SENSOR
155#endif
156};
157
158} // namespace bme68x_bsec2
159} // namespace esphome
160#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:373
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:43
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string size_t len
Definition helpers.h:692