mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-24 11:16:34 +00:00
Fix energy values after power cycle
Fix energy values after power cycle (#16118)
This commit is contained in:
parent
5c8e67f48f
commit
02d7eb1d7d
@ -550,8 +550,8 @@ typedef struct {
|
||||
uint32_t energy_power_calibration; // 364
|
||||
uint32_t energy_voltage_calibration; // 368
|
||||
uint32_t energy_current_calibration; // 36C
|
||||
uint32_t energy_kWhtoday; // 370
|
||||
uint32_t energy_kWhyesterday; // 374
|
||||
uint32_t ex_energy_kWhtoday; // 370
|
||||
uint32_t ex_energy_kWhyesterday; // 374
|
||||
uint16_t energy_kWhdoy; // 378
|
||||
uint16_t energy_min_power; // 37A
|
||||
uint16_t energy_max_power; // 37C
|
||||
@ -843,7 +843,7 @@ typedef struct {
|
||||
uint16_t flowratemeter_calibration[2];// F78
|
||||
int32_t energy_kWhexport_ph[3]; // F7C
|
||||
uint32_t eth_ipv4_address[5]; // F88
|
||||
uint32_t energy_kWhtotal; // F9C
|
||||
uint32_t ex_energy_kWhtotal; // F9C
|
||||
SBitfield1 sbflag1; // FA0
|
||||
TeleinfoCfg teleinfo; // FA4
|
||||
uint64_t rf_protocol_mask; // FA8
|
||||
|
@ -110,8 +110,8 @@ typedef struct {
|
||||
uint16_t valid; // 290 (RTC memory offset 100)
|
||||
uint8_t oswatch_blocked_loop; // 292
|
||||
uint8_t ota_loader; // 293
|
||||
uint32_t energy_kWhtoday; // 294
|
||||
uint32_t energy_kWhtotal; // 298
|
||||
uint32_t ex_energy_kWhtoday; // 294
|
||||
uint32_t ex_energy_kWhtotal; // 298
|
||||
volatile uint32_t pulse_counter[MAX_COUNTERS]; // 29C - See #9521 why volatile
|
||||
power_t power; // 2AC
|
||||
EnergyUsage energy_usage; // 2B0
|
||||
|
@ -45,8 +45,8 @@ void RtcSettingsSave(void) {
|
||||
if (RTC_MEM_VALID != RtcSettings.valid) {
|
||||
memset(&RtcSettings, 0, sizeof(RtcSettings));
|
||||
RtcSettings.valid = RTC_MEM_VALID;
|
||||
RtcSettings.energy_kWhtoday = Settings->energy_kWhtoday;
|
||||
RtcSettings.energy_kWhtotal = Settings->energy_kWhtotal;
|
||||
// RtcSettings.ex_energy_kWhtoday = Settings->ex_energy_kWhtoday;
|
||||
// RtcSettings.ex_energy_kWhtotal = Settings->ex_energy_kWhtotal;
|
||||
for (uint32_t i = 0; i < 3; i++) {
|
||||
RtcSettings.energy_kWhtoday_ph[i] = Settings->energy_kWhtoday_ph[i];
|
||||
RtcSettings.energy_kWhtotal_ph[i] = Settings->energy_kWhtotal_ph[i];
|
||||
@ -61,6 +61,8 @@ void RtcSettingsSave(void) {
|
||||
RtcSettings.baudrate = APP_BAUDRATE;
|
||||
}
|
||||
|
||||
// AddLog(LOG_LEVEL_INFO, PSTR("DBG: energy_kWhtoday_ph[0] %d/%d"), RtcSettings.energy_kWhtoday_ph[0], Settings->energy_kWhtoday_ph[0]);
|
||||
|
||||
#ifdef ESP8266
|
||||
ESP.rtcUserMemoryWrite(100, (uint32_t*)&RtcSettings, sizeof(RtcSettings));
|
||||
#endif // ESP8266
|
||||
@ -1037,8 +1039,12 @@ void SettingsDefaultSet2(void) {
|
||||
Settings->energy_power_calibration = HLW_PREF_PULSE;
|
||||
Settings->energy_voltage_calibration = HLW_UREF_PULSE;
|
||||
Settings->energy_current_calibration = HLW_IREF_PULSE;
|
||||
// Settings->energy_kWhtoday = 0;
|
||||
// Settings->energy_kWhyesterday = 0;
|
||||
// Settings->energy_kWhtoday_ph[0] = 0;
|
||||
// Settings->energy_kWhtoday_ph[1] = 0;
|
||||
// Settings->energy_kWhtoday_ph[2] = 0;
|
||||
// Settings->energy_kWhyesterday_ph[0] = 0;
|
||||
// Settings->energy_kWhyesterday_ph[1] = 0;
|
||||
// Settings->energy_kWhyesterday_ph[2] = 0;
|
||||
// Settings->energy_kWhdoy = 0;
|
||||
// Settings->energy_min_power = 0;
|
||||
// Settings->energy_max_power = 0;
|
||||
@ -1054,8 +1060,12 @@ void SettingsDefaultSet2(void) {
|
||||
Settings->energy_max_power_safe_limit_window = SAFE_POWER_WINDOW;
|
||||
// Settings->energy_max_energy = 0; // MaxEnergy
|
||||
// Settings->energy_max_energy_start = 0; // MaxEnergyStart
|
||||
// Settings->energy_kWhtotal = 0;
|
||||
RtcSettings.energy_kWhtotal = 0;
|
||||
// Settings->energy_kWhtotal_ph[0] = 0;
|
||||
// Settings->energy_kWhtotal_ph[1] = 0;
|
||||
// Settings->energy_kWhtotal_ph[2] = 0;
|
||||
RtcSettings.energy_kWhtotal_ph[0] = 0;
|
||||
RtcSettings.energy_kWhtotal_ph[1] = 0;
|
||||
RtcSettings.energy_kWhtotal_ph[2] = 0;
|
||||
// memset((char*)&Settings->energy_usage, 0x00, sizeof(Settings->energy_usage));
|
||||
memset((char*)&RtcSettings.energy_usage, 0x00, sizeof(RtcSettings.energy_usage));
|
||||
Settings->param[P_OVER_TEMP] = ENERGY_OVERTEMP;
|
||||
@ -1482,7 +1492,7 @@ void SettingsDelta(void) {
|
||||
memset(&Settings->sensors, 0xFF, 16); // Enable all possible sensors
|
||||
}
|
||||
if (Settings->version < 0x09050004) {
|
||||
Settings->energy_kWhtotal = Settings->ipv4_address[4];
|
||||
Settings->ex_energy_kWhtotal = Settings->ipv4_address[4];
|
||||
ParseIPv4(&Settings->ipv4_address[4], PSTR(WIFI_DNS2));
|
||||
}
|
||||
if (Settings->version < 0x09050005) {
|
||||
@ -1507,6 +1517,11 @@ void SettingsDelta(void) {
|
||||
if (Settings->version < 0x09050009) { // 9.5.0.9
|
||||
memset(&Settings->energy_kWhtoday_ph, 0, 36);
|
||||
memset(&RtcSettings.energy_kWhtoday_ph, 0, 24);
|
||||
Settings->energy_kWhtotal_ph[0] = Settings->ex_energy_kWhtotal;
|
||||
Settings->energy_kWhtoday_ph[0] = Settings->ex_energy_kWhtoday;
|
||||
Settings->energy_kWhyesterday_ph[0] = Settings->ex_energy_kWhyesterday;
|
||||
RtcSettings.energy_kWhtoday_ph[0] = RtcSettings.ex_energy_kWhtoday;
|
||||
RtcSettings.energy_kWhtotal_ph[0] = RtcSettings.ex_energy_kWhtotal;
|
||||
}
|
||||
if (Settings->version < 0x0A000003) { // 10.0.0.3
|
||||
if (0 == Settings->param[P_ARP_GRATUITOUS]) {
|
||||
|
@ -2473,7 +2473,7 @@ void SyslogAsync(bool refresh) {
|
||||
if (!WifiHostByName(SettingsText(SET_SYSLOG_HOST), temp_syslog_host_addr)) { // If sleep enabled this might result in exception so try to do it once using hash
|
||||
TasmotaGlobal.syslog_level = 0;
|
||||
TasmotaGlobal.syslog_timer = SYSLOG_TIMER;
|
||||
AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_RETRY_IN " %d " D_UNIT_SECOND), SYSLOG_TIMER);
|
||||
AddLog(LOG_LEVEL_INFO, PSTR("SLG: " D_RETRY_IN " %d " D_UNIT_SECOND), SYSLOG_TIMER);
|
||||
return;
|
||||
}
|
||||
syslog_host_hash = current_hash;
|
||||
@ -2482,7 +2482,7 @@ void SyslogAsync(bool refresh) {
|
||||
if (!PortUdp.beginPacket(syslog_host_addr, Settings->syslog_port)) {
|
||||
TasmotaGlobal.syslog_level = 0;
|
||||
TasmotaGlobal.syslog_timer = SYSLOG_TIMER;
|
||||
AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_SYSLOG_HOST_NOT_FOUND ". " D_RETRY_IN " %d " D_UNIT_SECOND), SYSLOG_TIMER);
|
||||
AddLog(LOG_LEVEL_INFO, PSTR("SLG: " D_SYSLOG_HOST_NOT_FOUND ". " D_RETRY_IN " %d " D_UNIT_SECOND), SYSLOG_TIMER);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1040,7 +1040,7 @@ void EnergyDrvInit(void) {
|
||||
#endif // USE_ENERGY_MARGIN_DETECTION
|
||||
|
||||
TasmotaGlobal.energy_driver = ENERGY_NONE;
|
||||
XnrgCall(FUNC_PRE_INIT); // Find first energy driver
|
||||
XnrgCall(FUNC_PRE_INIT); // Find first energy driver
|
||||
}
|
||||
|
||||
void EnergySnsInit(void)
|
||||
@ -1048,31 +1048,19 @@ void EnergySnsInit(void)
|
||||
XnrgCall(FUNC_INIT);
|
||||
|
||||
if (TasmotaGlobal.energy_driver) {
|
||||
|
||||
// Update for split phase totals (v9.5.0.9)
|
||||
if ((Settings->energy_kWhtotal > 0) && (0 == Settings->energy_kWhtotal_ph[0])) {
|
||||
Settings->energy_kWhtotal_ph[0] = Settings->energy_kWhtotal;
|
||||
Settings->energy_kWhtoday_ph[0] = Settings->energy_kWhtoday;
|
||||
Settings->energy_kWhyesterday_ph[0] = Settings->energy_kWhyesterday;
|
||||
RtcSettings.energy_kWhtoday_ph[0] = RtcSettings.energy_kWhtoday;
|
||||
RtcSettings.energy_kWhtotal_ph[0] = RtcSettings.energy_kWhtotal;
|
||||
Settings->energy_kWhtotal = 0;
|
||||
}
|
||||
|
||||
// Energy.kWhtoday_offset = 0;
|
||||
// Do not use at Power On as Rtc was invalid (but has been restored from Settings already)
|
||||
if ((ResetReason() != REASON_DEFAULT_RST) && RtcSettingsValid()) {
|
||||
for (uint32_t i = 0; i < 3; i++) {
|
||||
Energy.kWhtoday_offset[i] = RtcSettings.energy_kWhtoday_ph[i];
|
||||
}
|
||||
Energy.kWhtoday_offset_init = true;
|
||||
}
|
||||
for (uint32_t i = 0; i < 3; i++) {
|
||||
// Energy.kWhtoday_ph[i] = 0;
|
||||
// Energy.kWhtoday_delta[i] = 0;
|
||||
// Energy.kWhtoday_offset[i] = 0; // Reset by EnergyDrvInit()
|
||||
// 20220805 - Change from https://github.com/arendst/Tasmota/issues/16118
|
||||
if (RtcSettingsValid()) {
|
||||
Energy.kWhtoday_offset[i] = RtcSettings.energy_kWhtoday_ph[i];
|
||||
RtcSettings.energy_kWhtoday_ph[i] = 0;
|
||||
Energy.kWhtoday_offset_init = true;
|
||||
}
|
||||
// Energy.kWhtoday_ph[i] = 0; // Reset by EnergyDrvInit()
|
||||
// Energy.kWhtoday_delta[i] = 0; // Reset by EnergyDrvInit()
|
||||
Energy.period[i] = Energy.kWhtoday_offset[i];
|
||||
if (Energy.local_energy_active_export) {
|
||||
Energy.export_active[i] = 0;
|
||||
Energy.export_active[i] = 0; // Was set to NAN by EnergyDrvInit()
|
||||
}
|
||||
}
|
||||
EnergyUpdateToday();
|
||||
|
@ -570,7 +570,6 @@ void TInfoDrvInit(void) {
|
||||
Energy.phase_count = 1;
|
||||
// init hardware energy counters
|
||||
Settings->flag3.hardware_energy_total = true;
|
||||
Settings->energy_kWhtotal = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user