From ec8f436cde50875704886589289e7101646ae8f9 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 3 Jun 2025 09:10:49 +0200 Subject: [PATCH] electricity tariffs: improve error handling for logging and chargelog --- packages/control/chargelog/chargelog.py | 10 ++-- .../measurement_logging/write_log.py | 55 ++++++++++++------- 2 files changed, 39 insertions(+), 26 deletions(-) diff --git a/packages/control/chargelog/chargelog.py b/packages/control/chargelog/chargelog.py index db69551e7e..4dcad2e8b2 100644 --- a/packages/control/chargelog/chargelog.py +++ b/packages/control/chargelog/chargelog.py @@ -414,9 +414,7 @@ def calculate_charge_cost(cp, create_log_entry: bool = False): raise TypeError(f"Unbekannter Referenz-Zeitpunkt {reference}") log.debug(f'power source {energy_source_entry["energy_source"]}') log.debug(f"charged_energy {charged_energy}") - costs = _calc(energy_source_entry["energy_source"], - charged_energy, - (data.data.optional_data.et_module is not None)) + costs = _calc(energy_source_entry["energy_source"], charged_energy) cp.data.set.log.costs += costs log.debug(f"current costs {costs}, total costs {cp.data.set.log.costs}") Pub().pub(f"openWB/set/chargepoint/{cp.num}/set/log", asdict(cp.data.set.log)) @@ -492,14 +490,14 @@ def get_daily_log(day): return [] -def _calc(energy_source: Dict[str, float], charged_energy_last_hour: float, et_active: bool) -> float: +def _calc(energy_source: Dict[str, float], charged_energy_last_hour: float) -> float: prices = data.data.general_data.data.prices bat_costs = prices.bat * charged_energy_last_hour * energy_source["bat"] cp_costs = prices.cp * charged_energy_last_hour * energy_source["cp"] - if et_active: + try: grid_costs = data.data.optional_data.et_get_current_price() * charged_energy_last_hour * energy_source["grid"] - else: + except Exception: grid_costs = prices.grid * charged_energy_last_hour * energy_source["grid"] pv_costs = prices.pv * charged_energy_last_hour * energy_source["pv"] diff --git a/packages/helpermodules/measurement_logging/write_log.py b/packages/helpermodules/measurement_logging/write_log.py index 28c9248726..ef01486b26 100644 --- a/packages/helpermodules/measurement_logging/write_log.py +++ b/packages/helpermodules/measurement_logging/write_log.py @@ -196,16 +196,25 @@ def create_entry(log_type: LogType, sh_log_data: LegacySmartHomeLogData, previou date = timecheck.create_timestamp_YYYYMMDD() current_timestamp = int(timecheck.create_timestamp()) - prices = data.data.general_data.data.prices - if data.data.optional_data.et_module is not None: - grid_price = data.data.optional_data.et_get_current_price() - else: - grid_price = prices.grid - prices_dict = {"grid": grid_price, - "pv": prices.pv, - "bat": prices.bat} + try: + prices = data.data.general_data.data.prices + try: + grid_price = data.data.optional_data.et_get_current_price() + except Exception: + grid_price = prices.grid + prices_dict = {"grid": grid_price, + "pv": prices.pv, + "bat": prices.bat} + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Preise") + prices_dict = {} - cp_dict = {} + try: + cp_dict = {"all": {"imported": data.data.cp_all_data.data.get.imported, + "exported": data.data.cp_all_data.data.get.exported}} + except Exception: + log.exception("Fehler im Werte-Logging-Modul") + cp_dict = {} for cp in data.data.cp_data: try: if "cp" in cp: @@ -213,12 +222,6 @@ def create_entry(log_type: LogType, sh_log_data: LegacySmartHomeLogData, previou "exported": data.data.cp_data[cp].data.get.exported}}) except Exception: log.exception("Fehler im Werte-Logging-Modul für Ladepunkt "+str(cp)) - try: - cp_dict.update( - {"all": {"imported": data.data.cp_all_data.data.get.imported, - "exported": data.data.cp_all_data.data.get.exported}}) - except Exception: - log.exception("Fehler im Werte-Logging-Modul") ev_dict = {} for ev in data.data.ev_data: @@ -242,7 +245,11 @@ def create_entry(log_type: LogType, sh_log_data: LegacySmartHomeLogData, previou except Exception: log.exception("Fehler im Werte-Logging-Modul für Zähler "+str(counter)) - pv_dict = {"all": {"exported": data.data.pv_all_data.data.get.exported}} + try: + pv_dict = {"all": {"exported": data.data.pv_all_data.data.get.exported}} + except Exception: + log.exception("Fehler im Werte-Logging-Modul für PV-Daten") + pv_dict = {} if data.data.pv_all_data.data.config.configured: for pv in data.data.pv_data: try: @@ -251,9 +258,13 @@ def create_entry(log_type: LogType, sh_log_data: LegacySmartHomeLogData, previou except Exception: log.exception("Fehler im Werte-Logging-Modul für Wechselrichter "+str(pv)) - bat_dict = {"all": {"imported": data.data.bat_all_data.data.get.imported, - "exported": data.data.bat_all_data.data.get.exported, - "soc": data.data.bat_all_data.data.get.soc}} + try: + bat_dict = {"all": {"imported": data.data.bat_all_data.data.get.imported, + "exported": data.data.bat_all_data.data.get.exported, + "soc": data.data.bat_all_data.data.get.soc}} + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Batteriespeicher-Daten") + bat_dict = {} if data.data.bat_all_data.data.config.configured: for bat in data.data.bat_data: try: @@ -263,7 +274,11 @@ def create_entry(log_type: LogType, sh_log_data: LegacySmartHomeLogData, previou except Exception: log.exception("Fehler im Werte-Logging-Modul für Speicher "+str(bat)) - hc_dict = {"all": {"imported": data.data.counter_all_data.data.set.imported_home_consumption}} + try: + hc_dict = {"all": {"imported": data.data.counter_all_data.data.set.imported_home_consumption}} + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Hausverbrauch") + hc_dict = {} new_entry = { "timestamp": current_timestamp, "date": date,