Fix energy usage/export resolution

Fix energy usage/export resolution (#6444)
This commit is contained in:
Theo Arends 2019-09-22 18:30:55 +02:00
parent ae3ebf1c94
commit 075485e124

View File

@ -160,13 +160,13 @@ void EnergyUpdateToday(void)
if (RtcTime.valid){ // We calc the difference only if we have a valid RTC time. if (RtcTime.valid){ // We calc the difference only if we have a valid RTC time.
uint32_t energy_diff = (uint32_t)(Energy.total * 1000) - RtcSettings.energy_usage.last_usage_kWhtotal; uint32_t energy_diff = (uint32_t)(Energy.total * 100000) - RtcSettings.energy_usage.last_usage_kWhtotal;
RtcSettings.energy_usage.last_usage_kWhtotal = (uint32_t)(Energy.total * 1000); RtcSettings.energy_usage.last_usage_kWhtotal = (uint32_t)(Energy.total * 100000);
uint32_t return_diff = 0; uint32_t return_diff = 0;
if (!isnan(Energy.export_active)) { if (!isnan(Energy.export_active)) {
return_diff = (uint32_t)(Energy.export_active * 1000) - RtcSettings.energy_usage.last_return_kWhtotal; return_diff = (uint32_t)(Energy.export_active * 100000) - RtcSettings.energy_usage.last_return_kWhtotal;
RtcSettings.energy_usage.last_return_kWhtotal = (uint32_t)(Energy.export_active * 1000); RtcSettings.energy_usage.last_return_kWhtotal = (uint32_t)(Energy.export_active * 100000);
} }
if (EnergyTariff1Active()) { // Tarrif1 = Off-Peak if (EnergyTariff1Active()) { // Tarrif1 = Off-Peak
@ -521,31 +521,42 @@ void CmndEnergyReset(void)
if ((XdrvMailbox.index > 3) && (XdrvMailbox.index <= 5)) { if ((XdrvMailbox.index > 3) && (XdrvMailbox.index <= 5)) {
char *p; char *p;
char *str = strtok_r(XdrvMailbox.data, ", ", &p); char *str = strtok_r(XdrvMailbox.data, ", ", &p);
uint32_t position = 0; int32_t position = -1;
uint32_t values[2]; uint32_t values[2];
while ((str != nullptr) && (position <= 1)) { while ((str != nullptr) && (position < 1)) {
uint32_t value = strtoul(str, nullptr, 10); uint32_t value = strtoul(str, nullptr, 10);
values[position] = value; position++;
values[position] = value *100;
str = strtok_r(nullptr, ", ", &p); str = strtok_r(nullptr, ", ", &p);
position += 1;
} }
switch (XdrvMailbox.index) switch (XdrvMailbox.index)
{ {
case 4: case 4:
// Reset energy_usage.usage totals // Reset energy_usage.usage totals
if (position > -1) {
RtcSettings.energy_usage.usage1_kWhtotal = values[0]; RtcSettings.energy_usage.usage1_kWhtotal = values[0];
}
if (position > 0) {
RtcSettings.energy_usage.usage2_kWhtotal = values[1]; RtcSettings.energy_usage.usage2_kWhtotal = values[1];
}
Settings.energy_usage.usage1_kWhtotal = RtcSettings.energy_usage.usage1_kWhtotal; Settings.energy_usage.usage1_kWhtotal = RtcSettings.energy_usage.usage1_kWhtotal;
Settings.energy_usage.usage2_kWhtotal = RtcSettings.energy_usage.usage2_kWhtotal; Settings.energy_usage.usage2_kWhtotal = RtcSettings.energy_usage.usage2_kWhtotal;
break; break;
case 5: case 5:
// Reset energy_usage.return totals // Reset energy_usage.return totals
if (position > -1) {
RtcSettings.energy_usage.return1_kWhtotal = values[0]; RtcSettings.energy_usage.return1_kWhtotal = values[0];
}
if (position > 0) {
RtcSettings.energy_usage.return2_kWhtotal = values[1]; RtcSettings.energy_usage.return2_kWhtotal = values[1];
}
Settings.energy_usage.return1_kWhtotal = RtcSettings.energy_usage.return1_kWhtotal; Settings.energy_usage.return1_kWhtotal = RtcSettings.energy_usage.return1_kWhtotal;
Settings.energy_usage.return2_kWhtotal = RtcSettings.energy_usage.return2_kWhtotal; Settings.energy_usage.return2_kWhtotal = RtcSettings.energy_usage.return2_kWhtotal;
break; break;
} }
} }
@ -556,10 +567,18 @@ void CmndEnergyReset(void)
dtostrfd(Energy.daily, Settings.flag2.energy_resolution, energy_daily_chr); dtostrfd(Energy.daily, Settings.flag2.energy_resolution, energy_daily_chr);
char energy_yesterday_chr[FLOATSZ]; char energy_yesterday_chr[FLOATSZ];
dtostrfd((float)Settings.energy_kWhyesterday / 100000, Settings.flag2.energy_resolution, energy_yesterday_chr); dtostrfd((float)Settings.energy_kWhyesterday / 100000, Settings.flag2.energy_resolution, energy_yesterday_chr);
Response_P(PSTR("{\"%s\":{\"" D_JSON_TOTAL "\":%s,\"" D_JSON_YESTERDAY "\":%s,\"" D_JSON_TODAY "\":%s,\"" D_JSON_USAGE "\":[%d,%d],\"" D_JSON_EXPORT "\":[%d,%d]}}"),
XdrvMailbox.command, energy_total_chr, energy_yesterday_chr, energy_daily_chr, char energy_usage1_chr[FLOATSZ];
Settings.energy_usage.usage1_kWhtotal, Settings.energy_usage.usage2_kWhtotal, dtostrfd((float)Settings.energy_usage.usage1_kWhtotal / 100000, Settings.flag2.energy_resolution, energy_usage1_chr);
Settings.energy_usage.return1_kWhtotal, Settings.energy_usage.return2_kWhtotal); char energy_usage2_chr[FLOATSZ];
dtostrfd((float)Settings.energy_usage.usage2_kWhtotal / 100000, Settings.flag2.energy_resolution, energy_usage2_chr);
char energy_return1_chr[FLOATSZ];
dtostrfd((float)Settings.energy_usage.return1_kWhtotal / 100000, Settings.flag2.energy_resolution, energy_return1_chr);
char energy_return2_chr[FLOATSZ];
dtostrfd((float)Settings.energy_usage.return2_kWhtotal / 100000, Settings.flag2.energy_resolution, energy_return2_chr);
Response_P(PSTR("{\"%s\":{\"" D_JSON_TOTAL "\":%s,\"" D_JSON_YESTERDAY "\":%s,\"" D_JSON_TODAY "\":%s,\"" D_JSON_USAGE "\":[%s,%s],\"" D_JSON_EXPORT "\":[%s,%s]}}"),
XdrvMailbox.command, energy_total_chr, energy_yesterday_chr, energy_daily_chr, energy_usage1_chr, energy_usage2_chr, energy_return1_chr, energy_return2_chr);
} }
void CmndTariff(void) void CmndTariff(void)
@ -936,10 +955,10 @@ void EnergyShow(bool json)
dtostrfd(Energy.export_active, Settings.flag2.energy_resolution, export_active_chr[0]); dtostrfd(Energy.export_active, Settings.flag2.energy_resolution, export_active_chr[0]);
uint8_t energy_total_fields = 1; uint8_t energy_total_fields = 1;
if (Settings.register8[R8_ENERGY_TARIFF1_ST] != Settings.register8[R8_ENERGY_TARIFF2_ST]) { if (Settings.register8[R8_ENERGY_TARIFF1_ST] != Settings.register8[R8_ENERGY_TARIFF2_ST]) {
dtostrfd((float)RtcSettings.energy_usage.usage1_kWhtotal / 1000, Settings.flag2.energy_resolution, energy_total_chr[1]); // Tariff1 dtostrfd((float)RtcSettings.energy_usage.usage1_kWhtotal / 100000, Settings.flag2.energy_resolution, energy_total_chr[1]); // Tariff1
dtostrfd((float)RtcSettings.energy_usage.usage2_kWhtotal / 1000, Settings.flag2.energy_resolution, energy_total_chr[2]); // Tariff2 dtostrfd((float)RtcSettings.energy_usage.usage2_kWhtotal / 100000, Settings.flag2.energy_resolution, energy_total_chr[2]); // Tariff2
dtostrfd((float)RtcSettings.energy_usage.return1_kWhtotal / 1000, Settings.flag2.energy_resolution, export_active_chr[1]); // Tariff1 dtostrfd((float)RtcSettings.energy_usage.return1_kWhtotal / 100000, Settings.flag2.energy_resolution, export_active_chr[1]); // Tariff1
dtostrfd((float)RtcSettings.energy_usage.return2_kWhtotal / 1000, Settings.flag2.energy_resolution, export_active_chr[2]); // Tariff2 dtostrfd((float)RtcSettings.energy_usage.return2_kWhtotal / 100000, Settings.flag2.energy_resolution, export_active_chr[2]); // Tariff2
energy_total_fields = 3; energy_total_fields = 3;
} }
@ -1001,10 +1020,10 @@ void EnergyShow(bool json)
dtostrfd(Energy.total * 1000, 1, energy_total_chr[0]); dtostrfd(Energy.total * 1000, 1, energy_total_chr[0]);
DomoticzSensorPowerEnergy((int)Energy.active_power[0], energy_total_chr[0]); // PowerUsage, EnergyToday DomoticzSensorPowerEnergy((int)Energy.active_power[0], energy_total_chr[0]); // PowerUsage, EnergyToday
dtostrfd(RtcSettings.energy_usage.usage1_kWhtotal, 1, energy_total_chr[1]); // Tariff1 dtostrfd((float)RtcSettings.energy_usage.usage1_kWhtotal / 100, 1, energy_total_chr[1]); // Tariff1
dtostrfd(RtcSettings.energy_usage.usage2_kWhtotal, 1, energy_total_chr[2]); // Tariff2 dtostrfd((float)RtcSettings.energy_usage.usage2_kWhtotal / 100, 1, energy_total_chr[2]); // Tariff2
dtostrfd(RtcSettings.energy_usage.return1_kWhtotal, 1, export_active_chr[1]); dtostrfd((float)RtcSettings.energy_usage.return1_kWhtotal / 100, 1, export_active_chr[1]);
dtostrfd(RtcSettings.energy_usage.return2_kWhtotal, 1, export_active_chr[2]); dtostrfd((float)RtcSettings.energy_usage.return2_kWhtotal / 100, 1, export_active_chr[2]);
DomoticzSensorP1SmartMeter(energy_total_chr[1], energy_total_chr[2], export_active_chr[1], export_active_chr[2], (int)Energy.active_power[0]); DomoticzSensorP1SmartMeter(energy_total_chr[1], energy_total_chr[2], export_active_chr[1], export_active_chr[2], (int)Energy.active_power[0]);
if (Energy.voltage_available) { if (Energy.voltage_available) {