40class ThreePhasePZEMv3_ADDR :
public ElectricityMeter {
42#if defined(PZEM004_SOFTSERIAL)
43 ThreePhasePZEMv3_ADDR(uint8_t pinRX1,
45 uint8_t pzem_1_addr = PZEM_1_DEFAULT_ADDR,
46 uint8_t pzem_2_addr = PZEM_2_DEFAULT_ADDR,
47 uint8_t pzem_3_addr = PZEM_3_DEFAULT_ADDR)
48 : pzem{PZEM004Tv30(pinRX1, pinTX1, pzem_1_addr),
49 PZEM004Tv30(pinRX1, pinTX1, pzem_2_addr),
50 PZEM004Tv30(pinRX1, pinTX1, pzem_3_addr)} {
55 ThreePhasePZEMv3_ADDR(HardwareSerial *serial,
58 uint8_t pzem_1_addr = PZEM_1_DEFAULT_ADDR,
59 uint8_t pzem_2_addr = PZEM_2_DEFAULT_ADDR,
60 uint8_t pzem_3_addr = PZEM_3_DEFAULT_ADDR)
61 : pzem{PZEM004Tv30(serial, pinRx1, pinTx1, pzem_1_addr),
62 PZEM004Tv30(serial, pinRx1, pinTx1, pzem_2_addr),
63 PZEM004Tv30(serial, pinRx1, pinTx1, pzem_3_addr)} {
66 ThreePhasePZEMv3_ADDR(HardwareSerial *serial,
67 uint8_t pzem_1_addr = PZEM_1_DEFAULT_ADDR,
68 uint8_t pzem_2_addr = PZEM_2_DEFAULT_ADDR,
69 uint8_t pzem_3_addr = PZEM_3_DEFAULT_ADDR)
70 : pzem{PZEM004Tv30(serial, pzem_1_addr),
71 PZEM004Tv30(serial, pzem_2_addr),
72 PZEM004Tv30(serial, pzem_3_addr)} {
77 lastReadTime = millis();
78 readValuesFromDevice();
79 updateChannelValues();
82 virtual void readValuesFromDevice() {
83 bool atLeatOnePzemWasRead =
false;
84 for (
int i = 0; i < 3; i++) {
85 float current = pzem[i].current();
89 resetReadParametersForPhase(i);
93 atLeatOnePzemWasRead =
true;
95 float voltage = pzem[i].voltage();
96 float active = pzem[i].power();
97 float apparent = (voltage * current);
99 if (apparent > active) {
100 reactive = sqrt(apparent * apparent - active * active);
105 setVoltage(i, voltage * 100);
106 setCurrent(i, current * 1000);
107 setPowerActive(i, active * 100000);
108 setFwdActEnergy(i, pzem[i].energy() * 100000);
109 setPowerFactor(i, pzem[i].pf() * 1000);
110 setPowerApparent(i, apparent * 100000);
111 setPowerReactive(i, reactive * 100000);
113 setFreq(pzem[i].frequency() * 100);
116 if (!atLeatOnePzemWasRead) {
117 resetReadParameters();
121 void resetStorage() {
122 for (
int i = 0; i < 3; i++) {
123 pzem[i].resetEnergy();