ESPHome  2024.4.2
Data Structures | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
esphome::ms8607::MS8607Component Class Reference

Temperature, pressure, and humidity sensor. More...

#include <ms8607.h>

Inheritance diagram for esphome::ms8607::MS8607Component:
esphome::PollingComponent esphome::i2c::I2CDevice esphome::Component

Data Structures

struct  CalibrationValues
 This device's pressure & temperature calibration values, read from PROM. More...
 

Public Types

enum  ErrorCode {
  ErrorCode::NONE = 0, ErrorCode::PTH_RESET_FAILED = 1, ErrorCode::PT_RESET_FAILED = 2, ErrorCode::H_RESET_FAILED = 3,
  ErrorCode::PROM_READ_FAILED = 4, ErrorCode::PROM_CRC_FAILED = 5
}
 
enum  SetupStatus { SetupStatus::NEEDS_RESET, SetupStatus::NEEDS_PROM_READ, SetupStatus::SUCCESSFUL }
 

Public Member Functions

virtual ~MS8607Component ()=default
 
void setup () override
 
void update () override
 
void dump_config () override
 
float get_setup_priority () const override
 
void set_temperature_sensor (sensor::Sensor *temperature_sensor)
 
void set_pressure_sensor (sensor::Sensor *pressure_sensor)
 
void set_humidity_sensor (sensor::Sensor *humidity_sensor)
 
void set_humidity_device (MS8607HumidityDevice *humidity_device)
 
- Public Member Functions inherited from esphome::PollingComponent
 PollingComponent ()
 
 PollingComponent (uint32_t update_interval)
 Initialize this polling component with the given update interval in ms. More...
 
virtual void set_update_interval (uint32_t update_interval)
 Manually set the update interval in ms for this polling object. More...
 
void call_setup () override
 
virtual uint32_t get_update_interval () const
 Get the update interval in ms of this sensor. More...
 
void start_poller ()
 
void stop_poller ()
 
- Public Member Functions inherited from esphome::Component
virtual void loop ()
 This method will be called repeatedly. More...
 
float get_actual_setup_priority () const
 
void set_setup_priority (float priority)
 
virtual float get_loop_priority () const
 priority of loop(). More...
 
void call ()
 
virtual void on_shutdown ()
 
virtual void on_safe_shutdown ()
 
uint32_t get_component_state () const
 
virtual void mark_failed ()
 Mark this component as failed. More...
 
bool is_failed ()
 
bool is_ready ()
 
virtual bool can_proceed ()
 
bool status_has_warning () const
 
bool status_has_error () const
 
void status_set_warning (const char *message="unspecified")
 
void status_set_error (const char *message="unspecified")
 
void status_clear_warning ()
 
void status_clear_error ()
 
void status_momentary_warning (const std::string &name, uint32_t length=5000)
 
void status_momentary_error (const std::string &name, uint32_t length=5000)
 
bool has_overridden_loop () const
 
void set_component_source (const char *source)
 Set where this component was loaded from for some debug messages. More...
 
const char * get_component_source () const
 Get the integration where this component was declared as a string. More...
 
- Public Member Functions inherited from esphome::i2c::I2CDevice
 I2CDevice ()=default
 we use the C++ default constructor More...
 
void set_i2c_address (uint8_t address)
 We store the address of the device on the bus. More...
 
void set_i2c_bus (I2CBus *bus)
 we store the pointer to the I2CBus to use More...
 
I2CRegister reg (uint8_t a_register)
 calls the I2CRegister constructor More...
 
I2CRegister16 reg16 (uint16_t a_register)
 calls the I2CRegister16 constructor More...
 
ErrorCode read (uint8_t *data, size_t len)
 reads an array of bytes from the device using an I2CBus More...
 
ErrorCode read_register (uint8_t a_register, uint8_t *data, size_t len, bool stop=true)
 reads an array of bytes from a specific register in the I²C device More...
 
ErrorCode read_register16 (uint16_t a_register, uint8_t *data, size_t len, bool stop=true)
 reads an array of bytes from a specific register in the I²C device More...
 
ErrorCode write (const uint8_t *data, size_t len, bool stop=true)
 writes an array of bytes to a device using an I2CBus More...
 
ErrorCode write_register (uint8_t a_register, const uint8_t *data, size_t len, bool stop=true)
 writes an array of bytes to a specific register in the I²C device More...
 
ErrorCode write_register16 (uint16_t a_register, const uint8_t *data, size_t len, bool stop=true)
 write an array of bytes to a specific register in the I²C device More...
 
bool read_bytes (uint8_t a_register, uint8_t *data, uint8_t len)
 Compat APIs All methods below have been added for compatibility reasons. More...
 
bool read_bytes_raw (uint8_t *data, uint8_t len)
 
template<size_t N>
optional< std::array< uint8_t, N > > read_bytes (uint8_t a_register)
 
template<size_t N>
optional< std::array< uint8_t, N > > read_bytes_raw ()
 
bool read_bytes_16 (uint8_t a_register, uint16_t *data, uint8_t len)
 
bool read_byte (uint8_t a_register, uint8_t *data, bool stop=true)
 
