mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Added more power data to the atm90e32 component (#799)
* Added more data to atm90e32 component * ignore * correction * Delete 6chan_energy_meter.yaml * Update sensor.py fixed indents * Update atm90e32.h * Update esphome/components/atm90e32/sensor.py Co-Authored-By: Otto Winter <otto@otto-winter.com> * PR request changes * repository test branch * Update setup.py * Update const.py * backslash * comma! * delete test yaml * corrected chip temp * change to signed int for get_pf_ functions * Update atm90e32.h formatting * adjusted function & variable names * Update atm90e32.h formatting * Update sensor.py Import CONF_POWER_FACTOR from const.py * travis formatting * Update esphome/components/atm90e32/sensor.py Co-Authored-By: Otto Winter <otto@otto-winter.com> * Update esphome/components/atm90e32/atm90e32.h Co-Authored-By: Otto Winter <otto@otto-winter.com>
This commit is contained in:
		| @@ -40,9 +40,30 @@ void ATM90E32Component::update() { | |||||||
|   if (this->phase_[2].power_sensor_ != nullptr) { |   if (this->phase_[2].power_sensor_ != nullptr) { | ||||||
|     this->phase_[2].power_sensor_->publish_state(this->get_active_power_c_()); |     this->phase_[2].power_sensor_->publish_state(this->get_active_power_c_()); | ||||||
|   } |   } | ||||||
|  |   if (this->phase_[0].reactive_power_sensor_ != nullptr) { | ||||||
|  |     this->phase_[0].reactive_power_sensor_->publish_state(this->get_reactive_power_a_()); | ||||||
|  |   } | ||||||
|  |   if (this->phase_[1].reactive_power_sensor_ != nullptr) { | ||||||
|  |     this->phase_[1].reactive_power_sensor_->publish_state(this->get_reactive_power_b_()); | ||||||
|  |   } | ||||||
|  |   if (this->phase_[2].reactive_power_sensor_ != nullptr) { | ||||||
|  |     this->phase_[2].reactive_power_sensor_->publish_state(this->get_reactive_power_c_()); | ||||||
|  |   } | ||||||
|  |   if (this->phase_[0].power_factor_sensor_ != nullptr) { | ||||||
|  |     this->phase_[0].power_factor_sensor_->publish_state(this->get_power_factor_a_()); | ||||||
|  |   } | ||||||
|  |   if (this->phase_[1].power_factor_sensor_ != nullptr) { | ||||||
|  |     this->phase_[1].power_factor_sensor_->publish_state(this->get_power_factor_b_()); | ||||||
|  |   } | ||||||
|  |   if (this->phase_[2].power_factor_sensor_ != nullptr) { | ||||||
|  |     this->phase_[2].power_factor_sensor_->publish_state(this->get_power_factor_c_()); | ||||||
|  |   } | ||||||
|   if (this->freq_sensor_ != nullptr) { |   if (this->freq_sensor_ != nullptr) { | ||||||
|     this->freq_sensor_->publish_state(this->get_frequency_()); |     this->freq_sensor_->publish_state(this->get_frequency_()); | ||||||
|   } |   } | ||||||
|  |   if (this->chip_temperature_sensor_ != nullptr) { | ||||||
|  |     this->chip_temperature_sensor_->publish_state(this->get_chip_temperature_()); | ||||||
|  |   } | ||||||
|   this->status_clear_warning(); |   this->status_clear_warning(); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -89,13 +110,20 @@ void ATM90E32Component::dump_config() { | |||||||
|   LOG_SENSOR("  ", "Voltage A", this->phase_[0].voltage_sensor_); |   LOG_SENSOR("  ", "Voltage A", this->phase_[0].voltage_sensor_); | ||||||
|   LOG_SENSOR("  ", "Current A", this->phase_[0].current_sensor_); |   LOG_SENSOR("  ", "Current A", this->phase_[0].current_sensor_); | ||||||
|   LOG_SENSOR("  ", "Power A", this->phase_[0].power_sensor_); |   LOG_SENSOR("  ", "Power A", this->phase_[0].power_sensor_); | ||||||
|  |   LOG_SENSOR("  ", "Reactive Power A", this->phase_[0].reactive_power_sensor_); | ||||||
|  |   LOG_SENSOR("  ", "PF A", this->phase_[0].power_factor_sensor_); | ||||||
|   LOG_SENSOR("  ", "Voltage B", this->phase_[1].voltage_sensor_); |   LOG_SENSOR("  ", "Voltage B", this->phase_[1].voltage_sensor_); | ||||||
|   LOG_SENSOR("  ", "Current B", this->phase_[1].current_sensor_); |   LOG_SENSOR("  ", "Current B", this->phase_[1].current_sensor_); | ||||||
|   LOG_SENSOR("  ", "Power B", this->phase_[1].power_sensor_); |   LOG_SENSOR("  ", "Power B", this->phase_[1].power_sensor_); | ||||||
|  |   LOG_SENSOR("  ", "Reactive Power B", this->phase_[1].reactive_power_sensor_); | ||||||
|  |   LOG_SENSOR("  ", "PF B", this->phase_[1].power_factor_sensor_); | ||||||
|   LOG_SENSOR("  ", "Voltage C", this->phase_[2].voltage_sensor_); |   LOG_SENSOR("  ", "Voltage C", this->phase_[2].voltage_sensor_); | ||||||
|   LOG_SENSOR("  ", "Current C", this->phase_[2].current_sensor_); |   LOG_SENSOR("  ", "Current C", this->phase_[2].current_sensor_); | ||||||
|   LOG_SENSOR("  ", "Power C", this->phase_[2].power_sensor_); |   LOG_SENSOR("  ", "Power C", this->phase_[2].power_sensor_); | ||||||
|   LOG_SENSOR("  ", "Frequency", this->freq_sensor_) |   LOG_SENSOR("  ", "Reactive Power C", this->phase_[2].reactive_power_sensor_); | ||||||
|  |   LOG_SENSOR("  ", "PF C", this->phase_[2].power_factor_sensor_); | ||||||
|  |   LOG_SENSOR("  ", "Frequency", this->freq_sensor_); | ||||||
|  |   LOG_SENSOR("  ", "Chip Temp", this->chip_temperature_sensor_); | ||||||
| } | } | ||||||
| float ATM90E32Component::get_setup_priority() const { return setup_priority::DATA; } | float ATM90E32Component::get_setup_priority() const { return setup_priority::DATA; } | ||||||
|  |  | ||||||
| @@ -180,9 +208,37 @@ float ATM90E32Component::get_active_power_c_() { | |||||||
|   int val = this->read32_(ATM90E32_REGISTER_PMEANC, ATM90E32_REGISTER_PMEANCLSB); |   int val = this->read32_(ATM90E32_REGISTER_PMEANC, ATM90E32_REGISTER_PMEANCLSB); | ||||||
|   return val * 0.00032f; |   return val * 0.00032f; | ||||||
| } | } | ||||||
|  | float ATM90E32Component::get_reactive_power_a_() { | ||||||
|  |   int val = this->read32_(ATM90E32_REGISTER_QMEANA, ATM90E32_REGISTER_QMEANALSB); | ||||||
|  |   return val * 0.00032f; | ||||||
|  | } | ||||||
|  | float ATM90E32Component::get_reactive_power_b_() { | ||||||
|  |   int val = this->read32_(ATM90E32_REGISTER_QMEANB, ATM90E32_REGISTER_QMEANBLSB); | ||||||
|  |   return val * 0.00032f; | ||||||
|  | } | ||||||
|  | float ATM90E32Component::get_reactive_power_c_() { | ||||||
|  |   int val = this->read32_(ATM90E32_REGISTER_QMEANC, ATM90E32_REGISTER_QMEANCLSB); | ||||||
|  |   return val * 0.00032f; | ||||||
|  | } | ||||||
|  | float ATM90E32Component::get_power_factor_a_() { | ||||||
|  |   int16_t pf = this->read16_(ATM90E32_REGISTER_PFMEANA); | ||||||
|  |   return (float) pf / 1000; | ||||||
|  | } | ||||||
|  | float ATM90E32Component::get_power_factor_b_() { | ||||||
|  |   int16_t pf = this->read16_(ATM90E32_REGISTER_PFMEANB); | ||||||
|  |   return (float) pf / 1000; | ||||||
|  | } | ||||||
|  | float ATM90E32Component::get_power_factor_c_() { | ||||||
|  |   int16_t pf = this->read16_(ATM90E32_REGISTER_PFMEANC); | ||||||
|  |   return (float) pf / 1000; | ||||||
|  | } | ||||||
| float ATM90E32Component::get_frequency_() { | float ATM90E32Component::get_frequency_() { | ||||||
|   uint16_t freq = this->read16_(ATM90E32_REGISTER_FREQ); |   uint16_t freq = this->read16_(ATM90E32_REGISTER_FREQ); | ||||||
|   return (float) freq / 100; |   return (float) freq / 100; | ||||||
| } | } | ||||||
|  | float ATM90E32Component::get_chip_temperature_() { | ||||||
|  |   uint16_t ctemp = this->read16_(ATM90E32_REGISTER_TEMP); | ||||||
|  |   return (float) ctemp; | ||||||
|  | } | ||||||
| }  // namespace atm90e32 | }  // namespace atm90e32 | ||||||
| }  // namespace esphome | }  // namespace esphome | ||||||
|   | |||||||
| @@ -19,10 +19,15 @@ class ATM90E32Component : public PollingComponent, | |||||||
|   void set_voltage_sensor(int phase, sensor::Sensor *obj) { this->phase_[phase].voltage_sensor_ = obj; } |   void set_voltage_sensor(int phase, sensor::Sensor *obj) { this->phase_[phase].voltage_sensor_ = obj; } | ||||||
|   void set_current_sensor(int phase, sensor::Sensor *obj) { this->phase_[phase].current_sensor_ = obj; } |   void set_current_sensor(int phase, sensor::Sensor *obj) { this->phase_[phase].current_sensor_ = obj; } | ||||||
|   void set_power_sensor(int phase, sensor::Sensor *obj) { this->phase_[phase].power_sensor_ = obj; } |   void set_power_sensor(int phase, sensor::Sensor *obj) { this->phase_[phase].power_sensor_ = obj; } | ||||||
|  |   void set_reactive_power_sensor(int phase, sensor::Sensor *obj) { this->phase_[phase].reactive_power_sensor_ = obj; } | ||||||
|  |   void set_power_factor_sensor(int phase, sensor::Sensor *obj) { this->phase_[phase].power_factor_sensor_ = obj; } | ||||||
|   void set_volt_gain(int phase, uint16_t gain) { this->phase_[phase].volt_gain_ = gain; } |   void set_volt_gain(int phase, uint16_t gain) { this->phase_[phase].volt_gain_ = gain; } | ||||||
|   void set_ct_gain(int phase, uint16_t gain) { this->phase_[phase].ct_gain_ = gain; } |   void set_ct_gain(int phase, uint16_t gain) { this->phase_[phase].ct_gain_ = gain; } | ||||||
|  |  | ||||||
|   void set_freq_sensor(sensor::Sensor *freq_sensor) { freq_sensor_ = freq_sensor; } |   void set_freq_sensor(sensor::Sensor *freq_sensor) { freq_sensor_ = freq_sensor; } | ||||||
|  |   void set_chip_temperature_sensor(sensor::Sensor *chip_temperature_sensor) { | ||||||
|  |     chip_temperature_sensor_ = chip_temperature_sensor; | ||||||
|  |   } | ||||||
|   void set_line_freq(int freq) { line_freq_ = freq; } |   void set_line_freq(int freq) { line_freq_ = freq; } | ||||||
|   void set_pga_gain(uint16_t gain) { pga_gain_ = gain; } |   void set_pga_gain(uint16_t gain) { pga_gain_ = gain; } | ||||||
|  |  | ||||||
| @@ -40,7 +45,14 @@ class ATM90E32Component : public PollingComponent, | |||||||
|   float get_active_power_a_(); |   float get_active_power_a_(); | ||||||
|   float get_active_power_b_(); |   float get_active_power_b_(); | ||||||
|   float get_active_power_c_(); |   float get_active_power_c_(); | ||||||
|  |   float get_reactive_power_a_(); | ||||||
|  |   float get_reactive_power_b_(); | ||||||
|  |   float get_reactive_power_c_(); | ||||||
|  |   float get_power_factor_a_(); | ||||||
|  |   float get_power_factor_b_(); | ||||||
|  |   float get_power_factor_c_(); | ||||||
|   float get_frequency_(); |   float get_frequency_(); | ||||||
|  |   float get_chip_temperature_(); | ||||||
|  |  | ||||||
|   struct ATM90E32Phase { |   struct ATM90E32Phase { | ||||||
|     uint16_t volt_gain_{41820}; |     uint16_t volt_gain_{41820}; | ||||||
| @@ -48,8 +60,11 @@ class ATM90E32Component : public PollingComponent, | |||||||
|     sensor::Sensor *voltage_sensor_{nullptr}; |     sensor::Sensor *voltage_sensor_{nullptr}; | ||||||
|     sensor::Sensor *current_sensor_{nullptr}; |     sensor::Sensor *current_sensor_{nullptr}; | ||||||
|     sensor::Sensor *power_sensor_{nullptr}; |     sensor::Sensor *power_sensor_{nullptr}; | ||||||
|  |     sensor::Sensor *reactive_power_sensor_{nullptr}; | ||||||
|  |     sensor::Sensor *power_factor_sensor_{nullptr}; | ||||||
|   } phase_[3]; |   } phase_[3]; | ||||||
|   sensor::Sensor *freq_sensor_{nullptr}; |   sensor::Sensor *freq_sensor_{nullptr}; | ||||||
|  |   sensor::Sensor *chip_temperature_sensor_{nullptr}; | ||||||
|   uint16_t pga_gain_{0x15}; |   uint16_t pga_gain_{0x15}; | ||||||
|   int line_freq_{60}; |   int line_freq_{60}; | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -2,14 +2,17 @@ import esphome.codegen as cg | |||||||
| import esphome.config_validation as cv | import esphome.config_validation as cv | ||||||
| from esphome.components import sensor, spi | from esphome.components import sensor, spi | ||||||
| from esphome.const import \ | from esphome.const import \ | ||||||
|     CONF_ID, CONF_VOLTAGE, CONF_CURRENT, CONF_POWER, CONF_FREQUENCY, \ |     CONF_ID, CONF_VOLTAGE, CONF_CURRENT, CONF_POWER, CONF_POWER_FACTOR, CONF_FREQUENCY, \ | ||||||
|     ICON_FLASH, UNIT_HZ, UNIT_VOLT, UNIT_AMPERE, UNIT_WATT |     ICON_FLASH, ICON_LIGHTBULB, ICON_CURRENT_AC, ICON_THERMOMETER, \ | ||||||
|  |     UNIT_HZ, UNIT_VOLT, UNIT_AMPERE, UNIT_WATT, UNIT_EMPTY, UNIT_CELSIUS | ||||||
|  |  | ||||||
| CONF_PHASE_A = 'phase_a' | CONF_PHASE_A = 'phase_a' | ||||||
| CONF_PHASE_B = 'phase_b' | CONF_PHASE_B = 'phase_b' | ||||||
| CONF_PHASE_C = 'phase_c' | CONF_PHASE_C = 'phase_c' | ||||||
|  |  | ||||||
|  | CONF_REACTIVE_POWER = 'reactive_power' | ||||||
| CONF_LINE_FREQUENCY = 'line_frequency' | CONF_LINE_FREQUENCY = 'line_frequency' | ||||||
|  | CONF_CHIP_TEMPERATURE = 'chip_temperature' | ||||||
| CONF_GAIN_PGA = 'gain_pga' | CONF_GAIN_PGA = 'gain_pga' | ||||||
| CONF_GAIN_VOLTAGE = 'gain_voltage' | CONF_GAIN_VOLTAGE = 'gain_voltage' | ||||||
| CONF_GAIN_CT = 'gain_ct' | CONF_GAIN_CT = 'gain_ct' | ||||||
| @@ -28,8 +31,10 @@ ATM90E32Component = atm90e32_ns.class_('ATM90E32Component', cg.PollingComponent, | |||||||
|  |  | ||||||
| ATM90E32_PHASE_SCHEMA = cv.Schema({ | ATM90E32_PHASE_SCHEMA = cv.Schema({ | ||||||
|     cv.Optional(CONF_VOLTAGE): sensor.sensor_schema(UNIT_VOLT, ICON_FLASH, 2), |     cv.Optional(CONF_VOLTAGE): sensor.sensor_schema(UNIT_VOLT, ICON_FLASH, 2), | ||||||
|     cv.Optional(CONF_CURRENT): sensor.sensor_schema(UNIT_AMPERE, ICON_FLASH, 2), |     cv.Optional(CONF_CURRENT): sensor.sensor_schema(UNIT_AMPERE, ICON_CURRENT_AC, 2), | ||||||
|     cv.Optional(CONF_POWER): sensor.sensor_schema(UNIT_WATT, ICON_FLASH, 2), |     cv.Optional(CONF_POWER): sensor.sensor_schema(UNIT_WATT, ICON_FLASH, 2), | ||||||
|  |     cv.Optional(CONF_REACTIVE_POWER): sensor.sensor_schema(UNIT_EMPTY, ICON_LIGHTBULB, 2), | ||||||
|  |     cv.Optional(CONF_POWER_FACTOR): sensor.sensor_schema(UNIT_EMPTY, ICON_FLASH, 2), | ||||||
|     cv.Optional(CONF_GAIN_VOLTAGE, default=41820): cv.uint16_t, |     cv.Optional(CONF_GAIN_VOLTAGE, default=41820): cv.uint16_t, | ||||||
|     cv.Optional(CONF_GAIN_CT, default=25498): cv.uint16_t, |     cv.Optional(CONF_GAIN_CT, default=25498): cv.uint16_t, | ||||||
| }) | }) | ||||||
| @@ -39,7 +44,8 @@ CONFIG_SCHEMA = cv.Schema({ | |||||||
|     cv.Optional(CONF_PHASE_A): ATM90E32_PHASE_SCHEMA, |     cv.Optional(CONF_PHASE_A): ATM90E32_PHASE_SCHEMA, | ||||||
|     cv.Optional(CONF_PHASE_B): ATM90E32_PHASE_SCHEMA, |     cv.Optional(CONF_PHASE_B): ATM90E32_PHASE_SCHEMA, | ||||||
|     cv.Optional(CONF_PHASE_C): ATM90E32_PHASE_SCHEMA, |     cv.Optional(CONF_PHASE_C): ATM90E32_PHASE_SCHEMA, | ||||||
|     cv.Optional(CONF_FREQUENCY): sensor.sensor_schema(UNIT_HZ, ICON_FLASH, 1), |     cv.Optional(CONF_FREQUENCY): sensor.sensor_schema(UNIT_HZ, ICON_CURRENT_AC, 1), | ||||||
|  |     cv.Optional(CONF_CHIP_TEMPERATURE): sensor.sensor_schema(UNIT_CELSIUS, ICON_THERMOMETER, 1), | ||||||
|     cv.Required(CONF_LINE_FREQUENCY): cv.enum(LINE_FREQS, upper=True), |     cv.Required(CONF_LINE_FREQUENCY): cv.enum(LINE_FREQS, upper=True), | ||||||
|     cv.Optional(CONF_GAIN_PGA, default='2X'): cv.enum(PGA_GAINS, upper=True), |     cv.Optional(CONF_GAIN_PGA, default='2X'): cv.enum(PGA_GAINS, upper=True), | ||||||
| }).extend(cv.polling_component_schema('60s')).extend(spi.SPI_DEVICE_SCHEMA) | }).extend(cv.polling_component_schema('60s')).extend(spi.SPI_DEVICE_SCHEMA) | ||||||
| @@ -65,8 +71,17 @@ def to_code(config): | |||||||
|         if CONF_POWER in conf: |         if CONF_POWER in conf: | ||||||
|             sens = yield sensor.new_sensor(conf[CONF_POWER]) |             sens = yield sensor.new_sensor(conf[CONF_POWER]) | ||||||
|             cg.add(var.set_power_sensor(i, sens)) |             cg.add(var.set_power_sensor(i, sens)) | ||||||
|  |         if CONF_REACTIVE_POWER in conf: | ||||||
|  |             sens = yield sensor.new_sensor(conf[CONF_REACTIVE_POWER]) | ||||||
|  |             cg.add(var.set_react_pow_sensor(i, sens)) | ||||||
|  |         if CONF_POWER_FACTOR in conf: | ||||||
|  |             sens = yield sensor.new_sensor(conf[CONF_POWER_FACTOR]) | ||||||
|  |             cg.add(var.set_pf_sensor(i, sens)) | ||||||
|     if CONF_FREQUENCY in config: |     if CONF_FREQUENCY in config: | ||||||
|         sens = yield sensor.new_sensor(config[CONF_FREQUENCY]) |         sens = yield sensor.new_sensor(config[CONF_FREQUENCY]) | ||||||
|         cg.add(var.set_freq_sensor(sens)) |         cg.add(var.set_freq_sensor(sens)) | ||||||
|  |     if CONF_CHIP_TEMPERATURE in config: | ||||||
|  |         sens = yield sensor.new_sensor(config[CONF_CHIP_TEMPERATURE]) | ||||||
|  |         cg.add(var.set_chip_temp_sensor(sens)) | ||||||
|     cg.add(var.set_line_freq(config[CONF_LINE_FREQUENCY])) |     cg.add(var.set_line_freq(config[CONF_LINE_FREQUENCY])) | ||||||
|     cg.add(var.set_pga_gain(config[CONF_GAIN_PGA])) |     cg.add(var.set_pga_gain(config[CONF_GAIN_PGA])) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user