ESPHome 2026.10.0-dev
Loading...
Searching...
No Matches
sen6x.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace esphome::sen6x {
9
10// The NOx algorithm requires std_initial to stay at 50 (Sensirion datasheet)
11static constexpr uint16_t NOX_STD_INITIAL = 50;
12
13// Raw parameter block for the VOC/NOx algorithm tuning commands
22
24 SUB_SENSOR(pm_1_0)
25 SUB_SENSOR(pm_2_5)
26 SUB_SENSOR(pm_4_0)
27 SUB_SENSOR(pm_10_0)
28 SUB_SENSOR(temperature)
29 SUB_SENSOR(humidity)
30 SUB_SENSOR(voc)
31 SUB_SENSOR(nox)
32 SUB_SENSOR(co2)
33 SUB_SENSOR(hcho)
34
35 public:
36 float get_setup_priority() const override { return setup_priority::DATA; }
37 void setup() override;
38 void dump_config() override;
39 void update() override;
40
41 enum Sen6xType { SEN62, SEN63C, SEN65, SEN66, SEN68, SEN69C, UNKNOWN };
42
43 void set_type(const std::string &type) { sen6x_type_ = infer_type_from_product_name_(type); }
44 void set_voc_algorithm_tuning(uint16_t index_offset, uint16_t learning_time_offset_hours,
45 uint16_t learning_time_gain_hours, uint16_t gating_max_duration_minutes,
46 uint16_t std_initial, uint16_t gain_factor) {
48 index_offset, learning_time_offset_hours, learning_time_gain_hours, gating_max_duration_minutes, std_initial,
49 gain_factor};
50 }
51 void set_nox_algorithm_tuning(uint16_t index_offset, uint16_t learning_time_offset_hours,
52 uint16_t learning_time_gain_hours, uint16_t gating_max_duration_minutes,
53 uint16_t gain_factor) {
54 this->nox_tuning_params_ = GasTuning{index_offset,
55 learning_time_offset_hours,
56 learning_time_gain_hours,
57 gating_max_duration_minutes,
58 NOX_STD_INITIAL,
59 gain_factor};
60 }
61
62 protected:
63 Sen6xType infer_type_from_product_name_(const std::string &product_name);
65 void finish_setup_();
66 bool write_config_words_(uint16_t i2c_command, const uint16_t *data, uint8_t len);
67 bool write_tuning_parameters_(uint16_t i2c_command, const GasTuning &tuning);
68 void poll_data_ready_();
69 void read_measurements_();
71
72 std::string product_name_;
73 std::string serial_number_;
74 optional<GasTuning> voc_tuning_params_;
75 optional<GasTuning> nox_tuning_params_;
76 Sen6xType sen6x_type_{UNKNOWN};
77 uint16_t read_cmd_{0};
82 uint8_t read_words_{0};
83 bool initialized_{false};
84 bool startup_complete_{false};
85};
86
87} // namespace esphome::sen6x
virtual float get_setup_priority() const
priority of setup().
Definition component.cpp:82
virtual void setup()
Where the component's initialization should happen.
Definition component.cpp:84
This class simplifies creating components that periodically check a state.
Definition component.h:510
optional< GasTuning > voc_tuning_params_
Definition sen6x.h:74
Sen6xType infer_type_from_product_name_(const std::string &product_name)
Definition sen6x.cpp:445
bool write_config_words_(uint16_t i2c_command, const uint16_t *data, uint8_t len)
Definition sen6x.cpp:201
optional< GasTuning > nox_tuning_params_
Definition sen6x.h:75
bool write_tuning_parameters_(uint16_t i2c_command, const GasTuning &tuning)
Definition sen6x.cpp:210
uint16_t type
constexpr float DATA
For components that import data from directly connected sensors like DHT.
Definition component.h:45
const void size_t len
Definition hal.h:64
uint16_t learning_time_gain_hours
Definition sen6x.h:17
uint16_t learning_time_offset_hours
Definition sen6x.h:16
uint16_t gating_max_duration_minutes
Definition sen6x.h:18
uint16_t temperature
Definition sun_gtil2.cpp:12