optional< uint8_t > read_byte (uint8_t a_register)
 
bool read_byte_16 (uint8_t a_register, uint16_t *data)
 
bool write_bytes (uint8_t a_register, const uint8_t *data, uint8_t len, bool stop=true)
 
bool write_bytes (uint8_t a_register, const std::vector< uint8_t > &data)
 
template<size_t N>
bool write_bytes (uint8_t a_register, const std::array< uint8_t, N > &data)
 
bool write_bytes_16 (uint8_t a_register, const uint16_t *data, uint8_t len)
 
bool write_byte (uint8_t a_register, uint8_t data, bool stop=true)
 
bool write_byte_16 (uint8_t a_register, uint16_t data)
 

Protected Member Functions

bool read_calibration_values_from_prom_ ()
 Read and store the Pressure & Temperature calibration settings from the PROM. More...
 
void request_read_temperature_ ()
 Start async temperature read. More...
 
void read_temperature_ ()
 Process async temperature read. More...
 
void request_read_pressure_ (uint32_t raw_temperature)
 start async pressure read More...
 
void read_pressure_ (uint32_t raw_temperature)
 process async pressure read More...
 
void request_read_humidity_ (float temperature_float)
 start async humidity read More...
 
void read_humidity_ (float temperature_float)
 process async humidity read More...
 
void calculate_values_ (uint32_t raw_temperature, uint32_t raw_pressure)
 use raw temperature & pressure to calculate & publish values More...
 
- Protected Member Functions inherited from esphome::Component
virtual void call_loop ()
 
virtual void call_dump_config ()
 
void set_interval (const std::string &name, uint32_t interval, std::function< void()> &&f)
 Set an interval function with a unique name. More...
 
void set_interval (uint32_t interval, std::function< void()> &&f)
 
bool cancel_interval (const std::string &name)
 Cancel an interval function. More...
 
void set_retry (const std::string &name, uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f)
 Set an retry function with a unique name. More...
 
void set_retry (uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f)
 
bool cancel_retry (const std::string &name)
 Cancel a retry function. More...
 
void set_timeout (const std::string &name, uint32_t timeout, std::function< void()> &&f)
 Set a timeout function with a unique name. More...
 
void set_timeout (uint32_t timeout, std::function< void()> &&f)
 
bool cancel_timeout (const std::string &name)
 Cancel a timeout function. More...
 
void defer (const std::string &name, std::function< void()> &&f)
 Defer a callback to the next loop() call. More...
 
void defer (std::function< void()> &&f)
 Defer a callback to the next loop() call. More...
 
bool cancel_defer (const std::string &name)
 Cancel a defer callback using the specified name, name must not be empty. More...
 

Protected Attributes

sensor::Sensortemperature_sensor_
 
sensor::Sensorpressure_sensor_
 
sensor::Sensorhumidity_sensor_
 
MS8607HumidityDevicehumidity_device_
 I2CDevice object to communicate with secondary I2C address for the humidity sensor. More...
 
struct esphome::ms8607::MS8607Component::CalibrationValues calibration_values_
 
ErrorCode error_code_
 Keep track of the reason why this component failed, to augment the dumped config. More...
 
SetupStatus setup_status_
 Current step in the multi-step & possibly delayed setup() process. More...
 
- Protected Attributes inherited from esphome::PollingComponent
uint32_t update_interval_
 
- Protected Attributes inherited from esphome::Component
uint32_t component_state_ {0x0000}
 State of this component. More...
 
float setup_priority_override_ {NAN}
 
const char * component_source_ {nullptr}
 
- Protected Attributes inherited from esphome::i2c::I2CDevice
uint8_t address_ {0x00}
 store the address of the device on the bus More...
 
I2CBusbus_ {nullptr}
 pointer to I2CBus instance More...
 

Detailed Description

Temperature, pressure, and humidity sensor.

By default, the MS8607 measures sensors at the highest resolution. A potential enhancement would be to expose the resolution as a configurable setting. A lower resolution speeds up ADC conversion time & uses less power.

Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Data+Sheet%7FMS8607-02BA01%7FB3%7Fpdf%7FEnglish%7FENG_DS_MS8607-02BA01_B3.pdf%7FCAT-BLPS0018

Other implementations:

Definition at line 34 of file ms8607.h.

Member Enumeration Documentation

◆ ErrorCode

Enumerator
NONE 

Component hasn't failed (yet?)

PTH_RESET_FAILED 

Both the Pressure/Temperature address and the Humidity address failed to reset.

PT_RESET_FAILED 

Asking the Pressure/Temperature sensor to reset failed.

H_RESET_FAILED 

Asking the Humidity sensor to reset failed.

PROM_READ_FAILED 

Reading the PROM calibration values failed.

PROM_CRC_FAILED 

The PROM calibration values failed the CRC check.

Definition at line 42 of file ms8607.cpp.

◆ SetupStatus

Enumerator
NEEDS_RESET 

This component has not successfully reset the PT & H devices.

NEEDS_PROM_READ 

Reset commands succeeded, need to wait >= 15ms to read PROM.

