diff --git a/sonoff/xdrv_03_energy.ino b/sonoff/xdrv_03_energy.ino index d5e9354f8..4e4931b33 100644 --- a/sonoff/xdrv_03_energy.ino +++ b/sonoff/xdrv_03_energy.ino @@ -160,13 +160,13 @@ void EnergyUpdateToday(void) 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; - RtcSettings.energy_usage.last_usage_kWhtotal = (uint32_t)(Energy.total * 1000); + 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 * 100000); uint32_t return_diff = 0; if (!isnan(Energy.export_active)) { - return_diff = (uint32_t)(Energy.export_active * 1000) - RtcSettings.energy_usage.last_return_kWhtotal; - RtcSettings.energy_usage.last_return_kWhtotal = (uint32_t)(Energy.export_active * 1000); + 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 * 100000); } if (EnergyTariff1Active()) { // Tarrif1 = Off-Peak @@ -521,31 +521,42 @@ void CmndEnergyReset(void) if ((XdrvMailbox.index > 3) && (XdrvMailbox.index <= 5)) { char *p; char *str = strtok_r(XdrvMailbox.data, ", ", &p); - uint32_t position = 0; + int32_t position = -1; uint32_t values[2]; - while ((str != nullptr) && (position <= 1)) { + while ((str != nullptr) && (position < 1)) { uint32_t value = strtoul(str, nullptr, 10); - values[position] = value; + position++; + values[position] = value *100; str = strtok_r(nullptr, ", ", &p); - position += 1; } switch (XdrvMailbox.index) { case 4: // Reset energy_usage.usage totals - RtcSettings.energy_usage.usage1_kWhtotal = values[0]; - RtcSettings.energy_usage.usage2_kWhtotal = values[1]; + if (position > -1) { + RtcSettings.energy_usage.usage1_kWhtotal = values[0]; + } + if (position > 0) { + RtcSettings.energy_usage.usage2_kWhtotal = values[1]; + } Settings.energy_usage.usage1_kWhtotal = RtcSettings.energy_usage.usage1_kWhtotal; Settings.energy_usage.usage2_kWhtotal = RtcSettings.energy_usage.usage2_kWhtotal; break; case 5: // Reset energy_usage.return totals - RtcSettings.energy_usage.return1_kWhtotal = values[0]; - RtcSettings.energy_usage.return2_kWhtotal = values[1]; + if (position > -1) { + RtcSettings.energy_usage.return1_kWhtotal = values[0]; + } + if (position > 0) { + RtcSettings.energy_usage.return2_kWhtotal = values[1]; + } Settings.energy_usage.return1_kWhtotal = RtcSettings.energy_usage.return1_kWhtotal; Settings.energy_usage.return2_kWhtotal = RtcSettings.energy_usage.return2_kWhtotal; + + + break; } } @@ -556,10 +567,18 @@ void CmndEnergyReset(void) dtostrfd(Energy.daily, Settings.flag2.energy_resolution, energy_daily_chr); char energy_yesterday_chr[FLOATSZ]; 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, - Settings.energy_usage.usage1_kWhtotal, Settings.energy_usage.usage2_kWhtotal, - Settings.energy_usage.return1_kWhtotal, Settings.energy_usage.return2_kWhtotal); + + char energy_usage1_chr[FLOATSZ]; + dtostrfd((float)Settings.energy_usage.usage1_kWhtotal / 100000, Settings.flag2.energy_resolution, energy_usage1_chr); + 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) @@ -936,10 +955,10 @@ void EnergyShow(bool json) dtostrfd(Energy.export_active, Settings.flag2.energy_resolution, export_active_chr[0]); uint8_t energy_total_fields = 1; 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.usage2_kWhtotal / 1000, 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.return2_kWhtotal / 1000, Settings.flag2.energy_resolution, export_active_chr[2]); // Tariff2 + dtostrfd((float)RtcSettings.energy_usage.usage1_kWhtotal / 100000, Settings.flag2.energy_resolution, energy_total_chr[1]); // Tariff1 + dtostrfd((float)RtcSettings.energy_usage.usage2_kWhtotal / 100000, Settings.flag2.energy_resolution, energy_total_chr[2]); // Tariff2 + dtostrfd((float)RtcSettings.energy_usage.return1_kWhtotal / 100000, Settings.flag2.energy_resolution, export_active_chr[1]); // Tariff1 + dtostrfd((float)RtcSettings.energy_usage.return2_kWhtotal / 100000, Settings.flag2.energy_resolution, export_active_chr[2]); // Tariff2 energy_total_fields = 3; } @@ -1001,10 +1020,10 @@ void EnergyShow(bool json) dtostrfd(Energy.total * 1000, 1, energy_total_chr[0]); 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(RtcSettings.energy_usage.usage2_kWhtotal, 1, energy_total_chr[2]); // Tariff2 - dtostrfd(RtcSettings.energy_usage.return1_kWhtotal, 1, export_active_chr[1]); - dtostrfd(RtcSettings.energy_usage.return2_kWhtotal, 1, export_active_chr[2]); + dtostrfd((float)RtcSettings.energy_usage.usage1_kWhtotal / 100, 1, energy_total_chr[1]); // Tariff1 + dtostrfd((float)RtcSettings.energy_usage.usage2_kWhtotal / 100, 1, energy_total_chr[2]); // Tariff2 + dtostrfd((float)RtcSettings.energy_usage.return1_kWhtotal / 100, 1, export_active_chr[1]); + 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]); if (Energy.voltage_available) {