mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 11:46:31 +00:00
(Try to) fix EnergyReset (again)
(Try to) fix EnergyReset (again) (#6561)
This commit is contained in:
parent
ad73a51023
commit
37c2239d61
@ -30,6 +30,8 @@
|
|||||||
|
|
||||||
#define XNRG_03 3
|
#define XNRG_03 3
|
||||||
|
|
||||||
|
const uint32_t PZEM_STABILIZE = 30; // Number of seconds to stabilize configuration
|
||||||
|
|
||||||
#include <TasmotaSerial.h>
|
#include <TasmotaSerial.h>
|
||||||
|
|
||||||
TasmotaSerial *PzemSerial = nullptr;
|
TasmotaSerial *PzemSerial = nullptr;
|
||||||
@ -192,7 +194,9 @@ void PzemEvery250ms(void)
|
|||||||
Pzem.energy += value;
|
Pzem.energy += value;
|
||||||
if (Pzem.phase == Energy.phase_count -1) {
|
if (Pzem.phase == Energy.phase_count -1) {
|
||||||
if (Pzem.energy > Pzem.last_energy) { // Handle missed phase
|
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.last_energy = Pzem.energy;
|
||||||
}
|
}
|
||||||
Pzem.energy = 0;
|
Pzem.energy = 0;
|
||||||
@ -228,7 +232,7 @@ void PzemEvery250ms(void)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Pzem.send_retry--;
|
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
|
Energy.phase_count--; // Decrement phases if no response after retry within 30 seconds after restart
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,8 @@
|
|||||||
|
|
||||||
#define XNRG_05 5
|
#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>
|
#include <TasmotaModbus.h>
|
||||||
TasmotaModbus *PzemAcModbus;
|
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
|
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.phase == Energy.phase_count -1) {
|
||||||
if (PzemAc.energy > PzemAc.last_energy) { // Handle missed phase
|
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.last_energy = PzemAc.energy;
|
||||||
}
|
}
|
||||||
PzemAc.energy = 0;
|
PzemAc.energy = 0;
|
||||||
@ -105,7 +108,7 @@ void PzemAcEverySecond(void)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PzemAc.send_retry--;
|
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
|
Energy.phase_count--; // Decrement phases if no response after retry within 30 seconds after restart
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,8 @@
|
|||||||
|
|
||||||
#define XNRG_06 6
|
#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>
|
#include <TasmotaModbus.h>
|
||||||
TasmotaModbus *PzemDcModbus;
|
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
|
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.channel == Energy.phase_count -1) {
|
||||||
if (PzemDc.energy > PzemDc.last_energy) { // Handle missed channel
|
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.last_energy = PzemDc.energy;
|
||||||
}
|
}
|
||||||
PzemDc.energy = 0;
|
PzemDc.energy = 0;
|
||||||
@ -102,7 +105,7 @@ void PzemDcEverySecond(void)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PzemDc.send_retry--;
|
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
|
Energy.phase_count--; // Decrement channels if no response after retry within 30 seconds after restart
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user