SUCCESSFUL 

Successfully read PROM and ready to update sensors.

Definition at line 57 of file ms8607.cpp.

Constructor & Destructor Documentation

◆ ~MS8607Component()

virtual esphome::ms8607::MS8607Component::~MS8607Component ( )
virtualdefault

Member Function Documentation

◆ calculate_values_()

void esphome::ms8607::MS8607Component::calculate_values_ ( uint32_t  raw_temperature,
uint32_t  raw_pressure 
)
protected

use raw temperature & pressure to calculate & publish values

Definition at line 370 of file ms8607.cpp.

◆ dump_config()

void esphome::ms8607::MS8607Component::dump_config ( )
overridevirtual

Reimplemented from esphome::Component.

Definition at line 137 of file ms8607.cpp.

◆ get_setup_priority()

float esphome::ms8607::MS8607Component::get_setup_priority ( ) const
inlineoverridevirtual

Reimplemented from esphome::Component.

Definition at line 40 of file ms8607.h.

◆ read_calibration_values_from_prom_()

bool esphome::ms8607::MS8607Component::read_calibration_values_from_prom_ ( )
protected

Read and store the Pressure & Temperature calibration settings from the PROM.

Intended to be called during setup(), this will set the failure_reason_

Definition at line 172 of file ms8607.cpp.

◆ read_humidity_()

void esphome::ms8607::MS8607Component::read_humidity_ ( float  temperature_float)
protected

process async humidity read

Definition at line 332 of file ms8607.cpp.

◆ read_pressure_()

void esphome::ms8607::MS8607Component::read_pressure_ ( uint32_t  raw_temperature)
protected

process async pressure read

Definition at line 310 of file ms8607.cpp.

◆ read_temperature_()

void esphome::ms8607::MS8607Component::read_temperature_ ( )
protected

Process async temperature read.

Definition at line 288 of file ms8607.cpp.

◆ request_read_humidity_()

void esphome::ms8607::MS8607Component::request_read_humidity_ ( float  temperature_float)
protected

start async humidity read

Definition at line 320 of file ms8607.cpp.

◆ request_read_pressure_()

void esphome::ms8607::MS8607Component::request_read_pressure_ ( uint32_t  raw_temperature)
protected

start async pressure read

Definition at line 299 of file ms8607.cpp.

◆ request_read_temperature_()

void esphome::ms8607::MS8607Component::request_read_temperature_ ( )
protected

Start async temperature read.

Definition at line 276 of file ms8607.cpp.

◆ set_humidity_device()

void esphome::ms8607::MS8607Component::set_humidity_device ( MS8607HumidityDevice humidity_device)
inline

Definition at line 45 of file ms8607.h.

◆ set_humidity_sensor()

void esphome::ms8607::MS8607Component::set_humidity_sensor ( sensor::Sensor humidity_sensor)
inline

Definition at line 44 of file ms8607.h.

◆ set_pressure_sensor()

void esphome::ms8607::MS8607Component::set_pressure_sensor ( sensor::Sensor pressure_sensor)
inline

Definition at line 43 of file ms8607.h.

◆ set_temperature_sensor()

void esphome::ms8607::MS8607Component::set_temperature_sensor ( sensor::Sensor temperature_sensor)
inline

Definition at line 42 of file ms8607.h.

◆ setup()

void esphome::ms8607::MS8607Component::setup ( )
overridevirtual

Reimplemented from esphome::Component.

Definition at line 69 of file ms8607.cpp.

◆ update()

void esphome::ms8607::MS8607Component::update ( )
overridevirtual

Implements esphome::PollingComponent.

Definition at line 125 of file ms8607.cpp.

Field Documentation

◆ calibration_values_

struct esphome::ms8607::MS8607Component::CalibrationValues esphome::ms8607::MS8607Component::calibration_values_
protected

◆ error_code_

ErrorCode esphome::ms8607::MS8607Component::error_code_
protected

Keep track of the reason why this component failed, to augment the dumped config.

Definition at line 98 of file ms8607.h.

◆ humidity_device_

MS8607HumidityDevice* esphome::ms8607::MS8607Component::humidity_device_
protected

I2CDevice object to communicate with secondary I2C address for the humidity sensor.

The MS8607 only has one set of I2C pins, despite using two different addresses.

Default address for humidity is 0x40

Definition at line 79 of file ms8607.h.

◆ humidity_sensor_

sensor::Sensor* esphome::ms8607::MS8607Component::humidity_sensor_
protected

Definition at line 71 of file ms8607.h.

◆ pressure_sensor_

sensor::Sensor* esphome::ms8607::MS8607Component::pressure_sensor_
protected

Definition at line 70 of file ms8607.h.

◆ setup_status_

SetupStatus esphome::ms8607::MS8607Component::setup_status_
protected

Current step in the multi-step & possibly delayed setup() process.

Definition at line 103 of file ms8607.h.

◆ temperature_sensor_

sensor::Sensor* esphome::ms8607::MS8607Component::temperature_sensor_
protected

Definition at line 69 of file ms8607.h.


The documentation for this class was generated from the following files: