23#if defined(PZEM004_SOFTSERIAL)
30 : pzem{PZEM004Tv30(pinRX1, pinTX1),
31 PZEM004Tv30(pinRX2, pinTX2),
32 PZEM004Tv30(pinRX3, pinTX3)} {
40 HardwareSerial *serial2,
43 HardwareSerial *serial3,
46 : pzem{PZEM004Tv30(serial1, pinRx1, pinTx1),
47 PZEM004Tv30(serial2, pinRx2, pinTx2),
48 PZEM004Tv30(serial3, pinRx3, pinTx3)} {
52 HardwareSerial *serial2,
53 HardwareSerial *serial3)
54 : pzem{PZEM004Tv30(serial1), PZEM004Tv30(serial2), PZEM004Tv30(serial3)} {
59 lastReadTime = millis();
60 readValuesFromDevice();
61 updateChannelValues();
64 virtual void readValuesFromDevice() {
65 bool atLeatOnePzemWasRead =
false;
66 for (
int i = 0; i < 3; i++) {
67 float current = pzem[i].current();
71 resetReadParametersForPhase(i);
75 atLeatOnePzemWasRead =
true;
77 float voltage = pzem[i].voltage();
78 float active = pzem[i].power();
79 float apparent = (voltage * current);
81 if (apparent > active) {
82 reactive = sqrt(apparent * apparent - active * active);
87 setVoltage(i, voltage * 100);
88 setCurrent(i, current * 1000);
89 setPowerActive(i, active * 100000);
90 setFwdActEnergy(i, pzem[i].energy() * 100000);
91 setPowerFactor(i, pzem[i].pf() * 1000);
92 setPowerApparent(i, apparent * 100000);
93 setPowerReactive(i, reactive * 10000);
95 setFreq(pzem[i].frequency() * 100);
98 if (!atLeatOnePzemWasRead) {
99 resetReadParameters();
103 void resetStorage() {
104 for (
int i = 0; i < 3; i++) {
105 pzem[i].resetEnergy();