ESPHome 2025.5.0
Loading...
Searching...
No Matches
ltr_als_ps.h
Go to the documentation of this file.
1#pragma once
2
8
9#include "ltr_definitions.h"
10
11namespace esphome {
12namespace ltr_als_ps {
13
14enum DataAvail : uint8_t { NO_DATA, BAD_DATA, DATA_OK };
15
22
24 public:
25 //
26 // EspHome framework functions
27 //
28 float get_setup_priority() const override { return setup_priority::DATA; }
29 void setup() override;
30 void dump_config() override;
31 void update() override;
32 void loop() override;
33
34 // Configuration setters : General
35 //
37
38 // Configuration setters : ALS
39 //
40 void set_als_auto_mode(bool enable) { this->automatic_mode_enabled_ = enable; }
41 void set_als_gain(AlsGain gain) { this->gain_ = gain; }
44 void set_als_glass_attenuation_factor(float factor) { this->glass_attenuation_factor_ = factor; }
45
46 // Configuration setters : PS
47 //
48 void set_ps_high_threshold(uint16_t threshold) { this->ps_threshold_high_ = threshold; }
49 void set_ps_low_threshold(uint16_t threshold) { this->ps_threshold_low_ = threshold; }
50 void set_ps_cooldown_time_s(uint16_t time) { this->ps_cooldown_time_s_ = time; }
51 void set_ps_gain(PsGain gain) { this->ps_gain_ = gain; }
52
53 // Sensors setters
54 //
61
62 protected:
63 //
64 // Internal state machine, used to split all the actions into
65 // small steps in loop() to make sure we are not blocking execution
66 //
78
80
81 //
82 // Current measurements data
83 //
92 uint16_t ps_readings_{0xfffe};
93
94 inline bool is_als_() const {
96 }
97 inline bool is_ps_() const {
99 }
100
101 //
102 // Device interaction and data manipulation
103 //
104 bool check_part_number_();
105
106 void configure_reset_();
107 void configure_als_();
110 DataAvail is_als_data_ready_(AlsReadings &data);
111 void read_sensor_data_(AlsReadings &data);
112 bool are_adjustments_required_(AlsReadings &data);
113 void apply_lux_calculation_(AlsReadings &data);
114 void publish_data_part_1_(AlsReadings &data);
115 void publish_data_part_2_(AlsReadings &data);
116
117 void configure_ps_();
118 uint16_t read_ps_data_();
120
121 //
122 // Component configuration
123 //
129
132 uint16_t ps_threshold_high_{0xffff};
133 uint16_t ps_threshold_low_{0x0000};
134
135 //
136 // Sensors for publishing data
137 //
138 sensor::Sensor *infrared_counts_sensor_{nullptr}; // direct reading CH1, infrared only
139 sensor::Sensor *full_spectrum_counts_sensor_{nullptr}; // direct reading CH0, infrared + visible light
140 sensor::Sensor *ambient_light_sensor_{nullptr}; // calculated lux
141 sensor::Sensor *actual_gain_sensor_{nullptr}; // actual gain of reading
142 sensor::Sensor *actual_integration_time_sensor_{nullptr}; // actual integration time
143 sensor::Sensor *proximity_counts_sensor_{nullptr}; // proximity sensor
144
146 return this->ambient_light_sensor_ != nullptr || this->full_spectrum_counts_sensor_ != nullptr ||
147 this->infrared_counts_sensor_ != nullptr || this->actual_gain_sensor_ != nullptr ||
148 this->actual_integration_time_sensor_ != nullptr;
149 }
150 bool is_any_ps_sensor_enabled_() const { return this->proximity_counts_sensor_ != nullptr; }
151
152 //
153 // Trigger section for the automations
154 //
155 friend class LTRPsHighTrigger;
156 friend class LTRPsLowTrigger;
157
160
161 void add_on_ps_high_trigger_callback_(std::function<void()> callback) {
162 this->on_ps_high_trigger_callback_.add(std::move(callback));
163 }
164
165 void add_on_ps_low_trigger_callback_(std::function<void()> callback) {
166 this->on_ps_low_trigger_callback_.add(std::move(callback));
167 }
168};
169
170class LTRPsHighTrigger : public Trigger<> {
171 public:
173 parent->add_on_ps_high_trigger_callback_([this]() { this->trigger(); });
174 }
175};
176
177class LTRPsLowTrigger : public Trigger<> {
178 public:
180 parent->add_on_ps_low_trigger_callback_([this]() { this->trigger(); });
181 }
182};
183} // namespace ltr_als_ps
184} // namespace esphome
This class simplifies creating components that periodically check a state.
Definition component.h:301
void trigger(Ts... x)
Definition automation.h:96
This Class provides the methods to read/write bytes from/to an i2c device.
Definition i2c.h:133
void set_actual_gain_sensor(sensor::Sensor *sensor)
Definition ltr_als_ps.h:58
void publish_data_part_2_(AlsReadings &data)
void set_ambient_light_sensor(sensor::Sensor *sensor)
Definition ltr_als_ps.h:55
float get_setup_priority() const override
Definition ltr_als_ps.h:28
void configure_integration_time_(IntegrationTime time)
enum esphome::ltr_als_ps::LTRAlsPsComponent::State NOT_INITIALIZED
void add_on_ps_high_trigger_callback_(std::function< void()> callback)
Definition ltr_als_ps.h:161
sensor::Sensor * full_spectrum_counts_sensor_
Definition ltr_als_ps.h:139
void set_als_meas_repeat_rate(MeasurementRepeatRate rate)
Definition ltr_als_ps.h:43
CallbackManager< void()> on_ps_low_trigger_callback_
Definition ltr_als_ps.h:159
DataAvail is_als_data_ready_(AlsReadings &data)
void read_sensor_data_(AlsReadings &data)
void add_on_ps_low_trigger_callback_(std::function< void()> callback)
Definition ltr_als_ps.h:165
CallbackManager< void()> on_ps_high_trigger_callback_
Definition ltr_als_ps.h:158
void set_actual_integration_time_sensor(sensor::Sensor *sensor)
Definition ltr_als_ps.h:59
void set_full_spectrum_counts_sensor(sensor::Sensor *sensor)
Definition ltr_als_ps.h:56
void set_ps_cooldown_time_s(uint16_t time)
Definition ltr_als_ps.h:50
void set_infrared_counts_sensor(sensor::Sensor *sensor)
Definition ltr_als_ps.h:57
void set_ps_low_threshold(uint16_t threshold)
Definition ltr_als_ps.h:49
void set_ps_high_threshold(uint16_t threshold)
Definition ltr_als_ps.h:48
void publish_data_part_1_(AlsReadings &data)
bool are_adjustments_required_(AlsReadings &data)
void set_proximity_counts_sensor(sensor::Sensor *sensor)
Definition ltr_als_ps.h:60
struct esphome::ltr_als_ps::LTRAlsPsComponent::AlsReadings als_readings_
void set_als_glass_attenuation_factor(float factor)
Definition ltr_als_ps.h:44
sensor::Sensor * actual_integration_time_sensor_
Definition ltr_als_ps.h:142
void apply_lux_calculation_(AlsReadings &data)
void set_als_integration_time(IntegrationTime time)
Definition ltr_als_ps.h:42
LTRPsHighTrigger(LTRAlsPsComponent *parent)
Definition ltr_als_ps.h:172
LTRPsLowTrigger(LTRAlsPsComponent *parent)
Definition ltr_als_ps.h:179
Base-class for all sensors.
Definition sensor.h:57
uint8_t type
AlsGain501 gain
const float DATA
For components that import data from directly connected sensors like DHT.
Definition component.cpp:19
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7