mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-27 20:56:35 +00:00
Refactor ESP32 energy
This commit is contained in:
parent
3371fde11e
commit
96a45a6dde
@ -114,12 +114,12 @@ typedef struct {
|
|||||||
uint16_t max_current; // CurrentHigh
|
uint16_t max_current; // CurrentHigh
|
||||||
uint16_t min_power; // PowerLow
|
uint16_t min_power; // PowerLow
|
||||||
uint16_t max_power; // PowerHigh
|
uint16_t max_power; // PowerHigh
|
||||||
uint16_t max_power_limit; // MaxPowerLimit
|
uint16_t max_power_limit; // MaxPower
|
||||||
uint16_t max_power_limit_hold; // MaxPowerLimitHold
|
uint16_t max_power_limit_hold; // MaxPowerHold
|
||||||
uint16_t max_power_limit_window; // MaxPowerLimitWindow
|
uint16_t max_power_limit_window; // MaxPowerWindow
|
||||||
uint16_t max_power_safe_limit; // MaxSafePowerLimit
|
uint16_t max_power_safe_limit; // SafePower
|
||||||
uint16_t max_power_safe_limit_hold; // MaxSafePowerLimitHold
|
uint16_t max_power_safe_limit_hold; // SafePowerHold
|
||||||
uint16_t max_power_safe_limit_window; // MaxSafePowerLimitWindow
|
uint16_t max_power_safe_limit_window; // SafePowerWindow
|
||||||
uint16_t max_energy; // MaxEnergy
|
uint16_t max_energy; // MaxEnergy
|
||||||
uint16_t max_energy_start; // MaxEnergyStart
|
uint16_t max_energy_start; // MaxEnergyStart
|
||||||
} tPhase;
|
} tPhase;
|
||||||
@ -311,10 +311,10 @@ void EnergySettingsLoad(bool erase) {
|
|||||||
Energy->Settings.phase[i].max_current = Settings->energy_max_current;
|
Energy->Settings.phase[i].max_current = Settings->energy_max_current;
|
||||||
Energy->Settings.phase[i].min_power = Settings->energy_min_power;
|
Energy->Settings.phase[i].min_power = Settings->energy_min_power;
|
||||||
Energy->Settings.phase[i].max_power = Settings->energy_max_power;
|
Energy->Settings.phase[i].max_power = Settings->energy_max_power;
|
||||||
Energy->Settings.phase[i].max_power_limit_hold = MAX_POWER_HOLD;
|
Energy->Settings.phase[i].max_power_limit_hold = Settings->energy_max_power_limit_hold;
|
||||||
Energy->Settings.phase[i].max_power_limit_window = MAX_POWER_WINDOW;
|
Energy->Settings.phase[i].max_power_limit_window = Settings->energy_max_power_limit_window;
|
||||||
Energy->Settings.phase[i].max_power_safe_limit_hold = SAFE_POWER_HOLD;
|
Energy->Settings.phase[i].max_power_safe_limit_hold = Settings->energy_max_power_safe_limit_hold;
|
||||||
Energy->Settings.phase[i].max_power_safe_limit_window = SAFE_POWER_WINDOW;
|
Energy->Settings.phase[i].max_power_safe_limit_window = Settings->energy_max_power_safe_limit_window;
|
||||||
}
|
}
|
||||||
Energy->Settings.power_calibration[1] = Settings->energy_power_calibration2;
|
Energy->Settings.power_calibration[1] = Settings->energy_power_calibration2;
|
||||||
Energy->Settings.voltage_calibration[1] = Settings->energy_voltage_calibration2;
|
Energy->Settings.voltage_calibration[1] = Settings->energy_voltage_calibration2;
|
||||||
@ -322,11 +322,7 @@ void EnergySettingsLoad(bool erase) {
|
|||||||
|
|
||||||
// Only restore phase 1 for backward compatibility (all power off)
|
// Only restore phase 1 for backward compatibility (all power off)
|
||||||
Energy->Settings.phase[0].max_power_limit = Settings->energy_max_power_limit;
|
Energy->Settings.phase[0].max_power_limit = Settings->energy_max_power_limit;
|
||||||
Energy->Settings.phase[0].max_power_limit_hold = Settings->energy_max_power_limit_hold;
|
|
||||||
Energy->Settings.phase[0].max_power_limit_window = Settings->energy_max_power_limit_window;
|
|
||||||
Energy->Settings.phase[0].max_power_safe_limit = Settings->energy_max_power_safe_limit;
|
Energy->Settings.phase[0].max_power_safe_limit = Settings->energy_max_power_safe_limit;
|
||||||
Energy->Settings.phase[0].max_power_safe_limit_hold = Settings->energy_max_power_safe_limit_hold;
|
|
||||||
Energy->Settings.phase[0].max_power_safe_limit_window = Settings->energy_max_power_safe_limit_window;
|
|
||||||
Energy->Settings.phase[0].max_energy = Settings->energy_max_energy;
|
Energy->Settings.phase[0].max_energy = Settings->energy_max_energy;
|
||||||
Energy->Settings.phase[0].max_energy_start = Settings->energy_max_energy_start;
|
Energy->Settings.phase[0].max_energy_start = Settings->energy_max_energy_start;
|
||||||
/*
|
/*
|
||||||
@ -727,10 +723,8 @@ void EnergySaveState(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool EnergyMargin(bool type, uint16_t margin, uint16_t value, bool &flag, bool &save_flag) {
|
bool EnergyMargin(bool type, uint16_t margin, uint16_t value, bool &flag, bool &save_flag) {
|
||||||
bool change;
|
if (!margin) { return false; }
|
||||||
|
bool change = save_flag;
|
||||||
if (!margin) return false;
|
|
||||||
change = save_flag;
|
|
||||||
if (type) {
|
if (type) {
|
||||||
flag = (value > margin);
|
flag = (value > margin);
|
||||||
} else {
|
} else {
|
||||||
@ -750,6 +744,7 @@ void EnergyMarginCheck(void) {
|
|||||||
bool jsonflg = false;
|
bool jsonflg = false;
|
||||||
Response_P(PSTR("{\"" D_RSLT_MARGINS "\":{"));
|
Response_P(PSTR("{\"" D_RSLT_MARGINS "\":{"));
|
||||||
|
|
||||||
|
// PowerDelta
|
||||||
int16_t power_diff[ENERGY_MAX_PHASES] = { 0 };
|
int16_t power_diff[ENERGY_MAX_PHASES] = { 0 };
|
||||||
for (uint32_t phase = 0; phase < Energy->phase_count; phase++) {
|
for (uint32_t phase = 0; phase < Energy->phase_count; phase++) {
|
||||||
uint16_t active_power = (uint16_t)(Energy->active_power[phase]);
|
uint16_t active_power = (uint16_t)(Energy->active_power[phase]);
|
||||||
@ -794,6 +789,7 @@ void EnergyMarginCheck(void) {
|
|||||||
ResponseAppend_P(PSTR("\"" D_CMND_POWERDELTA "\":%s"), EnergyFmt(power_diff_f, 0));
|
ResponseAppend_P(PSTR("\"" D_CMND_POWERDELTA "\":%s"), EnergyFmt(power_diff_f, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PowerMargins
|
||||||
uint16_t energy_power_u;
|
uint16_t energy_power_u;
|
||||||
if (Energy->power_on) {
|
if (Energy->power_on) {
|
||||||
bool flag;
|
bool flag;
|
||||||
@ -802,43 +798,29 @@ void EnergyMarginCheck(void) {
|
|||||||
uint16_t energy_voltage_u = (uint16_t)(Energy->voltage[phase]);
|
uint16_t energy_voltage_u = (uint16_t)(Energy->voltage[phase]);
|
||||||
uint16_t energy_current_u = (uint16_t)(Energy->current[phase] * 1000);
|
uint16_t energy_current_u = (uint16_t)(Energy->current[phase] * 1000);
|
||||||
|
|
||||||
DEBUG_DRIVER_LOG(PSTR("NRG: W %d, U %d, I %d"), energy_power_u, energy_voltage_u, energy_current_u);
|
if (EnergyMargin(false, Energy->Settings.phase[phase].min_power, energy_power_u, flag, Energy->min_power_flag[phase])) {
|
||||||
|
ResponseAppend_P(PSTR("%s\"" D_CMND_POWERLOW "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
||||||
if (Energy->Settings.phase[phase].min_power) {
|
jsonflg = true;
|
||||||
if (EnergyMargin(false, Energy->Settings.phase[phase].min_power, energy_power_u, flag, Energy->min_power_flag[phase])) {
|
|
||||||
ResponseAppend_P(PSTR("%s\"" D_CMND_POWERLOW "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
|
||||||
jsonflg = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (Energy->Settings.phase[phase].max_power) {
|
if (EnergyMargin(true, Energy->Settings.phase[phase].max_power, energy_power_u, flag, Energy->max_power_flag[phase])) {
|
||||||
if (EnergyMargin(true, Energy->Settings.phase[phase].max_power, energy_power_u, flag, Energy->max_power_flag[phase])) {
|
ResponseAppend_P(PSTR("%s\"" D_CMND_POWERHIGH "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
||||||
ResponseAppend_P(PSTR("%s\"" D_CMND_POWERHIGH "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
jsonflg = true;
|
||||||
jsonflg = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (Energy->Settings.phase[phase].min_voltage) {
|
if (EnergyMargin(false, Energy->Settings.phase[phase].min_voltage, energy_voltage_u, flag, Energy->min_voltage_flag[phase])) {
|
||||||
if (EnergyMargin(false, Energy->Settings.phase[phase].min_voltage, energy_voltage_u, flag, Energy->min_voltage_flag[phase])) {
|
ResponseAppend_P(PSTR("%s\"" D_CMND_VOLTAGELOW "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
||||||
ResponseAppend_P(PSTR("%s\"" D_CMND_VOLTAGELOW "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
jsonflg = true;
|
||||||
jsonflg = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (Energy->Settings.phase[phase].max_voltage) {
|
if (EnergyMargin(true, Energy->Settings.phase[phase].max_voltage, energy_voltage_u, flag, Energy->max_voltage_flag[phase])) {
|
||||||
if (EnergyMargin(true, Energy->Settings.phase[phase].max_voltage, energy_voltage_u, flag, Energy->max_voltage_flag[phase])) {
|
ResponseAppend_P(PSTR("%s\"" D_CMND_VOLTAGEHIGH "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
||||||
ResponseAppend_P(PSTR("%s\"" D_CMND_VOLTAGEHIGH "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
jsonflg = true;
|
||||||
jsonflg = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (Energy->Settings.phase[phase].min_current) {
|
if (EnergyMargin(false, Energy->Settings.phase[phase].min_current, energy_current_u, flag, Energy->min_current_flag[phase])) {
|
||||||
if (EnergyMargin(false, Energy->Settings.phase[phase].min_current, energy_current_u, flag, Energy->min_current_flag[phase])) {
|
ResponseAppend_P(PSTR("%s\"" D_CMND_CURRENTLOW "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
||||||
ResponseAppend_P(PSTR("%s\"" D_CMND_CURRENTLOW "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
jsonflg = true;
|
||||||
jsonflg = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (Energy->Settings.phase[phase].max_current) {
|
if (EnergyMargin(true, Energy->Settings.phase[phase].max_current, energy_current_u, flag, Energy->max_current_flag[phase])) {
|
||||||
if (EnergyMargin(true, Energy->Settings.phase[phase].max_current, energy_current_u, flag, Energy->max_current_flag[phase])) {
|
ResponseAppend_P(PSTR("%s\"" D_CMND_CURRENTHIGH "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
||||||
ResponseAppend_P(PSTR("%s\"" D_CMND_CURRENTHIGH "%d\":\"%s\""), (jsonflg)?",":"", phase +1, GetStateText(flag));
|
jsonflg = true;
|
||||||
jsonflg = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (jsonflg) {
|
if (jsonflg) {
|
||||||
@ -887,7 +869,6 @@ void EnergyMarginCheck(void) {
|
|||||||
Energy->mplr_counter[phase] = 0;
|
Energy->mplr_counter[phase] = 0;
|
||||||
Energy->mplw_counter[phase] = 0;
|
Energy->mplw_counter[phase] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!power_on) {
|
if (!power_on) {
|
||||||
if (Energy->mplw_counter[phase]) {
|
if (Energy->mplw_counter[phase]) {
|
||||||
Energy->mplw_counter[phase]--;
|
Energy->mplw_counter[phase]--;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user