34class PZEMv2 :
public OnePhaseElectricityMeter {
36 PZEMv2(int8_t pinRX, int8_t pinTX) : pzem(pinRX, pinTX), ip(192, 168, 1, 1) {
39 explicit PZEMv2(HardwareSerial *serial) : pzem(serial), ip(192, 168, 1, 1) {
43 lastReadTime = millis();
45 readValuesFromDevice();
46 updateChannelValues();
49 virtual void readValuesFromDevice() {
50 float current = pzem.current(ip);
53 if (current == PZEM_ERROR_VALUE) {
54 resetReadParameters();
58 float powerFactor = 0;
60 float voltage = pzem.voltage(ip);
61 float active = pzem.power(ip);
62 float apparent = (voltage * current);
63 if (apparent > active) {
64 reactive = sqrt(apparent * apparent - active * active);
68 if (active > apparent) {
70 }
else if (apparent == 0) {
73 powerFactor = (active / apparent);
76 setVoltage(0, voltage * 100);
77 setCurrent(0, current * 1000);
78 setPowerActive(0, active * 100000);
79 setFwdActEnergy(0, pzem.energy(ip) * 100);
80 setPowerApparent(0, apparent * 100000);
81 setPowerReactive(0, reactive * 10000);
82 setPowerFactor(0, powerFactor * 1000);