From d813e4839da22470929f1366edbedbe32c6cd1ed Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Wed, 14 Oct 2026 11:10:39 +0200 Subject: [PATCH] Consumer: Fix increasing daily yields --- .../process_log_calculation.py | 4 ++++ .../process_log_calculation_test.py | 24 +++++++++++++++++++ .../measurement_logging/write_log.py | 2 +- packages/helpermodules/update_config.py | 24 +++++++++++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) diff --git a/packages/helpermodules/measurement_logging/process_log_calculation.py b/packages/helpermodules/measurement_logging/process_log_calculation.py index 10b18af36a..b03f685697 100644 --- a/packages/helpermodules/measurement_logging/process_log_calculation.py +++ b/packages/helpermodules/measurement_logging/process_log_calculation.py @@ -430,6 +430,10 @@ def ensure_zero_source_keys(module_totals: Dict): totals["hc"].setdefault("all", {}) ensure_zero_source_keys(totals["hc"]["all"]) + totals.setdefault("consumer", {}) + for module_totals in totals["consumer"].values(): + ensure_zero_source_keys(module_totals) + totals.setdefault("cp", {}) for key, module_totals in totals["cp"].items(): ensure_zero_source_keys(module_totals) diff --git a/packages/helpermodules/measurement_logging/process_log_calculation_test.py b/packages/helpermodules/measurement_logging/process_log_calculation_test.py index f46b705f9a..828e4cf4d6 100644 --- a/packages/helpermodules/measurement_logging/process_log_calculation_test.py +++ b/packages/helpermodules/measurement_logging/process_log_calculation_test.py @@ -4,6 +4,7 @@ from helpermodules.measurement_logging.process_log_calculation import ( analyse_percentage, + analyse_percentage_totals, _calculate_average_power, process_entry, calc_energy_imported_by_source, @@ -40,6 +41,29 @@ def test_analyse_percentage(name: str, assert message == "" +def test_analyse_percentage_totals_clears_consumer_source_totals_on_error(): + totals = { + "consumer": {"consumer1": {"energy_imported_grid": 99}}, + "cp": {}, + "counter": {"counter1": {}}, + "hc": {}, + } + entries = [{ + "consumer": {"consumer1": {"energy_imported_grid": 25}}, + "cp": {}, + "counter": {"counter1": {"energy_imported_grid": 25}}, + }] + + result = analyse_percentage_totals(entries, totals) + + assert result["consumer"]["consumer1"] == { + "energy_imported_grid": 0, + "energy_imported_pv": 0, + "energy_imported_bat": 0, + "energy_imported_cp": 0, + } + + @pytest.mark.parametrize("test_case, entry_data, expected_energy_source, should_be_unchanged", [ ( "zero_consumption", diff --git a/packages/helpermodules/measurement_logging/write_log.py b/packages/helpermodules/measurement_logging/write_log.py index 59f3002eed..fea8806629 100644 --- a/packages/helpermodules/measurement_logging/write_log.py +++ b/packages/helpermodules/measurement_logging/write_log.py @@ -371,7 +371,7 @@ def find_and_fix_value(value_name): log.exception("Es konnte kein vorheriger Wert gefunden werden.") if previous_entry is not None: for group, value in new_entry.items(): - if group not in ("bat", "counter", "cp", "pv", "hc"): + if group not in ("bat", "consumer", "counter", "cp", "pv", "hc"): continue for component, value in value.items(): find_and_fix_value("exported") diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 959fd30efc..7b7fb3402d 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -200,20 +200,44 @@ class UpdateConfig: "^openWB/consumer/get/imported$", "^openWB/consumer/get/daily_exported$", "^openWB/consumer/get/daily_imported$", + "^openWB/consumer/get/fault_state$", + "^openWB/consumer/get/fault_str$", "^openWB/consumer/[0-9]+/module$", "^openWB/consumer/[0-9]+/config$", "^openWB/consumer/[0-9]+/config/is_home_consumption_consumer$", "^openWB/consumer/[0-9]+/extra_meter$", "^openWB/consumer/[0-9]+/usage$", + "^openWB/consumer/[0-9]+/control_parameter/chargemode$", + "^openWB/consumer/[0-9]+/control_parameter/current_plan$", + "^openWB/consumer/[0-9]+/control_parameter/failed_phase_switches$", + "^openWB/consumer/[0-9]+/control_parameter/limit$", + "^openWB/consumer/[0-9]+/control_parameter/min_current$", + "^openWB/consumer/[0-9]+/control_parameter/phases$", + "^openWB/consumer/[0-9]+/control_parameter/required_current$", + "^openWB/consumer/[0-9]+/control_parameter/state$", + "^openWB/consumer/[0-9]+/control_parameter/submode$", + "^openWB/consumer/[0-9]+/control_parameter/template_phases$", + "^openWB/consumer/[0-9]+/control_parameter/timestamp_charge_start$", + "^openWB/consumer/[0-9]+/control_parameter/timestamp_last_cp_retry$", + "^openWB/consumer/[0-9]+/control_parameter/timestamp_chargemode_changed$", + "^openWB/consumer/[0-9]+/control_parameter/timestamp_last_phase_switch$", + "^openWB/consumer/[0-9]+/control_parameter/timestamp_phase_switch_buffer_start$", + "^openWB/consumer/[0-9]+/control_parameter/timestamp_switch_on_off$", "^openWB/consumer/[0-9]+/get/charge_state$", "^openWB/consumer/[0-9]+/get/currents$", + "^openWB/consumer/[0-9]+/get/exported$", "^openWB/consumer/[0-9]+/get/fault_state$", "^openWB/consumer/[0-9]+/get/fault_str$", + "^openWB/consumer/[0-9]+/get/imported$", + "^openWB/consumer/[0-9]+/get/daily_exported$", + "^openWB/consumer/[0-9]+/get/daily_imported$", "^openWB/consumer/[0-9]+/get/plug_state$", "^openWB/consumer/[0-9]+/get/powers$", "^openWB/consumer/[0-9]+/get/power$", + "^openWB/consumer/[0-9]+/get/set_power$", "^openWB/consumer/[0-9]+/get/state$", "^openWB/consumer/[0-9]+/get/state_str$", + "^openWB/consumer/[0-9]+/get/temperatures$", "^openWB/consumer/[0-9]+/get/voltages$", "^openWB/consumer/[0-9]+/set/current$", "^openWB/consumer/[0-9]+/set/on_time$",