(Try to) fix EnergyReset (again)

(Try to) fix EnergyReset (again) (#6561)
This commit is contained in:
Theo Arends 2019-10-20 15:48:14 +02:00
parent ad73a51023
commit 37c2239d61
3 changed files with 18 additions and 8 deletions

View File

@ -30,6 +30,8 @@
#define XNRG_03 3
const uint32_t PZEM_STABILIZE = 30; // Number of seconds to stabilize configuration
#include <TasmotaSerial.h>
TasmotaSerial *PzemSerial = nullptr;
@ -192,7 +194,9 @@ void PzemEvery250ms(void)
Pzem.energy += value;
if (Pzem.phase == Energy.phase_count -1) {
if (Pzem.energy > Pzem.last_energy) { // Handle missed phase
EnergyUpdateTotal(Pzem.energy, false);
if (uptime > PZEM_STABILIZE) {
EnergyUpdateTotal(Pzem.energy, false);
}
Pzem.last_energy = Pzem.energy;
}
Pzem.energy = 0;
@ -228,7 +232,7 @@ void PzemEvery250ms(void)
}
else {
Pzem.send_retry--;
if ((Energy.phase_count > 1) && (0 == Pzem.send_retry) && (uptime < 30)) {
if ((Energy.phase_count > 1) && (0 == Pzem.send_retry) && (uptime < PZEM_STABILIZE)) {
Energy.phase_count--; // Decrement phases if no response after retry within 30 seconds after restart
}
}

View File

@ -31,7 +31,8 @@
#define XNRG_05 5
#define PZEM_AC_DEVICE_ADDRESS 0x01 // PZEM default address
const uint8_t PZEM_AC_DEVICE_ADDRESS = 0x01; // PZEM default address
const uint32_t PZEM_AC_STABILIZE = 30; // Number of seconds to stabilize configuration
#include <TasmotaModbus.h>
TasmotaModbus *PzemAcModbus;
@ -79,7 +80,9 @@ void PzemAcEverySecond(void)
PzemAc.energy += (float)((buffer[15] << 24) + (buffer[16] << 16) + (buffer[13] << 8) + buffer[14]); // 4294967295 Wh
if (PzemAc.phase == Energy.phase_count -1) {
if (PzemAc.energy > PzemAc.last_energy) { // Handle missed phase
EnergyUpdateTotal(PzemAc.energy, false);
if (uptime > PZEM_AC_STABILIZE) {
EnergyUpdateTotal(PzemAc.energy, false);
}
PzemAc.last_energy = PzemAc.energy;
}
PzemAc.energy = 0;
@ -105,7 +108,7 @@ void PzemAcEverySecond(void)
}
else {
PzemAc.send_retry--;
if ((Energy.phase_count > 1) && (0 == PzemAc.send_retry) && (uptime < 30)) {
if ((Energy.phase_count > 1) && (0 == PzemAc.send_retry) && (uptime < PZEM_AC_STABILIZE)) {
Energy.phase_count--; // Decrement phases if no response after retry within 30 seconds after restart
}
}

View File

@ -31,7 +31,8 @@
#define XNRG_06 6
#define PZEM_DC_DEVICE_ADDRESS 0x01 // PZEM default address
const uint8_t PZEM_DC_DEVICE_ADDRESS = 0x01; // PZEM default address
const uint32_t PZEM_DC_STABILIZE = 30; // Number of seconds to stabilize configuration
#include <TasmotaModbus.h>
TasmotaModbus *PzemDcModbus;
@ -77,7 +78,9 @@ void PzemDcEverySecond(void)
PzemDc.energy += (float)((buffer[13] << 24) + (buffer[14] << 16) + (buffer[11] << 8) + buffer[12]); // 4294967295 Wh
if (PzemDc.channel == Energy.phase_count -1) {
if (PzemDc.energy > PzemDc.last_energy) { // Handle missed channel
EnergyUpdateTotal(PzemDc.energy, false);
if (uptime > PZEM_DC_STABILIZE) {
EnergyUpdateTotal(PzemDc.energy, false);
}
PzemDc.last_energy = PzemDc.energy;
}
PzemDc.energy = 0;
@ -102,7 +105,7 @@ void PzemDcEverySecond(void)
}
else {
PzemDc.send_retry--;
if ((Energy.phase_count > 1) && (0 == PzemDc.send_retry) && (uptime < 30)) {
if ((Energy.phase_count > 1) && (0 == PzemDc.send_retry) && (uptime < PZEM_DC_STABILIZE)) {
Energy.phase_count--; // Decrement channels if no response after retry within 30 seconds after restart
}
}