diff --git a/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino b/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino index cf218d91c..413562800 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino @@ -299,13 +299,18 @@ void EnergySettingsLoad(void) { RtcEnergySettings.energy_total_kWh[2] = 0; memset((char*)&RtcEnergySettings.energy_usage, 0x00, sizeof(RtcEnergySettings.energy_usage)); */ + Energy->Settings.energy_kWhdoy = Settings->energy_kWhdoy; for (uint32_t i = 0; i < 3; i++) { - Energy->Settings.energy_today_kWh[i] = (float)(Settings->energy_kWhtoday_ph[i]) / 10000; - Energy->Settings.energy_yesterday_kWh[i] = (float)(Settings->energy_kWhyesterday_ph[i]) / 10000; - Energy->Settings.energy_total_kWh[i] = (float)(Settings->energy_kWhtotal_ph[i]) / 10000; - Energy->Settings.energy_export_kWh[i] = (float)(Settings->energy_kWhexport_ph[i]) / 10000; + Energy->Settings.energy_today_kWh[i] = (float)Settings->energy_kWhtoday_ph[i] / 100000; + Energy->Settings.energy_yesterday_kWh[i] = (float)Settings->energy_kWhyesterday_ph[i] / 100000; + Energy->Settings.energy_total_kWh[i] = (float)Settings->energy_kWhtotal_ph[i] / 1000; + Energy->Settings.energy_export_kWh[i] = (float)Settings->energy_kWhexport_ph[i] / 1000; - Energy->Settings.power_delta[i] = (float)(Settings->energy_power_delta[i]); + Energy->Settings.power_delta[i] = (float)Settings->energy_power_delta[i]; + +// AddLog(LOG_LEVEL_INFO, PSTR("DBG: kWhtoday %d = %4_f, kWhyesterday %d = %4_f"), +// Settings->energy_kWhtoday_ph[i], &Energy->Settings.energy_today_kWh[i], +// Settings->energy_kWhyesterday_ph[i], &Energy->Settings.energy_yesterday_kWh[i]); } // v0102 additions @@ -491,7 +496,7 @@ void EnergyUpdateToday(void) { } } - RtcEnergySettings.energy_today_kWh[i] = Energy->energy_today_offset_kWh[i] + ((float)(Energy->kWhtoday[i]) / 100000); + RtcEnergySettings.energy_today_kWh[i] = Energy->energy_today_offset_kWh[i] + ((float)Energy->kWhtoday[i] / 100000); Energy->daily_kWh[i] = RtcEnergySettings.energy_today_kWh[i]; Energy->total[i] = RtcEnergySettings.energy_total_kWh[i] + RtcEnergySettings.energy_today_kWh[i]; if (Energy->local_energy_active_export) { @@ -564,7 +569,7 @@ void EnergyUpdateTotal(void) { if ((Energy->total[i] < (Energy->import_active[i] - 0.01f)) && // We subtract a little offset of 10Wh to avoid continuous updates Settings->flag3.hardware_energy_total) { // SetOption72 - Enable hardware energy total counter as reference (#6561) // The following calculation allows total usage (Energy->import_active[i]) up to +/-2147483.647 kWh - RtcEnergySettings.energy_total_kWh[i] = Energy->import_active[i] - (Energy->energy_today_offset_kWh[i] + ((float)(Energy->kWhtoday[i]) / 100000)); + RtcEnergySettings.energy_total_kWh[i] = Energy->import_active[i] - (Energy->energy_today_offset_kWh[i] + ((float)Energy->kWhtoday[i] / 100000)); Energy->Settings.energy_total_kWh[i] = RtcEnergySettings.energy_total_kWh[i]; Energy->total[i] = Energy->import_active[i]; Energy->Settings.energy_kWhtotal_time = (!Energy->energy_today_offset_kWh[i]) ? LocalTime() : Midnight(); @@ -601,7 +606,7 @@ void Energy200ms(void) { Energy->kWhtoday_offset_init = true; Energy->Settings.energy_kWhdoy = RtcTime.day_of_year; - for (uint32_t i = 0; i < 3; i++) { + for (uint32_t i = 0; i < ENERGY_MAX_PHASES; i++) { Energy->Settings.energy_yesterday_kWh[i] = RtcEnergySettings.energy_today_kWh[i]; RtcEnergySettings.energy_total_kWh[i] += RtcEnergySettings.energy_today_kWh[i]; @@ -886,7 +891,7 @@ void ResponseCmndEnergyTotalYesterdayToday(void) { float energy_yesterday_kWh[3]; for (uint32_t i = 0; i < Energy->phase_count; i++) { energy_yesterday_kWh[i] = Energy->Settings.energy_yesterday_kWh[i]; - Energy->total[i] = RtcEnergySettings.energy_total_kWh[i] + Energy->energy_today_offset_kWh[i] + ((float)(Energy->kWhtoday[i]) / 100000); + Energy->total[i] = RtcEnergySettings.energy_total_kWh[i] + Energy->energy_today_offset_kWh[i] + ((float)Energy->kWhtoday[i] / 100000); if (Energy->local_energy_active_export) { Energy->export_active[i] = RtcEnergySettings.energy_export_kWh[i]; } @@ -931,7 +936,7 @@ void CmndEnergyTotal(void) { if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) { uint32_t phase = XdrvMailbox.index -1; // Reset Energy Total - RtcEnergySettings.energy_total_kWh[phase] = (float)(values[0]) / 1000; + RtcEnergySettings.energy_total_kWh[phase] = (float)values[0] / 1000; Energy->Settings.energy_total_kWh[phase] = RtcEnergySettings.energy_total_kWh[phase]; if (params > 1) { Energy->Settings.energy_kWhtotal_time = values[1]; @@ -950,7 +955,7 @@ void CmndEnergyYesterday(void) { if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) { uint32_t phase = XdrvMailbox.index -1; // Reset Energy Yesterday - Energy->Settings.energy_yesterday_kWh[phase] = (float)(values[0]) / 1000; + Energy->Settings.energy_yesterday_kWh[phase] = (float)values[0] / 1000; if (params > 1) { Energy->Settings.energy_kWhtotal_time = values[1]; } @@ -966,7 +971,7 @@ void CmndEnergyToday(void) { if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) { uint32_t phase = XdrvMailbox.index -1; // Reset Energy Today - Energy->energy_today_offset_kWh[phase] = (float)(values[0]) / 1000; + Energy->energy_today_offset_kWh[phase] = (float)values[0] / 1000; Energy->kWhtoday[phase] = 0; Energy->kWhtoday_delta[phase] = 0; Energy->start_energy[phase] = 0; @@ -994,7 +999,7 @@ void CmndEnergyExportActive(void) { if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy->phase_count) && (params > 0)) { uint32_t phase = XdrvMailbox.index -1; // Reset Energy Export Active - RtcEnergySettings.energy_export_kWh[phase] = (float)(values[0]) / 1000; + RtcEnergySettings.energy_export_kWh[phase] = (float)values[0] / 1000; Energy->Settings.energy_export_kWh[phase] = RtcEnergySettings.energy_export_kWh[phase]; if (params > 1) { Energy->Settings.energy_kWhtotal_time = values[1]; @@ -1018,9 +1023,9 @@ void CmndEnergyUsage(void) { uint32_t params = ParseParameters(2, values); if (params > 0) { // Reset energy_usage.usage totals - RtcEnergySettings.energy_usage.usage_total_kWh[0] = (float)(values[0]) / 1000; + RtcEnergySettings.energy_usage.usage_total_kWh[0] = (float)values[0] / 1000; if (params > 1) { - RtcEnergySettings.energy_usage.usage_total_kWh[1] = (float)(values[1]) / 1000; + RtcEnergySettings.energy_usage.usage_total_kWh[1] = (float)values[1] / 1000; } Energy->Settings.energy_usage.usage_total_kWh[0] = RtcEnergySettings.energy_usage.usage_total_kWh[0]; Energy->Settings.energy_usage.usage_total_kWh[1] = RtcEnergySettings.energy_usage.usage_total_kWh[1]; @@ -1033,9 +1038,9 @@ void CmndEnergyExport(void) { uint32_t params = ParseParameters(2, values); if (params > 0) { // Reset energy_usage.return totals - RtcEnergySettings.energy_usage.return_total_kWh[0] = (float)(values[0]) / 1000; + RtcEnergySettings.energy_usage.return_total_kWh[0] = (float)values[0] / 1000; if (params > 1) { - RtcEnergySettings.energy_usage.return_total_kWh[1] = (float)(values[1]) / 1000; + RtcEnergySettings.energy_usage.return_total_kWh[1] = (float)values[1] / 1000; } Energy->Settings.energy_usage.return_total_kWh[0] = RtcEnergySettings.energy_usage.return_total_kWh[0]; Energy->Settings.energy_usage.return_total_kWh[1] = RtcEnergySettings.energy_usage.return_total_kWh[1];