39class PZEMv3 :
public OnePhaseElectricityMeter {
41#if defined(PZEM004_SOFTSERIAL)
42 PZEMv3(uint8_t pinRX1,
44 uint8_t pzem_addr = PZEM_0_DEFAULT_ADDR)
45 : pzem{PZEM004Tv30(pinRX1, pinTX1, pzem_addr)} {
50 PZEMv3(HardwareSerial *serial,
53 uint8_t pzem_addr = PZEM_0_DEFAULT_ADDR)
54 : pzem{PZEM004Tv30(serial, pinRx1, pinTx1, pzem_addr)} {
57 explicit PZEMv3(HardwareSerial *serial,
58 uint8_t pzem_addr = PZEM_0_DEFAULT_ADDR)
59 : pzem{PZEM004Tv30(serial, pzem_addr)} {
64 lastReadTime = millis();
65 readValuesFromDevice();
66 updateChannelValues();
69 virtual void readValuesFromDevice() {
70 float current = pzem.current();
74 resetReadParameters();
78 float voltage = pzem.voltage();
79 float active = pzem.power();
80 float apparent = (voltage * current);
82 if (apparent > active) {
83 reactive = sqrt(apparent * apparent - active * active);
88 setVoltage(0, voltage * 100);
89 setCurrent(0, current * 1000);
90 setPowerActive(0, active * 100000);
91 setFwdActEnergy(0, pzem.energy() * 100000);
92 setFreq(pzem.frequency() * 100);
93 setPowerFactor(0, pzem.pf() * 1000);
94 setPowerApparent(0, apparent * 100000);
95 setPowerReactive(0, reactive * 100000);