ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
sen5x.h
Go to the documentation of this file.
1#pragma once
2
8
9namespace esphome::sen5x {
10
16
17enum class Sen5xType : uint8_t { SEN50, SEN54, SEN55, UNKNOWN };
18
27
33
34// Shortest time interval of 2H (in milliseconds) for storing baseline values.
35// Prevents wear of the flash because of too many write operations
36static const uint32_t SHORTEST_BASELINE_STORE_INTERVAL = 2 * 60 * 60 * 1000;
37
39 public:
40 void setup() override;
41 void dump_config() override;
42 void update() override;
43
44 void set_pm_1_0_sensor(sensor::Sensor *pm_1_0) { this->pm_1_0_sensor_ = pm_1_0; }
45 void set_pm_2_5_sensor(sensor::Sensor *pm_2_5) { this->pm_2_5_sensor_ = pm_2_5; }
46 void set_pm_4_0_sensor(sensor::Sensor *pm_4_0) { this->pm_4_0_sensor_ = pm_4_0; }
47 void set_pm_10_0_sensor(sensor::Sensor *pm_10_0) { this->pm_10_0_sensor_ = pm_10_0; }
48
49 void set_voc_sensor(sensor::Sensor *voc_sensor) { this->voc_sensor_ = voc_sensor; }
50 void set_nox_sensor(sensor::Sensor *nox_sensor) { this->nox_sensor_ = nox_sensor; }
51 void set_humidity_sensor(sensor::Sensor *humidity_sensor) { this->humidity_sensor_ = humidity_sensor; }
52 void set_temperature_sensor(sensor::Sensor *temperature_sensor) { this->temperature_sensor_ = temperature_sensor; }
53 void set_store_baseline(bool store_baseline) { this->store_baseline_ = store_baseline; }
55 void set_auto_cleaning_interval(uint32_t auto_cleaning_interval) {
56 this->auto_cleaning_interval_ = auto_cleaning_interval;
57 }
58 void set_voc_algorithm_tuning(uint16_t index_offset, uint16_t learning_time_offset_hours,
59 uint16_t learning_time_gain_hours, uint16_t gating_max_duration_minutes,
60 uint16_t std_initial, uint16_t gain_factor) {
61 GasTuning tuning_params;
62 tuning_params.index_offset = index_offset;
63 tuning_params.learning_time_offset_hours = learning_time_offset_hours;
64 tuning_params.learning_time_gain_hours = learning_time_gain_hours;
65 tuning_params.gating_max_duration_minutes = gating_max_duration_minutes;
66 tuning_params.std_initial = std_initial;
67 tuning_params.gain_factor = gain_factor;
68 this->voc_tuning_params_ = tuning_params;
69 }
70 void set_nox_algorithm_tuning(uint16_t index_offset, uint16_t learning_time_offset_hours,
71 uint16_t learning_time_gain_hours, uint16_t gating_max_duration_minutes,
72 uint16_t gain_factor) {
73 GasTuning tuning_params;
74 tuning_params.index_offset = index_offset;
75 tuning_params.learning_time_offset_hours = learning_time_offset_hours;
76 tuning_params.learning_time_gain_hours = learning_time_gain_hours;
77 tuning_params.gating_max_duration_minutes = gating_max_duration_minutes;
78 tuning_params.std_initial = 50;
79 tuning_params.gain_factor = gain_factor;
80 this->nox_tuning_params_ = tuning_params;
81 }
82 void set_temperature_compensation(float offset, float normalized_offset_slope, uint16_t time_constant) {
84 temp_comp.offset = offset * 200;
85 temp_comp.normalized_offset_slope = normalized_offset_slope * 10000;
86 temp_comp.time_constant = time_constant;
87 this->temperature_compensation_ = temp_comp;
88 }
89 void set_model(Sen5xType model) { this->model_override_ = model; }
90 bool start_fan_cleaning();
91
92 protected:
93 bool write_tuning_parameters_(uint16_t i2c_command, const GasTuning &tuning);
95
96 char serial_number_[17] = "UNKNOWN";
97 uint16_t voc_baseline_state_[4]{0};
99 uint16_t firmware_version_{0};
101 bool initialized_{false};
102 bool store_baseline_{false};
103
108 // SEN54 and SEN55 only
112 // SEN55 only
114
115 optional<RhtAccelerationMode> acceleration_mode_;
116 optional<uint32_t> auto_cleaning_interval_;
117 optional<GasTuning> voc_tuning_params_;
118 optional<GasTuning> nox_tuning_params_;
119 optional<TemperatureCompensation> temperature_compensation_;
120 optional<Sen5xType> model_override_;
122};
123
124} // namespace esphome::sen5x
BedjetMode mode
BedJet operating mode.
This class simplifies creating components that periodically check a state.
Definition component.h:519
optional< RhtAccelerationMode > acceleration_mode_
Definition sen5x.h:115
void set_pm_1_0_sensor(sensor::Sensor *pm_1_0)
Definition sen5x.h:44
void set_humidity_sensor(sensor::Sensor *humidity_sensor)
Definition sen5x.h:51
void set_temperature_compensation(float offset, float normalized_offset_slope, uint16_t time_constant)
Definition sen5x.h:82
void set_pm_10_0_sensor(sensor::Sensor *pm_10_0)
Definition sen5x.h:47
void set_model(Sen5xType model)
Definition sen5x.h:89
sensor::Sensor * pm_4_0_sensor_
Definition sen5x.h:106
void set_temperature_sensor(sensor::Sensor *temperature_sensor)
Definition sen5x.h:52
void dump_config() override
Definition sen5x.cpp:226
void set_acceleration_mode(RhtAccelerationMode mode)
Definition sen5x.h:54
void set_auto_cleaning_interval(uint32_t auto_cleaning_interval)
Definition sen5x.h:55
ESPPreferenceObject pref_
Definition sen5x.h:121
bool write_tuning_parameters_(uint16_t i2c_command, const GasTuning &tuning)
Definition sen5x.cpp:361
void set_nox_sensor(sensor::Sensor *nox_sensor)
Definition sen5x.h:50
optional< Sen5xType > model_override_
Definition sen5x.h:120
sensor::Sensor * pm_2_5_sensor_
Definition sen5x.h:105
sensor::Sensor * temperature_sensor_
Definition sen5x.h:109
optional< uint32_t > auto_cleaning_interval_
Definition sen5x.h:116
void set_store_baseline(bool store_baseline)
Definition sen5x.h:53
sensor::Sensor * pm_1_0_sensor_
Definition sen5x.h:104
sensor::Sensor * voc_sensor_
Definition sen5x.h:111
optional< TemperatureCompensation > temperature_compensation_
Definition sen5x.h:119
void set_voc_sensor(sensor::Sensor *voc_sensor)
Definition sen5x.h:49
sensor::Sensor * nox_sensor_
Definition sen5x.h:113
optional< GasTuning > voc_tuning_params_
Definition sen5x.h:117
sensor::Sensor * pm_10_0_sensor_
Definition sen5x.h:107
sensor::Sensor * humidity_sensor_
Definition sen5x.h:110
void set_pm_4_0_sensor(sensor::Sensor *pm_4_0)
Definition sen5x.h:46
void set_voc_algorithm_tuning(uint16_t index_offset, uint16_t learning_time_offset_hours, uint16_t learning_time_gain_hours, uint16_t gating_max_duration_minutes, uint16_t std_initial, uint16_t gain_factor)
Definition sen5x.h:58
bool write_temperature_compensation_(const TemperatureCompensation &compensation)
Definition sen5x.cpp:376
optional< GasTuning > nox_tuning_params_
Definition sen5x.h:118
void set_pm_2_5_sensor(sensor::Sensor *pm_2_5)
Definition sen5x.h:45
void set_nox_algorithm_tuning(uint16_t index_offset, uint16_t learning_time_offset_hours, uint16_t learning_time_gain_hours, uint16_t gating_max_duration_minutes, uint16_t gain_factor)
Definition sen5x.h:70
uint16_t voc_baseline_state_[4]
Definition sen5x.h:97
Base-class for all sensors.
Definition sensor.h:47
RhtAccelerationMode
Definition sen5x.h:11
@ LOW_ACCELERATION
Definition sen5x.h:12
@ HIGH_ACCELERATION
Definition sen5x.h:14
@ MEDIUM_ACCELERATION
Definition sen5x.h:13
static void uint32_t
uint16_t learning_time_gain_hours
Definition sen5x.h:22
uint16_t gating_max_duration_minutes
Definition sen5x.h:23
uint16_t learning_time_offset_hours
Definition sen5x.h:21