mirror of
https://github.com/arendst/Tasmota.git
synced 2025-08-05 17:07:42 +00:00
Fix energy usage/export resolution
Fix energy usage/export resolution (#6444)
This commit is contained in:
parent
ae3ebf1c94
commit
075485e124
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user