Closed Aleks130699 closed 2 years ago
Да скорее всего это проблема переполнения переменной, посчитал что 378 квт, это как раз 5 полных раз по 65,5 квт, и остается примерно 50 квт
ОК, понял, похоже проблема вот здесь.
energy = __builtin_bswap16(*(uint16_t*)&value[REG_ENERGY_L*2]) | __builtin_bswap16(*(uint16_t*)&value[REG_ENERGY_H*2] << 16);
Сначала нужно делать байт своп, а потом сдвиг, поправлю тогда вечерком.
P.S. хороший у вас расход :)
16 бит для этих чисел скорее всего не хватает, как по мне, ну вам лучше знать)
само значение энергии 32 битное, но пзем отдает его как два 16 битных регистра с перевернутым порядком старшего байта. Я ошибочно сдвиг под скобку внёс ) поправил - тестируйте.
Проверил, все круто, теперь правильно показывает
{"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