ESPHome 2026.5.0-dev
Loading...
Searching...
No Matches
ade7953_base.h
Go to the documentation of this file.
1#pragma once
2
4#include "esphome/core/hal.h"
6
7#include <vector>
8
9namespace esphome {
10namespace ade7953_base {
11
12static constexpr uint8_t PGA_V_8 =
13 0x007; // PGA_V, (R/W) Default: 0x00, Unsigned, Voltage channel gain configuration (Bits[2:0])
14static constexpr uint8_t PGA_IA_8 =
15 0x008; // PGA_IA, (R/W) Default: 0x00, Unsigned, Current Channel A gain configuration (Bits[2:0])
16static constexpr uint8_t PGA_IB_8 =
17 0x009; // PGA_IB, (R/W) Default: 0x00, Unsigned, Current Channel B gain configuration (Bits[2:0])
18
19static constexpr uint16_t CONFIG_16 = 0x102; // CONFIG, (R/W) Default: 0x8004, Unsigned, Configuration register
20
21static constexpr uint16_t AIGAIN_32 =
22 0x380; // AIGAIN, (R/W) Default: 0x400000, Unsigned,Current channel gain (Current Channel A)(32 bit)
23static constexpr uint16_t AVGAIN_32 =
24 0x381; // AVGAIN, (R/W) Default: 0x400000, Unsigned,Voltage channel gain(32 bit)
25static constexpr uint16_t AWGAIN_32 =
26 0x382; // AWGAIN, (R/W) Default: 0x400000, Unsigned,Active power gain (Current Channel A)(32 bit)
27static constexpr uint16_t AVARGAIN_32 =
28 0x383; // AVARGAIN, (R/W) Default: 0x400000, Unsigned, Reactive power gain (Current Channel A)(32 bit)
29static constexpr uint16_t AVAGAIN_32 =
30 0x384; // AVAGAIN, (R/W) Default: 0x400000, Unsigned,Apparent power gain (Current Channel A)(32 bit)
31
32static constexpr uint16_t BIGAIN_32 =
33 0x38C; // BIGAIN, (R/W) Default: 0x400000, Unsigned,Current channel gain (Current Channel B)(32 bit)
34static constexpr uint16_t BVGAIN_32 =
35 0x38D; // BVGAIN, (R/W) Default: 0x400000, Unsigned,Voltage channel gain(32 bit)
36static constexpr uint16_t BWGAIN_32 =
37 0x38E; // BWGAIN, (R/W) Default: 0x400000, Unsigned,Active power gain (Current Channel B)(32 bit)
38static constexpr uint16_t BVARGAIN_32 =
39 0x38F; // BVARGAIN, (R/W) Default: 0x400000, Unsigned, Reactive power gain (Current Channel B)(32 bit)
40static constexpr uint16_t BVAGAIN_32 =
41 0x390; // BVAGAIN, (R/W) Default: 0x400000, Unsigned,Apparent power gain (Current Channel B)(32 bit)
42
43class ADE7953 : public PollingComponent, public sensor::Sensor {
44 public:
45 void set_irq_pin(InternalGPIOPin *irq_pin) { irq_pin_ = irq_pin; }
46
47 // Set PGA input gains: 0 1x, 1 2x, 0b10 4x
48 void set_pga_v(uint8_t pga_v) { pga_v_ = pga_v; }
49 void set_pga_ia(uint8_t pga_ia) { pga_ia_ = pga_ia; }
50 void set_pga_ib(uint8_t pga_ib) { pga_ib_ = pga_ib; }
51
52 // Set input gains
53 void set_vgain(uint32_t vgain) {
54 // Datasheet says: "to avoid discrepancies in other registers,
55 // if AVGAIN is set then BVGAIN should be set to the same value."
56 avgain_ = vgain;
57 bvgain_ = vgain;
58 }
59 void set_aigain(uint32_t aigain) { aigain_ = aigain; }
60 void set_bigain(uint32_t bigain) { bigain_ = bigain; }
61 void set_awgain(uint32_t awgain) { awgain_ = awgain; }
62 void set_bwgain(uint32_t bwgain) { bwgain_ = bwgain; }
63
64 void set_use_acc_energy_regs(bool use_acc_energy_regs) { use_acc_energy_regs_ = use_acc_energy_regs; }
65
66 void set_voltage_sensor(sensor::Sensor *voltage_sensor) { voltage_sensor_ = voltage_sensor; }
67 void set_frequency_sensor(sensor::Sensor *frequency_sensor) { frequency_sensor_ = frequency_sensor; }
68
69 void set_power_factor_a_sensor(sensor::Sensor *power_factor_a) { power_factor_a_sensor_ = power_factor_a; }
70 void set_power_factor_b_sensor(sensor::Sensor *power_factor_b) { power_factor_b_sensor_ = power_factor_b; }
71
72 void set_current_a_sensor(sensor::Sensor *current_a_sensor) { current_a_sensor_ = current_a_sensor; }
73 void set_current_b_sensor(sensor::Sensor *current_b_sensor) { current_b_sensor_ = current_b_sensor; }
74
75 void set_apparent_power_a_sensor(sensor::Sensor *apparent_power_a) { apparent_power_a_sensor_ = apparent_power_a; }
76 void set_apparent_power_b_sensor(sensor::Sensor *apparent_power_b) { apparent_power_b_sensor_ = apparent_power_b; }
77
78 void set_active_power_a_sensor(sensor::Sensor *active_power_a_sensor) {
79 active_power_a_sensor_ = active_power_a_sensor;
80 }
81 void set_active_power_b_sensor(sensor::Sensor *active_power_b_sensor) {
82 active_power_b_sensor_ = active_power_b_sensor;
83 }
84
85 void set_reactive_power_a_sensor(sensor::Sensor *reactive_power_a) { reactive_power_a_sensor_ = reactive_power_a; }
86 void set_reactive_power_b_sensor(sensor::Sensor *reactive_power_b) { reactive_power_b_sensor_ = reactive_power_b; }
87
88 void setup() override;
89
90 void dump_config() override;
91
92 void update() override;
93
94 protected:
96 bool is_setup_{false};
109 uint8_t pga_v_;
110 uint8_t pga_ia_;
111 uint8_t pga_ib_;
120
121 virtual bool ade_write_8(uint16_t reg, uint8_t value) = 0;
122
123 virtual bool ade_write_16(uint16_t reg, uint16_t value) = 0;
124
125 virtual bool ade_write_32(uint16_t reg, uint32_t value) = 0;
126
127 virtual bool ade_read_8(uint16_t reg, uint8_t *value) = 0;
128
129 virtual bool ade_read_16(uint16_t reg, uint16_t *value) = 0;
130
131 virtual bool ade_read_32(uint16_t reg, uint32_t *value) = 0;
132};
133
134} // namespace ade7953_base
135} // namespace esphome
This class simplifies creating components that periodically check a state.
Definition component.h:602
virtual bool ade_write_32(uint16_t reg, uint32_t value)=0
void set_active_power_a_sensor(sensor::Sensor *active_power_a_sensor)
void set_pga_ib(uint8_t pga_ib)
virtual bool ade_read_16(uint16_t reg, uint16_t *value)=0
void set_pga_v(uint8_t pga_v)
void set_reactive_power_b_sensor(sensor::Sensor *reactive_power_b)
void set_current_b_sensor(sensor::Sensor *current_b_sensor)
sensor::Sensor * reactive_power_b_sensor_
void set_use_acc_energy_regs(bool use_acc_energy_regs)
sensor::Sensor * reactive_power_a_sensor_
void set_frequency_sensor(sensor::Sensor *frequency_sensor)
void set_current_a_sensor(sensor::Sensor *current_a_sensor)
sensor::Sensor * current_a_sensor_
void set_bwgain(uint32_t bwgain)
sensor::Sensor * power_factor_b_sensor_
void set_reactive_power_a_sensor(sensor::Sensor *reactive_power_a)
void set_awgain(uint32_t awgain)
sensor::Sensor * power_factor_a_sensor_
virtual bool ade_read_8(uint16_t reg, uint8_t *value)=0
void set_active_power_b_sensor(sensor::Sensor *active_power_b_sensor)
sensor::Sensor * active_power_a_sensor_
virtual bool ade_read_32(uint16_t reg, uint32_t *value)=0
sensor::Sensor * apparent_power_b_sensor_
void set_pga_ia(uint8_t pga_ia)
void set_voltage_sensor(sensor::Sensor *voltage_sensor)
void set_aigain(uint32_t aigain)
sensor::Sensor * frequency_sensor_
virtual bool ade_write_16(uint16_t reg, uint16_t value)=0
sensor::Sensor * apparent_power_a_sensor_
sensor::Sensor * current_b_sensor_
void set_irq_pin(InternalGPIOPin *irq_pin)
void set_apparent_power_a_sensor(sensor::Sensor *apparent_power_a)
void set_apparent_power_b_sensor(sensor::Sensor *apparent_power_b)
void set_power_factor_a_sensor(sensor::Sensor *power_factor_a)
void set_vgain(uint32_t vgain)
void set_power_factor_b_sensor(sensor::Sensor *power_factor_b)
virtual bool ade_write_8(uint16_t reg, uint8_t value)=0
sensor::Sensor * active_power_b_sensor_
void set_bigain(uint32_t bigain)
sensor::Sensor * voltage_sensor_
Base-class for all sensors.
Definition sensor.h:47
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
static void uint32_t