diff --git a/tasmota/include/i18n.h b/tasmota/include/i18n.h index bc0382d1b..6bf37dd97 100644 --- a/tasmota/include/i18n.h +++ b/tasmota/include/i18n.h @@ -970,6 +970,7 @@ const char HTTP_SNS_POWER[] PROGMEM = "{s}" D_POWERUSAGE_ACTIVE const char HTTP_SNS_IMPORT_POWER[] PROGMEM = "{s}" D_IMPORT_POWER "{m}%s " D_UNIT_WATT "{e}"; const char HTTP_SNS_EXPORT_POWER[] PROGMEM = "{s}" D_EXPORT_POWER "{m}%s " D_UNIT_WATT "{e}"; const char HTTP_SNS_MAX_POWER[] PROGMEM = "{s}" D_MAX_POWER "{m}%s " D_UNIT_WATT "{e}"; +const char HTTP_SNS_POWER_TOTAL[] PROGMEM = "{s}" D_POWERUSAGE_ACTIVE_TOTAL "{m}%s " D_UNIT_WATT "{e}"; const char HTTP_SNS_POWERUSAGE_APPARENT[] PROGMEM = "{s}" D_POWERUSAGE_APPARENT "{m}%s " D_UNIT_VA "{e}"; const char HTTP_SNS_POWERUSAGE_REACTIVE[] PROGMEM = "{s}" D_POWERUSAGE_REACTIVE "{m}%s " D_UNIT_VAR "{e}"; const char HTTP_SNS_POWER_FACTOR[] PROGMEM = "{s}" D_POWER_FACTOR "{m}%s {e}"; diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 24d16492a..29feac9c0 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Krag faktor" #define D_POWERUSAGE "Krag" #define D_POWERUSAGE_ACTIVE "Regte krag" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Oënskynlike krag" #define D_POWERUSAGE_REACTIVE "reaktiewe krag" #define D_PRESSURE "Druk" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 1dc41734d..b4f78d202 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Фактор на мощността" #define D_POWERUSAGE "Мощност" #define D_POWERUSAGE_ACTIVE "Активна мощност" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Пълна мощност" #define D_POWERUSAGE_REACTIVE "Реактивна мощност" #define D_PRESSURE "Налягане" diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h index 6b95db866..686516f4e 100644 --- a/tasmota/language/ca_AD.h +++ b/tasmota/language/ca_AD.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Factor de poténcia" #define D_POWERUSAGE "Poténcia" #define D_POWERUSAGE_ACTIVE "Poténcia Activa" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Poténcia Aparent" #define D_POWERUSAGE_REACTIVE "Poténcia Reactiva" #define D_PRESSURE "Pressió" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index c5bf8e085..5c724a1cb 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Účiník" #define D_POWERUSAGE "Příkon" #define D_POWERUSAGE_ACTIVE "Činný příkon" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Zdánlivý příkon" #define D_POWERUSAGE_REACTIVE "Jalový příkon" #define D_PRESSURE "Tlak" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index e9f1cdb3e..a3b79886c 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Leistungsfaktor" #define D_POWERUSAGE "Leistung" #define D_POWERUSAGE_ACTIVE "Wirkleistung" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Scheinleistung" #define D_POWERUSAGE_REACTIVE "Blindleistung" #define D_PRESSURE "Luftdruck" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 7745b7744..fb00043ee 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Συντελεστής Ισχύος" #define D_POWERUSAGE "Ισχύς" #define D_POWERUSAGE_ACTIVE "Ενεργός ισχύς" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Φαινόμενη ισχύς" #define D_POWERUSAGE_REACTIVE "Άεργη ισχύς" #define D_PRESSURE "Πίεση" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index df6faf3ce..e87e497f6 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Power Factor" #define D_POWERUSAGE "Power" #define D_POWERUSAGE_ACTIVE "Active Power" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Apparent Power" #define D_POWERUSAGE_REACTIVE "Reactive Power" #define D_PRESSURE "Pressure" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 10b268ad2..71ddb6870 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Factor de Potencia" #define D_POWERUSAGE "Potencia" #define D_POWERUSAGE_ACTIVE "Potencia Activa" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Potencia Aparente" #define D_POWERUSAGE_REACTIVE "Potencia Reactiva" #define D_PRESSURE "Presión" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 7e096029b..ae3a5a5f1 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Fact de puiss" #define D_POWERUSAGE "Puissance" #define D_POWERUSAGE_ACTIVE "Puiss active" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Puiss apparente" #define D_POWERUSAGE_REACTIVE "Puiss réactive" #define D_PRESSURE "Pression" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index b02cc954e..8d9044092 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Krêftfaktor" #define D_POWERUSAGE "Krêft" #define D_POWERUSAGE_ACTIVE "Eigentlike krêft" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Skynber krêft" #define D_POWERUSAGE_REACTIVE "Blynde krêft" #define D_PRESSURE "Luchtdruk" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 15d5bc7fc..153ce075a 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "גורם כוח" #define D_POWERUSAGE "כוח" #define D_POWERUSAGE_ACTIVE "כוח פעיל" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "כוח לכאורה" #define D_POWERUSAGE_REACTIVE "כוח תגובתי" #define D_PRESSURE "לחץ" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 594ca2064..45d1599f3 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Teljesítménytényező" #define D_POWERUSAGE "Energiafelhasználás" #define D_POWERUSAGE_ACTIVE "Aktív teljesítmény" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Látszólagos teljesítmény" #define D_POWERUSAGE_REACTIVE "Reaktív teljesítmény" #define D_PRESSURE "Nyomás" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index d75fd4c9b..55d1f5dd1 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Fattore di potenza" #define D_POWERUSAGE "Potenza" #define D_POWERUSAGE_ACTIVE "Potenza attiva" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Potenza apparente" #define D_POWERUSAGE_REACTIVE "Potenza reattiva" #define D_PRESSURE "Pressione" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 898fc249d..858233864 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Power Factor" #define D_POWERUSAGE "전원" #define D_POWERUSAGE_ACTIVE "Active Power" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Apparent Power" #define D_POWERUSAGE_REACTIVE "Reactive Power" #define D_PRESSURE "기압" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 33311ed0b..31ebb5a90 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Arbeidsfactor" #define D_POWERUSAGE "Vermogen" #define D_POWERUSAGE_ACTIVE "Werkelijk vermogen" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Schijnbaar vermogen" #define D_POWERUSAGE_REACTIVE "Blindvermogen" #define D_PRESSURE "Luchtdruk" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 155902134..4e0b0b911 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Cosinus fi" #define D_POWERUSAGE "Moc" #define D_POWERUSAGE_ACTIVE "Moc czynna" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Moc pozorna" #define D_POWERUSAGE_REACTIVE "Moc bierna" #define D_PRESSURE "Ciśnienie" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index e7a3f412a..6a025b02d 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Fator de potência" #define D_POWERUSAGE "Potência" #define D_POWERUSAGE_ACTIVE "Potência ativa" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Potência aparente" #define D_POWERUSAGE_REACTIVE "Potência reativa" #define D_PRESSURE "Pressão" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 80113c383..ed986fe56 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Factor de Potência" #define D_POWERUSAGE "Potência" #define D_POWERUSAGE_ACTIVE "Potência Ativa" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Potência Aparente" #define D_POWERUSAGE_REACTIVE "Potência Reativa" #define D_PRESSURE "Pressão" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index a3fc84e4d..6b83f73ef 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Factor de Putere" #define D_POWERUSAGE "Putere" #define D_POWERUSAGE_ACTIVE "Putere Activă" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Putere Aparentă" #define D_POWERUSAGE_REACTIVE "Putere Reactivă" #define D_PRESSURE "Presiune" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index c8880f0ad..27b360472 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -153,6 +153,7 @@ #define D_POWER_FACTOR "Коэффициент мощности" #define D_POWERUSAGE "Мощность" #define D_POWERUSAGE_ACTIVE "Активная мощность" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Полная мощность" #define D_POWERUSAGE_REACTIVE "Реактивная мощность" #define D_PRESSURE "Давление" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 662e8cb27..66fa14bca 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Účinník" #define D_POWERUSAGE "Príkon" #define D_POWERUSAGE_ACTIVE "Činný príkon" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Zdanlivý príkon" #define D_POWERUSAGE_REACTIVE "Jalový príkon" #define D_PRESSURE "Tlak" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 9aa19956e..aa0ca90cf 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Spänningsfaktor" #define D_POWERUSAGE "Spänning" #define D_POWERUSAGE_ACTIVE "Aktiv spänning" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Skenbar spänning" #define D_POWERUSAGE_REACTIVE "Responsiv spänning" #define D_PRESSURE "Tryck" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index e2225c4da..fdec2ae69 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Güç Faktörü" #define D_POWERUSAGE "Güç" #define D_POWERUSAGE_ACTIVE "Aktif Güç" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Görünen Güç" #define D_POWERUSAGE_REACTIVE "Reaktif Güç" #define D_PRESSURE "Basınç" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index a8133f7cb..4e4ba7ec1 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Коефіцієнт потужності" #define D_POWERUSAGE "Потужність" #define D_POWERUSAGE_ACTIVE "Активна потужність" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Загальна потужність" #define D_POWERUSAGE_REACTIVE "Реактивна потужність" #define D_PRESSURE "Тиск" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index fa577673f..719fa66bb 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "Hệ số công suất" #define D_POWERUSAGE "Công suất" #define D_POWERUSAGE_ACTIVE "Công suất hoạt động" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "Công suất biểu kiến" #define D_POWERUSAGE_REACTIVE "Công suất phản kháng" #define D_PRESSURE "Áp suất" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index c09694c78..ea1ed682e 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "功率因数" #define D_POWERUSAGE "功率" #define D_POWERUSAGE_ACTIVE "有功功率" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "视在功率" #define D_POWERUSAGE_REACTIVE "无功功率" #define D_PRESSURE "气压" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 0b3592a9c..a6a7fabac 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -152,6 +152,7 @@ #define D_POWER_FACTOR "功率因數" #define D_POWERUSAGE "用電量" #define D_POWERUSAGE_ACTIVE "有功功率" +#define D_POWERUSAGE_ACTIVE_TOTAL "Active Power Total" #define D_POWERUSAGE_APPARENT "視在功率" #define D_POWERUSAGE_REACTIVE "虛功率" #define D_PRESSURE "氣壓" diff --git a/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino b/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino index aaa2d8ff0..fa58c4725 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_03_energy.ino @@ -205,12 +205,13 @@ char* WebEnergyFmt(float* input, uint32_t resolution, uint32_t single) { // single = 0 - Energy->phase_count - xx / xx / xx or multi column // single = 1 - Energy->voltage_common or Energy->frequency_common - xx or single column using colspan (if needed) // single = 2 - Sum of Energy->phase_count if SO129 0 - xx or single column using colspan (if needed) or if SO129 1 - xx / xx / xx or multi column + // single = 3 - Sum of Energy->phase_count xx or single column using colspan (if needed) if (!EnergyFmtMalloc()) { return EmptyStr; } float input_sum = 0.0f; - if (single > 1) { // Sum and/or Single column - if (!Settings->flag5.energy_phase) { // SetOption129 - (Energy) Show phase information + if (single > 1) { // Sum and/or Single column + if ((3 == single) || !Settings->flag5.energy_phase) { // SetOption129 - (Energy) Show phase information for (uint32_t i = 0; i < Energy->phase_count; i++) { if (!isnan(input[i])) { input_sum += input[i]; @@ -221,8 +222,8 @@ char* WebEnergyFmt(float* input, uint32_t resolution, uint32_t single) { single = 0; } } - ext_snprintf_P(Energy->value, GUISZ, PSTR("")); // Skip first column - if ((Energy->phase_count > 1) && single) { // Need to set colspan so need new columns + ext_snprintf_P(Energy->value, GUISZ, PSTR("")); // Skip first column + if ((Energy->phase_count > 1) && single) { // Need to set colspan so need new columns // 1.23  // 1.23  // 1.23  @@ -1258,12 +1259,13 @@ void EnergyShow(bool json) { } } - float active_power_sum = 0.0f; float energy_yesterday_ph[Energy->phase_count]; + float active_power_sum = 0.0f; + int negative_phases = 0; for (uint32_t i = 0; i < Energy->phase_count; i++) { energy_yesterday_ph[i] = (float)Settings->energy_kWhyesterday_ph[i] / 100000; - active_power_sum += Energy->active_power[i]; + negative_phases += (Energy->active_power[i] < 0) ? -1 : 1; } bool energy_tariff = false; @@ -1435,6 +1437,9 @@ void EnergyShow(bool json) { WSContentSend_PD(HTTP_SNS_POWER_FACTOR, WebEnergyFmt(power_factor, 2)); } } + if (abs(negative_phases) != Energy->phase_count) { // Provide total power if producing power (PV) and multi phase + WSContentSend_PD(HTTP_SNS_POWER_TOTAL, WebEnergyFmt(Energy->active_power, Settings->flag2.wattage_resolution, 3)); + } WSContentSend_PD(HTTP_SNS_ENERGY_TODAY, WebEnergyFmt(Energy->daily, Settings->flag2.energy_resolution, 2)); WSContentSend_PD(HTTP_SNS_ENERGY_YESTERDAY, WebEnergyFmt(energy_yesterday_ph, Settings->flag2.energy_resolution, 2)); WSContentSend_PD(HTTP_SNS_ENERGY_TOTAL, WebEnergyFmt(Energy->total, Settings->flag2.energy_resolution, 2)); diff --git a/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino b/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino index 11ce19472..21d2e47e1 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_03_esp32_energy.ino @@ -438,12 +438,13 @@ char* WebEnergyFmt(float* input, uint32_t resolution, uint32_t single) { // single = 0 - Energy->phase_count - xx / xx / xx or multi column // single = 1 - Energy->voltage_common or Energy->frequency_common - xx or single column using colspan (if needed) // single = 2 - Sum of Energy->phase_count if SO129 0 - xx or single column using colspan (if needed) or if SO129 1 - xx / xx / xx or multi column + // single = 3 - Sum of Energy->phase_count xx or single column using colspan (if needed) if (!EnergyFmtMalloc()) { return EmptyStr; } float input_sum = 0.0f; - if (single > 1) { // Sum and/or Single column - if (!Settings->flag5.energy_phase) { // SetOption129 - (Energy) Show phase information + if (single > 1) { // Sum and/or Single column + if ((3 == single) || !Settings->flag5.energy_phase) { // SetOption129 - (Energy) Show phase information for (uint32_t i = 0; i < Energy->phase_count; i++) { if (!isnan(input[i])) { input_sum += input[i]; @@ -454,8 +455,8 @@ char* WebEnergyFmt(float* input, uint32_t resolution, uint32_t single) { single = 0; } } - ext_snprintf_P(Energy->value, GUISZ, PSTR("")); // Skip first column - if ((Energy->gui_count > 1) && single) { // Need to set colspan so need new columns + ext_snprintf_P(Energy->value, GUISZ, PSTR("")); // Skip first column + if ((Energy->gui_count > 1) && single) { // Need to set colspan so need new columns // 1.23  // 1.23  // 1.23  @@ -1493,12 +1494,13 @@ void EnergyShow(bool json) { } } - float active_power_sum = 0.0f; float energy_yesterday_kWh[Energy->phase_count]; + float active_power_sum = 0.0f; + int negative_phases = 0; for (uint32_t i = 0; i < Energy->phase_count; i++) { energy_yesterday_kWh[i] = Energy->Settings.energy_yesterday_kWh[i]; - active_power_sum += Energy->active_power[i]; + negative_phases += (Energy->active_power[i] < 0) ? -1 : 1; } bool energy_tariff = false; @@ -1716,6 +1718,9 @@ void EnergyShow(bool json) { WSContentSend_PD(HTTP_SNS_POWER_FACTOR, WebEnergyFmt(power_factor, 2)); } } + if (abs(negative_phases) != Energy->phase_count) { // Provide total power if producing power (PV) and multi phase + WSContentSend_PD(HTTP_SNS_POWER_TOTAL, WebEnergyFmt(Energy->active_power, Settings->flag2.wattage_resolution, 3)); + } WSContentSend_PD(HTTP_SNS_ENERGY_TODAY, WebEnergyFmt(Energy->daily_kWh, Settings->flag2.energy_resolution, 2)); WSContentSend_PD(HTTP_SNS_ENERGY_YESTERDAY, WebEnergyFmt(energy_yesterday_kWh, Settings->flag2.energy_resolution, 2)); WSContentSend_PD(HTTP_SNS_ENERGY_TOTAL, WebEnergyFmt(Energy->total, Settings->flag2.energy_resolution, 2));