21 PZEMv2(int8_t pinRX, int8_t pinTX) : pzem(pinRX, pinTX), ip(192, 168, 1, 1) {
24 explicit PZEMv2(HardwareSerial *serial) : pzem(serial), ip(192, 168, 1, 1) {
28 lastReadTime = millis();
30 readValuesFromDevice();
31 updateChannelValues();
34 virtual void readValuesFromDevice() {
35 float current = pzem.current(ip);
38 if (current == PZEM_ERROR_VALUE) {
39 resetReadParameters();
43 float powerFactor = 0;
45 float voltage = pzem.voltage(ip);
46 float active = pzem.power(ip);
47 float apparent = (voltage * current);
48 if (apparent > active) {
49 reactive = sqrt(apparent * apparent - active * active);
53 if (active > apparent) {
55 }
else if (apparent == 0) {
58 powerFactor = (active / apparent);
61 setVoltage(0, voltage * 100);
62 setCurrent(0, current * 1000);
63 setPowerActive(0, active * 100000);
64 setFwdActEnergy(0, pzem.energy(ip) * 100);
65 setPowerApparent(0, apparent * 100000);
66 setPowerReactive(0, reactive * 10000);
67 setPowerFactor(0, powerFactor * 1000);