vortigont / pzem-edl

An event-driven library for ESP32 implementing PZEM-004T v3.0 / PZEM-003 / PZEM-017 Modbus-RTU proto
GNU General Public License v3.0
21 stars 4 forks source link

Значение потребленной мощности в киловатт часах, сбросилось и начало считать заново #1

Closed Aleks130699 closed 2 years ago

Aleks130699 commented 2 years ago

{"age":245,"U":200.1,"I":10.79,"P":2104,"W":16976,"hz":50.0,"pF":0.97} Вчера значение когда подключил esp значение показало 52квч, хотя на прошивке тасмола было 378 квч, сегодня же значение пошло считать заново, при этом достало примерно до 65квч и сбросилось, мое предположение что это проблема может быть в переменной unsigned int у которой значения 0… 65 535

Aleks130699 commented 2 years ago

Да скорее всего это проблема переполнения переменной, посчитал что 378 квт, это как раз 5 полных раз по 65,5 квт, и остается примерно 50 квт

vortigont commented 2 years ago

ОК, понял, похоже проблема вот здесь.

        energy  = __builtin_bswap16(*(uint16_t*)&value[REG_ENERGY_L*2])  | __builtin_bswap16(*(uint16_t*)&value[REG_ENERGY_H*2]   << 16);

Сначала нужно делать байт своп, а потом сдвиг, поправлю тогда вечерком.

vortigont commented 2 years ago

P.S. хороший у вас расход :)

Aleks130699 commented 2 years ago

16 бит для этих чисел скорее всего не хватает, как по мне, ну вам лучше знать)

vortigont commented 2 years ago

само значение энергии 32 битное, но пзем отдает его как два 16 битных регистра с перевернутым порядком старшего байта. Я ошибочно сдвиг под скобку внёс ) поправил - тестируйте.

Aleks130699 commented 2 years ago

Проверил, все круто, теперь правильно показывает