Sgp30 sensor improvements (#1510)

Co-authored-by: Umberto73 <huub@eikens.com>
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
This commit is contained in:
Huub Eikens
2021-07-12 23:21:54 +02:00
committed by GitHub
parent 551e9c6111
commit 7dd16df846
5 changed files with 105 additions and 11 deletions
+16
View File
@@ -3,16 +3,25 @@
#include "esphome/core/component.h"
#include "esphome/components/sensor/sensor.h"
#include "esphome/components/i2c/i2c.h"
#include "esphome/core/preferences.h"
#include <cmath>
namespace esphome {
namespace sgp30 {
struct SGP30Baselines {
uint16_t eco2;
uint16_t tvoc;
} PACKED;
/// This class implements support for the Sensirion SGP30 i2c GAS (VOC and CO2eq) sensors.
class SGP30Component : public PollingComponent, public i2c::I2CDevice {
public:
void set_eco2_sensor(sensor::Sensor *eco2) { eco2_sensor_ = eco2; }
void set_tvoc_sensor(sensor::Sensor *tvoc) { tvoc_sensor_ = tvoc; }
void set_eco2_baseline_sensor(sensor::Sensor *eco2_baseline) { eco2_sensor_baseline_ = eco2_baseline; }
void set_tvoc_baseline_sensor(sensor::Sensor *tvoc_baseline) { tvoc_sensor_baseline_ = tvoc_baseline; }
void set_store_baseline(bool store_baseline) { store_baseline_ = store_baseline; }
void set_eco2_baseline(uint16_t eco2_baseline) { eco2_baseline_ = eco2_baseline; }
void set_tvoc_baseline(uint16_t tvoc_baseline) { tvoc_baseline_ = tvoc_baseline; }
void set_humidity_sensor(sensor::Sensor *humidity) { humidity_sensor_ = humidity; }
@@ -34,6 +43,9 @@ class SGP30Component : public PollingComponent, public i2c::I2CDevice {
uint64_t serial_number_;
uint16_t featureset_;
uint32_t required_warm_up_time_;
uint32_t seconds_since_last_store_;
SGP30Baselines baselines_storage_;
ESPPreferenceObject pref_;
enum ErrorCode {
COMMUNICATION_FAILED,
@@ -45,8 +57,12 @@ class SGP30Component : public PollingComponent, public i2c::I2CDevice {
sensor::Sensor *eco2_sensor_{nullptr};
sensor::Sensor *tvoc_sensor_{nullptr};
sensor::Sensor *eco2_sensor_baseline_{nullptr};
sensor::Sensor *tvoc_sensor_baseline_{nullptr};
uint16_t eco2_baseline_{0x0000};
uint16_t tvoc_baseline_{0x0000};
bool store_baseline_;
/// Input sensor for humidity and temperature compensation.
sensor::Sensor *humidity_sensor_{nullptr};
sensor::Sensor *temperature_sensor_{nullptr};