Fix ESP32 energy monitoring migration

This commit is contained in:
Theo Arends 2023-01-30 13:14:02 +01:00
parent db3fdc5118
commit 5b0ee76173

View File

@ -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];