Fix ESP32 MaxPowerHold edge case (#21695)

This commit is contained in:
Theo Arends 2024-07-02 18:07:53 +02:00
parent 0b54d49181
commit 640aabe1b3

View File

@ -835,10 +835,11 @@ void EnergyMarginCheck(void) {
if (Energy->Settings.phase[phase].max_power_limit) {
energy_power_u = (uint16_t)(Energy->active_power[phase]);
bool power_on = (TasmotaGlobal.power & (1 << phase));
if (Energy->active_power[phase] > Energy->Settings.phase[phase].max_power_limit) {
// if (Energy->active_power[phase] > Energy->Settings.phase[phase].max_power_limit) {
if (energy_power_u > Energy->Settings.phase[phase].max_power_limit) {
if (!Energy->mplh_counter[phase]) {
Energy->mplh_counter[phase] = Energy->Settings.phase[phase].max_power_limit_hold;
} else {
Energy->mplh_counter[phase] = Energy->Settings.phase[phase].max_power_limit_hold +1;
}
Energy->mplh_counter[phase]--;
if (!Energy->mplh_counter[phase]) {
ResponseTime_P(PSTR(",\"" D_JSON_MAXPOWERREACHED "%d\":%d}"), phase +1, energy_power_u);
@ -855,7 +856,6 @@ void EnergyMarginCheck(void) {
Energy->mplw_counter[phase] = Energy->Settings.phase[phase].max_power_limit_window;
}
}
}
else if (power_on && (energy_power_u <= Energy->Settings.phase[phase].max_power_limit)) {
Energy->mplh_counter[phase] = 0;
Energy->mplr_counter[phase] = 0;