diff --git a/tasmota/include/tasmota_types.h b/tasmota/include/tasmota_types.h index 020203940..fc54a728d 100644 --- a/tasmota/include/tasmota_types.h +++ b/tasmota/include/tasmota_types.h @@ -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 diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index 4e72a5b0c..64edd25f5 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -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 diff --git a/tasmota/tasmota_support/settings.ino b/tasmota/tasmota_support/settings.ino index 90cd2f7bd..460fc6a42 100644 --- a/tasmota/tasmota_support/settings.ino +++ b/tasmota/tasmota_support/settings.ino @@ -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]) { diff --git a/tasmota/tasmota_support/support.ino b/tasmota/tasmota_support/support.ino index 27c9007f3..451448141 100755 --- a/tasmota/tasmota_support/support.ino +++ b/tasmota/tasmota_support/support.ino @@ -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; } diff --git a/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino b/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino index a9880ef6d..862ebca7c 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino @@ -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(); diff --git a/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino b/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino index 733d1b091..86d74d9d4 100644 --- a/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino +++ b/tasmota/tasmota_xnrg_energy/xnrg_15_teleinfo.ino @@ -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; } }