Update energy structure

This commit is contained in:
Theo Arends 2024-07-02 18:47:55 +02:00
parent 640aabe1b3
commit 1fd8de6762
3 changed files with 46 additions and 46 deletions

View File

@ -131,9 +131,9 @@ typedef struct {
bool max_current_flag; bool max_current_flag;
#ifdef USE_ENERGY_POWER_LIMIT #ifdef USE_ENERGY_POWER_LIMIT
uint16_t mplh_counter; uint16_t mpl_hold_counter;
uint16_t mplw_counter; uint16_t mpl_window_counter;
uint8_t mplr_counter; uint8_t mpl_retry_counter;
uint8_t max_energy_state; uint8_t max_energy_state;
#endif // USE_ENERGY_POWER_LIMIT #endif // USE_ENERGY_POWER_LIMIT
#endif // USE_ENERGY_MARGIN_DETECTION #endif // USE_ENERGY_MARGIN_DETECTION
@ -567,34 +567,34 @@ void EnergyMarginCheck(void) {
// Max Power // Max Power
if (Settings->energy_max_power_limit) { if (Settings->energy_max_power_limit) {
if (Energy->active_power[0] > Settings->energy_max_power_limit) { if (Energy->active_power[0] > Settings->energy_max_power_limit) {
if (!Energy->mplh_counter) { if (!Energy->mpl_hold_counter) {
Energy->mplh_counter = Settings->energy_max_power_limit_hold; Energy->mpl_hold_counter = Settings->energy_max_power_limit_hold;
} else { } else {
Energy->mplh_counter--; Energy->mpl_hold_counter--;
if (!Energy->mplh_counter) { if (!Energy->mpl_hold_counter) {
ResponseTime_P(PSTR(",\"" D_JSON_MAXPOWERREACHED "\":%d}"), energy_power_u); ResponseTime_P(PSTR(",\"" D_JSON_MAXPOWERREACHED "\":%d}"), energy_power_u);
MqttPublishPrefixTopicRulesProcess_P(STAT, S_RSLT_WARNING); MqttPublishPrefixTopicRulesProcess_P(STAT, S_RSLT_WARNING);
EnergyMqttShow(); EnergyMqttShow();
SetAllPower(POWER_OFF_FORCE, SRC_MAXPOWER); SetAllPower(POWER_OFF_FORCE, SRC_MAXPOWER);
if (!Energy->mplr_counter) { if (!Energy->mpl_retry_counter) {
Energy->mplr_counter = Settings->param[P_MAX_POWER_RETRY] +1; // SetOption33 - Max Power Retry count Energy->mpl_retry_counter = Settings->param[P_MAX_POWER_RETRY] +1; // SetOption33 - Max Power Retry count
} }
Energy->mplw_counter = Settings->energy_max_power_limit_window; Energy->mpl_window_counter = Settings->energy_max_power_limit_window;
} }
} }
} }
else if (TasmotaGlobal.power && (energy_power_u <= Settings->energy_max_power_limit)) { else if (TasmotaGlobal.power && (energy_power_u <= Settings->energy_max_power_limit)) {
Energy->mplh_counter = 0; Energy->mpl_hold_counter = 0;
Energy->mplr_counter = 0; Energy->mpl_retry_counter = 0;
Energy->mplw_counter = 0; Energy->mpl_window_counter = 0;
} }
if (!TasmotaGlobal.power) { if (!TasmotaGlobal.power) {
if (Energy->mplw_counter) { if (Energy->mpl_window_counter) {
Energy->mplw_counter--; Energy->mpl_window_counter--;
} else { } else {
if (Energy->mplr_counter) { if (Energy->mpl_retry_counter) {
Energy->mplr_counter--; Energy->mpl_retry_counter--;
if (Energy->mplr_counter) { if (Energy->mpl_retry_counter) {
ResponseTime_P(PSTR(",\"" D_JSON_POWERMONITOR "\":\"%s\"}"), GetStateText(1)); ResponseTime_P(PSTR(",\"" D_JSON_POWERMONITOR "\":\"%s\"}"), GetStateText(1));
MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_STAT, PSTR(D_JSON_POWERMONITOR)); MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_STAT, PSTR(D_JSON_POWERMONITOR));
RestorePower(true, SRC_MAXPOWER); RestorePower(true, SRC_MAXPOWER);

View File

@ -181,8 +181,8 @@ typedef struct {
float daily_sum_export_balanced; // 123.123 kWh float daily_sum_export_balanced; // 123.123 kWh
uint16_t power_history[ENERGY_MAX_PHASES][3]; uint16_t power_history[ENERGY_MAX_PHASES][3];
uint16_t mplh_counter[ENERGY_MAX_PHASES]; uint16_t mpl_hold_counter[ENERGY_MAX_PHASES];
uint16_t mplw_counter[ENERGY_MAX_PHASES]; uint16_t mpl_window_counter[ENERGY_MAX_PHASES];
uint8_t data_valid[ENERGY_MAX_PHASES]; uint8_t data_valid[ENERGY_MAX_PHASES];
uint8_t phase_count; // Number of phases active uint8_t phase_count; // Number of phases active
@ -190,7 +190,7 @@ typedef struct {
uint8_t command_code; uint8_t command_code;
uint8_t power_steady_counter; // Allow for power on stabilization uint8_t power_steady_counter; // Allow for power on stabilization
uint8_t margin_stable; uint8_t margin_stable;
uint8_t mplr_counter[ENERGY_MAX_PHASES]; uint8_t mpl_retry_counter[ENERGY_MAX_PHASES];
uint8_t max_energy_state[ENERGY_MAX_PHASES]; uint8_t max_energy_state[ENERGY_MAX_PHASES];
uint8_t hour; uint8_t hour;
@ -837,11 +837,11 @@ void EnergyMarginCheck(void) {
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_power_u > Energy->Settings.phase[phase].max_power_limit) {
if (!Energy->mplh_counter[phase]) { if (!Energy->mpl_hold_counter[phase]) {
Energy->mplh_counter[phase] = Energy->Settings.phase[phase].max_power_limit_hold +1; Energy->mpl_hold_counter[phase] = Energy->Settings.phase[phase].max_power_limit_hold +1;
} }
Energy->mplh_counter[phase]--; Energy->mpl_hold_counter[phase]--;
if (!Energy->mplh_counter[phase]) { if (!Energy->mpl_hold_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();
@ -850,24 +850,24 @@ void EnergyMarginCheck(void) {
} else { } else {
ExecuteCommandPower(phase +1, POWER_OFF_FORCE, SRC_MAXPOWER); ExecuteCommandPower(phase +1, POWER_OFF_FORCE, SRC_MAXPOWER);
} }
if (!Energy->mplr_counter[phase]) { if (!Energy->mpl_retry_counter[phase]) {
Energy->mplr_counter[phase] = Settings->param[P_MAX_POWER_RETRY] +1; // SetOption33 - Max Power Retry count Energy->mpl_retry_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; Energy->mpl_window_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)) {
Energy->mplh_counter[phase] = 0; Energy->mpl_hold_counter[phase] = 0;
Energy->mplr_counter[phase] = 0; Energy->mpl_retry_counter[phase] = 0;
Energy->mplw_counter[phase] = 0; Energy->mpl_window_counter[phase] = 0;
} }
if (!power_on) { if (!power_on) {
if (Energy->mplw_counter[phase]) { if (Energy->mpl_window_counter[phase]) {
Energy->mplw_counter[phase]--; Energy->mpl_window_counter[phase]--;
} else { } else {
if (Energy->mplr_counter[phase]) { if (Energy->mpl_retry_counter[phase]) {
Energy->mplr_counter[phase]--; Energy->mpl_retry_counter[phase]--;
if (Energy->mplr_counter[phase]) { if (Energy->mpl_retry_counter[phase]) {
ResponseTime_P(PSTR(",\"" D_JSON_POWERMONITOR "%d\":\"%s\"}"), phase +1, GetStateText(1)); ResponseTime_P(PSTR(",\"" D_JSON_POWERMONITOR "%d\":\"%s\"}"), phase +1, GetStateText(1));
MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_STAT, PSTR(D_JSON_POWERMONITOR)); MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_STAT, PSTR(D_JSON_POWERMONITOR));
if (set_all_power) { if (set_all_power) {

View File

@ -83,16 +83,16 @@ extern "C" {
{ "import_active", offsetof(tEnergy, import_active[0]), 0, 0, ctypes_float, 0 }, { "import_active", offsetof(tEnergy, import_active[0]), 0, 0, ctypes_float, 0 },
{ "import_active_2", offsetof(tEnergy, import_active[1]), 0, 0, ctypes_float, 0 }, { "import_active_2", offsetof(tEnergy, import_active[1]), 0, 0, ctypes_float, 0 },
{ "import_active_3", offsetof(tEnergy, import_active[2]), 0, 0, ctypes_float, 0 }, { "import_active_3", offsetof(tEnergy, import_active[2]), 0, 0, ctypes_float, 0 },
{ "max_current_flag", offsetof(tEnergy, max_current_flag), 0, 0, ctypes_u8, 0 }, { "max_current_flag", offsetof(tEnergy, max_current_flag[0]), 0, 0, ctypes_u8, 0 },
{ "max_energy_state", offsetof(tEnergy, max_energy_state), 0, 0, ctypes_u8, 0 }, { "max_energy_state", offsetof(tEnergy, max_energy_state[0]), 0, 0, ctypes_u8, 0 },
{ "max_power_flag", offsetof(tEnergy, max_power_flag), 0, 0, ctypes_u8, 0 }, { "max_power_flag", offsetof(tEnergy, max_power_flag[0]), 0, 0, ctypes_u8, 0 },
{ "max_voltage_flag", offsetof(tEnergy, max_voltage_flag), 0, 0, ctypes_u8, 0 }, { "max_voltage_flag", offsetof(tEnergy, max_voltage_flag[0]), 0, 0, ctypes_u8, 0 },
{ "min_current_flag", offsetof(tEnergy, min_current_flag), 0, 0, ctypes_u8, 0 }, { "min_current_flag", offsetof(tEnergy, min_current_flag[0]), 0, 0, ctypes_u8, 0 },
{ "min_power_flag", offsetof(tEnergy, min_power_flag), 0, 0, ctypes_u8, 0 }, { "min_power_flag", offsetof(tEnergy, min_power_flag[0]), 0, 0, ctypes_u8, 0 },
{ "min_voltage_flag", offsetof(tEnergy, min_voltage_flag), 0, 0, ctypes_u8, 0 }, { "min_voltage_flag", offsetof(tEnergy, min_voltage_flag[0]), 0, 0, ctypes_u8, 0 },
{ "mplh_counter", offsetof(tEnergy, mplh_counter), 0, 0, ctypes_u16, 0 }, { "mpl_hold_counter", offsetof(tEnergy, mpl_hold_counter[0]), 0, 0, ctypes_u16, 0 },
{ "mplr_counter", offsetof(tEnergy, mplr_counter), 0, 0, ctypes_u8, 0 }, { "mpl_retry_counter", offsetof(tEnergy, mpl_retry_counter[0]), 0, 0, ctypes_u8, 0 },
{ "mplw_counter", offsetof(tEnergy, mplw_counter), 0, 0, ctypes_u16, 0 }, { "mpl_window_counter", offsetof(tEnergy, mpl_window_counter[0]), 0, 0, ctypes_u16, 0 },
{ "period", offsetof(tEnergy, period_kWh[0]), 0, 0, ctypes_float, 0 }, { "period", offsetof(tEnergy, period_kWh[0]), 0, 0, ctypes_float, 0 },
{ "period_2", offsetof(tEnergy, period_kWh[1]), 0, 0, ctypes_float, 0 }, { "period_2", offsetof(tEnergy, period_kWh[1]), 0, 0, ctypes_float, 0 },
{ "period_3", offsetof(tEnergy, period_kWh[2]), 0, 0, ctypes_float, 0 }, { "period_3", offsetof(tEnergy, period_kWh[2]), 0, 0, ctypes_float, 0 },