27#if defined(PZEM004_SOFTSERIAL)
30 uint8_t pzem_1_addr = PZEM_1_DEFAULT_ADDR,
31 uint8_t pzem_2_addr = PZEM_2_DEFAULT_ADDR,
32 uint8_t pzem_3_addr = PZEM_3_DEFAULT_ADDR)
33 : pzem{PZEM004Tv30(pinRX1, pinTX1, pzem_1_addr),
34 PZEM004Tv30(pinRX1, pinTX1, pzem_2_addr),
35 PZEM004Tv30(pinRX1, pinTX1, pzem_3_addr)} {
43 uint8_t pzem_1_addr = PZEM_1_DEFAULT_ADDR,
44 uint8_t pzem_2_addr = PZEM_2_DEFAULT_ADDR,
45 uint8_t pzem_3_addr = PZEM_3_DEFAULT_ADDR)
46 : pzem{PZEM004Tv30(serial, pinRx1, pinTx1, pzem_1_addr),
47 PZEM004Tv30(serial, pinRx1, pinTx1, pzem_2_addr),
48 PZEM004Tv30(serial, pinRx1, pinTx1, pzem_3_addr)} {
52 uint8_t pzem_1_addr = PZEM_1_DEFAULT_ADDR,
53 uint8_t pzem_2_addr = PZEM_2_DEFAULT_ADDR,
54 uint8_t pzem_3_addr = PZEM_3_DEFAULT_ADDR)
55 : pzem{PZEM004Tv30(serial, pzem_1_addr),
56 PZEM004Tv30(serial, pzem_2_addr),
57 PZEM004Tv30(serial, pzem_3_addr)} {
62 lastReadTime = millis();
63 readValuesFromDevice();
64 updateChannelValues();
67 virtual void readValuesFromDevice() {
68 bool atLeatOnePzemWasRead =
false;
69 for (
int i = 0; i < 3; i++) {
70 float current = pzem[i].current();
74 resetReadParametersForPhase(i);
78 atLeatOnePzemWasRead =
true;
80 float voltage = pzem[i].voltage();
81 float active = pzem[i].power();
82 float apparent = (voltage * current);
84 if (apparent > active) {
85 reactive = sqrt(apparent * apparent - active * active);
90 setVoltage(i, voltage * 100);
91 setCurrent(i, current * 1000);
92 setPowerActive(i, active * 100000);
93 setFwdActEnergy(i, pzem[i].energy() * 100000);
94 setPowerFactor(i, pzem[i].pf() * 1000);
95 setPowerApparent(i, apparent * 100000);
96 setPowerReactive(i, reactive * 100000);
98 setFreq(pzem[i].frequency() * 100);
101 if (!atLeatOnePzemWasRead) {
102 resetReadParameters();
106 void resetStorage() {
107 for (
int i = 0; i < 3; i++) {
108 pzem[i].resetEnergy();