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,25 +835,25 @@ void EnergyMarginCheck(void) {
if (Energy->Settings.phase[phase].max_power_limit) { if (Energy->Settings.phase[phase].max_power_limit) {
energy_power_u = (uint16_t)(Energy->active_power[phase]); energy_power_u = (uint16_t)(Energy->active_power[phase]);
bool power_on = (TasmotaGlobal.power & (1 << 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]) { if (!Energy->mplh_counter[phase]) {
Energy->mplh_counter[phase] = Energy->Settings.phase[phase].max_power_limit_hold; Energy->mplh_counter[phase] = Energy->Settings.phase[phase].max_power_limit_hold +1;
} else { }
Energy->mplh_counter[phase]--; Energy->mplh_counter[phase]--;
if (!Energy->mplh_counter[phase]) { if (!Energy->mplh_counter[phase]) {
ResponseTime_P(PSTR(",\"" D_JSON_MAXPOWERREACHED "%d\":%d}"), phase +1, energy_power_u); ResponseTime_P(PSTR(",\"" D_JSON_MAXPOWERREACHED "%d\":%d}"), phase +1, energy_power_u);
MqttPublishPrefixTopicRulesProcess_P(STAT, S_RSLT_WARNING); MqttPublishPrefixTopicRulesProcess_P(STAT, S_RSLT_WARNING);
EnergyMqttShow(); EnergyMqttShow();
if (set_all_power) { if (set_all_power) {
SetAllPower(POWER_OFF_FORCE, SRC_MAXPOWER); SetAllPower(POWER_OFF_FORCE, SRC_MAXPOWER);
} else { } else {
ExecuteCommandPower(phase +1, POWER_OFF_FORCE, SRC_MAXPOWER); ExecuteCommandPower(phase +1, POWER_OFF_FORCE, SRC_MAXPOWER);
}
if (!Energy->mplr_counter[phase]) {
Energy->mplr_counter[phase] = Settings->param[P_MAX_POWER_RETRY] +1; // SetOption33 - Max Power Retry count
}
Energy->mplw_counter[phase] = Energy->Settings.phase[phase].max_power_limit_window;
} }
if (!Energy->mplr_counter[phase]) {
Energy->mplr_counter[phase] = Settings->param[P_MAX_POWER_RETRY] +1; // SetOption33 - Max Power Retry count
}
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)) { else if (power_on && (energy_power_u <= Energy->Settings.phase[phase].max_power_limit)) {