26#if defined(PZEM004_SOFTSERIAL)
29 uint8_t pzem_addr = PZEM_0_DEFAULT_ADDR)
30 : pzem{PZEM004Tv30(pinRX1, pinTX1, pzem_addr)} {
35 PZEMv3(HardwareSerial *serial,
38 uint8_t pzem_addr = PZEM_0_DEFAULT_ADDR)
39 : pzem{PZEM004Tv30(serial, pinRx1, pinTx1, pzem_addr)} {
42 explicit PZEMv3(HardwareSerial *serial,
43 uint8_t pzem_addr = PZEM_0_DEFAULT_ADDR)
44 : pzem{PZEM004Tv30(serial, pzem_addr)} {
49 lastReadTime = millis();
50 readValuesFromDevice();
51 updateChannelValues();
54 virtual void readValuesFromDevice() {
55 float current = pzem.current();
59 resetReadParameters();
63 float voltage = pzem.voltage();
64 float active = pzem.power();
65 float apparent = (voltage * current);
67 if (apparent > active) {
68 reactive = sqrt(apparent * apparent - active * active);
73 setVoltage(0, voltage * 100);
74 setCurrent(0, current * 1000);
75 setPowerActive(0, active * 100000);
76 setFwdActEnergy(0, pzem.energy() * 100000);
77 setFreq(pzem.frequency() * 100);
78 setPowerFactor(0, pzem.pf() * 1000);
79 setPowerApparent(0, apparent * 100000);
80 setPowerReactive(0, reactive * 100000);