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