14 if (data.size() < 16) {
15 ESP_LOGW(TAG,
"Invalid size for PZEM DC!");
25 auto pzem_get_16bit = [&](
size_t i) -> uint16_t {
26 return (uint16_t(data[i + 0]) << 8) | (uint16_t(data[i + 1]) << 0);
28 auto pzem_get_32bit = [&](
size_t i) -> uint32_t {
29 return (uint32_t(pzem_get_16bit(i + 2)) << 16) | (uint32_t(pzem_get_16bit(i + 0)) << 0);
35 uint16_t raw_current = pzem_get_16bit(2);
36 float current = raw_current / 100.0f;
38 uint32_t raw_power = pzem_get_32bit(4);
39 float power = raw_power / 10.0f;
41 uint32_t raw_energy = pzem_get_32bit(8);
42 float energy = raw_energy / 1000.0f;
44 ESP_LOGD(TAG,
"PZEM DC: V=%.1f V, I=%.3f A, P=%.1f W", voltage, current, power);