19static const char *
const TAG =
"ade7880";
36 ESP_LOGD(TAG,
"IRQ1 found asserted during setup()");
40 ESP_LOGD(TAG,
"IRQ1 asserted for !RSTDONE, resetting device");
46 ESP_LOGD(TAG,
"Acknowledging RSTDONE");
63 ESP_LOGD(TAG,
"Acknowledging RSTDONE");
73 if (sensor ==
nullptr) {
83 if (sensor ==
nullptr) {
93 if (sensor ==
nullptr) {
120 [](
float val) { return std::abs(val / -327.68f); });
122 return chan->forward_active_energy_total += val / 14400.0f;
125 return chan->reverse_active_energy_total += val / 14400.0f;
136 [](
float val) { return std::abs(val / -327.68f); });
138 return chan->forward_active_energy_total += val / 14400.0f;
141 return chan->reverse_active_energy_total += val / 14400.0f;
152 [](
float val) { return std::abs(val / -327.68f); });
154 return chan->forward_active_energy_total += val / 14400.0f;
157 return chan->reverse_active_energy_total += val / 14400.0f;
161 ESP_LOGD(TAG,
"update took %" PRIu32
" ms",
millis() - start);
165 ESP_LOGCONFIG(TAG,
"ADE7880:");
169 ESP_LOGCONFIG(TAG,
" Frequency: %.0f Hz", this->
frequency_);
172 ESP_LOGCONFIG(TAG,
" Phase A:");
180 ESP_LOGCONFIG(TAG,
" Calibration:");
188 ESP_LOGCONFIG(TAG,
" Phase B:");
196 ESP_LOGCONFIG(TAG,
" Calibration:");
204 ESP_LOGCONFIG(TAG,
" Phase C:");
212 ESP_LOGCONFIG(TAG,
" Calibration:");
220 ESP_LOGCONFIG(TAG,
" Neutral:");
222 ESP_LOGCONFIG(TAG,
" Calibration:");
226 LOG_I2C_DEVICE(
this);
227 LOG_UPDATE_INTERVAL(
this);
231 if (calibration == 0) {
239 if (calibration == 0) {
292 ESP_LOGD(TAG,
"Reset device using RESET pin");
297 ESP_LOGD(TAG,
"Reset device using SWRST command");
virtual void digital_write(bool value)=0
virtual bool digital_read()=0
void attach_interrupt(void(*func)(T *), T *arg, gpio::InterruptType type) const
virtual ISRInternalGPIOPin to_isr() const =0
void update_sensor_from_s24zp_register16_(sensor::Sensor *sensor, uint16_t a_register, F &&f)
int16_t read_s16_register16_(uint16_t a_register)
int32_t read_s32_register16_(uint16_t a_register)
PowerChannel * channel_b_
void dump_config() override
void write_u8_register16_(uint16_t a_register, uint8_t value)
InternalGPIOPin * irq1_pin_
void write_s32_register16_(uint16_t a_register, int32_t value)
int32_t read_s24zp_register16_(uint16_t a_register)
void update_sensor_from_s32_register16_(sensor::Sensor *sensor, uint16_t a_register, F &&f)
void calibrate_s24zpse_reading_(uint16_t a_register, int32_t calibration)
void write_s24zpse_register16_(uint16_t a_register, int32_t value)
void update_sensor_from_s16_register16_(sensor::Sensor *sensor, uint16_t a_register, F &&f)
uint32_t read_u32_register16_(uint16_t a_register)
PowerChannel * channel_a_
InternalGPIOPin * irq0_pin_
void write_s10zp_register16_(uint16_t a_register, int16_t value)
void write_u16_register16_(uint16_t a_register, uint16_t value)
void write_u32_register16_(uint16_t a_register, uint32_t value)
void calibrate_s10zp_reading_(uint16_t a_register, int16_t calibration)
InternalGPIOPin * reset_pin_
NeutralChannel * channel_n_
PowerChannel * channel_c_
Base-class for all sensors.
void publish_state(float state)
Publish a new state to the front-end.
constexpr uint16_t APGAIN
constexpr uint16_t CIGAIN
constexpr uint16_t AIGAIN
constexpr uint16_t DSPWP_SEL
constexpr uint16_t CPHCAL
constexpr uint8_t DSPWP_SEL_SET
constexpr uint16_t APHCAL
constexpr uint16_t BPHCAL
constexpr uint16_t VLEVEL
constexpr uint16_t AFWATTHR
constexpr uint16_t AVGAIN
constexpr uint16_t NIGAIN
constexpr uint8_t DSPWP_SET_RO
constexpr uint16_t BVGAIN
constexpr uint16_t RUN_ENABLE
constexpr uint16_t CFWATTHR
constexpr uint16_t BPGAIN
constexpr uint16_t BIGAIN
constexpr uint16_t CONFIG
constexpr uint16_t CONFIG_SWRST
constexpr uint16_t CONFIG2
constexpr uint16_t STATUS0
constexpr uint16_t COMPMODE
constexpr uint8_t CONFIG2_I2C_LOCK
constexpr uint16_t COMPMODE_SELFREQ
constexpr uint16_t BFWATTHR
constexpr uint16_t DSPWP_SET
constexpr uint16_t CVGAIN
constexpr uint16_t COMPMODE_DEFAULT
constexpr uint16_t STATUS1
constexpr uint16_t CPGAIN
constexpr uint32_t STATUS1_RSTDONE
Providing packet encoding functions for exchanging data with a remote host.
void IRAM_ATTR HOT delay(uint32_t ms)
uint32_t IRAM_ATTR HOT millis()
static void gpio_intr(ADE7880Store *arg)
ISRInternalGPIOPin irq1_pin
int32_t current_gain_calibration
sensor::Sensor * active_power
sensor::Sensor * reverse_active_energy
uint16_t phase_angle_calibration
int32_t voltage_gain_calibration
sensor::Sensor * forward_active_energy
int32_t power_gain_calibration
sensor::Sensor * apparent_power
sensor::Sensor * power_factor
int32_t current_gain_calibration