mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 19:56:30 +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_power_calibration; // 364
|
||||||
uint32_t energy_voltage_calibration; // 368
|
uint32_t energy_voltage_calibration; // 368
|
||||||
uint32_t energy_current_calibration; // 36C
|
uint32_t energy_current_calibration; // 36C
|
||||||
uint32_t energy_kWhtoday; // 370
|
uint32_t ex_energy_kWhtoday; // 370
|
||||||
uint32_t energy_kWhyesterday; // 374
|
uint32_t ex_energy_kWhyesterday; // 374
|
||||||
uint16_t energy_kWhdoy; // 378
|
uint16_t energy_kWhdoy; // 378
|
||||||
uint16_t energy_min_power; // 37A
|
uint16_t energy_min_power; // 37A
|
||||||
uint16_t energy_max_power; // 37C
|
uint16_t energy_max_power; // 37C
|
||||||
@ -843,7 +843,7 @@ typedef struct {
|
|||||||
uint16_t flowratemeter_calibration[2];// F78
|
uint16_t flowratemeter_calibration[2];// F78
|
||||||
int32_t energy_kWhexport_ph[3]; // F7C
|
int32_t energy_kWhexport_ph[3]; // F7C
|
||||||
uint32_t eth_ipv4_address[5]; // F88
|
uint32_t eth_ipv4_address[5]; // F88
|
||||||
uint32_t energy_kWhtotal; // F9C
|
uint32_t ex_energy_kWhtotal; // F9C
|
||||||
SBitfield1 sbflag1; // FA0
|
SBitfield1 sbflag1; // FA0
|
||||||
TeleinfoCfg teleinfo; // FA4
|
TeleinfoCfg teleinfo; // FA4
|
||||||
uint64_t rf_protocol_mask; // FA8
|
uint64_t rf_protocol_mask; // FA8
|
||||||
|
@ -110,8 +110,8 @@ typedef struct {
|
|||||||
uint16_t valid; // 290 (RTC memory offset 100)
|
uint16_t valid; // 290 (RTC memory offset 100)
|
||||||
uint8_t oswatch_blocked_loop; // 292
|
uint8_t oswatch_blocked_loop; // 292
|
||||||
uint8_t ota_loader; // 293
|
uint8_t ota_loader; // 293
|
||||||
uint32_t energy_kWhtoday; // 294
|
uint32_t ex_energy_kWhtoday; // 294
|
||||||
uint32_t energy_kWhtotal; // 298
|
uint32_t ex_energy_kWhtotal; // 298
|
||||||
volatile uint32_t pulse_counter[MAX_COUNTERS]; // 29C - See #9521 why volatile
|
volatile uint32_t pulse_counter[MAX_COUNTERS]; // 29C - See #9521 why volatile
|
||||||
power_t power; // 2AC
|
power_t power; // 2AC
|
||||||
EnergyUsage energy_usage; // 2B0
|
EnergyUsage energy_usage; // 2B0
|
||||||
|
@ -45,8 +45,8 @@ void RtcSettingsSave(void) {
|
|||||||
if (RTC_MEM_VALID != RtcSettings.valid) {
|
if (RTC_MEM_VALID != RtcSettings.valid) {
|
||||||
memset(&RtcSettings, 0, sizeof(RtcSettings));
|
memset(&RtcSettings, 0, sizeof(RtcSettings));
|
||||||
RtcSettings.valid = RTC_MEM_VALID;
|
RtcSettings.valid = RTC_MEM_VALID;
|
||||||
RtcSettings.energy_kWhtoday = Settings->energy_kWhtoday;
|
// RtcSettings.ex_energy_kWhtoday = Settings->ex_energy_kWhtoday;
|
||||||
RtcSettings.energy_kWhtotal = Settings->energy_kWhtotal;
|
// RtcSettings.ex_energy_kWhtotal = Settings->ex_energy_kWhtotal;
|
||||||
for (uint32_t i = 0; i < 3; i++) {
|
for (uint32_t i = 0; i < 3; i++) {
|
||||||
RtcSettings.energy_kWhtoday_ph[i] = Settings->energy_kWhtoday_ph[i];
|
RtcSettings.energy_kWhtoday_ph[i] = Settings->energy_kWhtoday_ph[i];
|
||||||
RtcSettings.energy_kWhtotal_ph[i] = Settings->energy_kWhtotal_ph[i];
|
RtcSettings.energy_kWhtotal_ph[i] = Settings->energy_kWhtotal_ph[i];
|
||||||
@ -61,6 +61,8 @@ void RtcSettingsSave(void) {
|
|||||||
RtcSettings.baudrate = APP_BAUDRATE;
|
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
|
#ifdef ESP8266
|
||||||
ESP.rtcUserMemoryWrite(100, (uint32_t*)&RtcSettings, sizeof(RtcSettings));
|
ESP.rtcUserMemoryWrite(100, (uint32_t*)&RtcSettings, sizeof(RtcSettings));
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
@ -1037,8 +1039,12 @@ void SettingsDefaultSet2(void) {
|
|||||||
Settings->energy_power_calibration = HLW_PREF_PULSE;
|
Settings->energy_power_calibration = HLW_PREF_PULSE;
|
||||||
Settings->energy_voltage_calibration = HLW_UREF_PULSE;
|
Settings->energy_voltage_calibration = HLW_UREF_PULSE;
|
||||||
Settings->energy_current_calibration = HLW_IREF_PULSE;
|
Settings->energy_current_calibration = HLW_IREF_PULSE;
|
||||||
// Settings->energy_kWhtoday = 0;
|
// Settings->energy_kWhtoday_ph[0] = 0;
|
||||||
// Settings->energy_kWhyesterday = 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_kWhdoy = 0;
|
||||||
// Settings->energy_min_power = 0;
|
// Settings->energy_min_power = 0;
|
||||||
// Settings->energy_max_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_power_safe_limit_window = SAFE_POWER_WINDOW;
|
||||||
// Settings->energy_max_energy = 0; // MaxEnergy
|
// Settings->energy_max_energy = 0; // MaxEnergy
|
||||||
// Settings->energy_max_energy_start = 0; // MaxEnergyStart
|
// Settings->energy_max_energy_start = 0; // MaxEnergyStart
|
||||||
// Settings->energy_kWhtotal = 0;
|
// Settings->energy_kWhtotal_ph[0] = 0;
|
||||||
RtcSettings.energy_kWhtotal = 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*)&Settings->energy_usage, 0x00, sizeof(Settings->energy_usage));
|
||||||
memset((char*)&RtcSettings.energy_usage, 0x00, sizeof(RtcSettings.energy_usage));
|
memset((char*)&RtcSettings.energy_usage, 0x00, sizeof(RtcSettings.energy_usage));
|
||||||
Settings->param[P_OVER_TEMP] = ENERGY_OVERTEMP;
|
Settings->param[P_OVER_TEMP] = ENERGY_OVERTEMP;
|
||||||
@ -1482,7 +1492,7 @@ void SettingsDelta(void) {
|
|||||||
memset(&Settings->sensors, 0xFF, 16); // Enable all possible sensors
|
memset(&Settings->sensors, 0xFF, 16); // Enable all possible sensors
|
||||||
}
|
}
|
||||||
if (Settings->version < 0x09050004) {
|
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));
|
ParseIPv4(&Settings->ipv4_address[4], PSTR(WIFI_DNS2));
|
||||||
}
|
}
|
||||||
if (Settings->version < 0x09050005) {
|
if (Settings->version < 0x09050005) {
|
||||||
@ -1507,6 +1517,11 @@ void SettingsDelta(void) {
|
|||||||
if (Settings->version < 0x09050009) { // 9.5.0.9
|
if (Settings->version < 0x09050009) { // 9.5.0.9
|
||||||
memset(&Settings->energy_kWhtoday_ph, 0, 36);
|
memset(&Settings->energy_kWhtoday_ph, 0, 36);
|
||||||
memset(&RtcSettings.energy_kWhtoday_ph, 0, 24);
|
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 (Settings->version < 0x0A000003) { // 10.0.0.3
|
||||||
if (0 == Settings->param[P_ARP_GRATUITOUS]) {
|
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
|
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_level = 0;
|
||||||
TasmotaGlobal.syslog_timer = SYSLOG_TIMER;
|
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;
|
return;
|
||||||
}
|
}
|
||||||
syslog_host_hash = current_hash;
|
syslog_host_hash = current_hash;
|
||||||
@ -2482,7 +2482,7 @@ void SyslogAsync(bool refresh) {
|
|||||||
if (!PortUdp.beginPacket(syslog_host_addr, Settings->syslog_port)) {
|
if (!PortUdp.beginPacket(syslog_host_addr, Settings->syslog_port)) {
|
||||||
TasmotaGlobal.syslog_level = 0;
|
TasmotaGlobal.syslog_level = 0;
|
||||||
TasmotaGlobal.syslog_timer = SYSLOG_TIMER;
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1040,7 +1040,7 @@ void EnergyDrvInit(void) {
|
|||||||
#endif // USE_ENERGY_MARGIN_DETECTION
|
#endif // USE_ENERGY_MARGIN_DETECTION
|
||||||
|
|
||||||
TasmotaGlobal.energy_driver = ENERGY_NONE;
|
TasmotaGlobal.energy_driver = ENERGY_NONE;
|
||||||
XnrgCall(FUNC_PRE_INIT); // Find first energy driver
|
XnrgCall(FUNC_PRE_INIT); // Find first energy driver
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnergySnsInit(void)
|
void EnergySnsInit(void)
|
||||||
@ -1048,31 +1048,19 @@ void EnergySnsInit(void)
|
|||||||
XnrgCall(FUNC_INIT);
|
XnrgCall(FUNC_INIT);
|
||||||
|
|
||||||
if (TasmotaGlobal.energy_driver) {
|
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++) {
|
for (uint32_t i = 0; i < 3; i++) {
|
||||||
// Energy.kWhtoday_ph[i] = 0;
|
// Energy.kWhtoday_offset[i] = 0; // Reset by EnergyDrvInit()
|
||||||
// Energy.kWhtoday_delta[i] = 0;
|
// 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];
|
Energy.period[i] = Energy.kWhtoday_offset[i];
|
||||||
if (Energy.local_energy_active_export) {
|
if (Energy.local_energy_active_export) {
|
||||||
Energy.export_active[i] = 0;
|
Energy.export_active[i] = 0; // Was set to NAN by EnergyDrvInit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EnergyUpdateToday();
|
EnergyUpdateToday();
|
||||||
|
@ -570,7 +570,6 @@ void TInfoDrvInit(void) {
|
|||||||
Energy.phase_count = 1;
|
Energy.phase_count = 1;
|
||||||
// init hardware energy counters
|
// init hardware energy counters
|
||||||
Settings->flag3.hardware_energy_total = true;
|
Settings->flag3.hardware_energy_total = true;
|
||||||
Settings->energy_kWhtotal = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user