diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index 7ab043963e..a927f66e3a 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -149,7 +149,7 @@ def time_charging(self, plan = timecheck.check_plans_timeframe(self.data.time_charging.plans) if plan is not None: current = plan.current if charging_type == ChargingType.AC.value else plan.dc_current - if self.data.et.active and data.data.optional_data.et_provider_available(): + if self.data.et.active: if not data.data.optional_data.et_charging_allowed(self.data.et.max_price): return 0, "stop", self.CHARGING_PRICE_EXCEEDED, plan.id if plan.limit.selected == "none": # kein Limit konfiguriert, mit konfigurierter Stromstärke laden @@ -195,7 +195,7 @@ def instant_charging(self, current = instant_charging.current else: current = instant_charging.dc_current - if self.data.et.active and data.data.optional_data.et_provider_available(): + if self.data.et.active: if not data.data.optional_data.et_charging_allowed(self.data.et.max_price): return 0, "stop", self.CHARGING_PRICE_EXCEEDED if instant_charging.limit.selected == "none": @@ -446,7 +446,7 @@ def scheduled_charging_calc_current(self, else: # Wenn dynamische Tarife aktiv sind, prüfen, ob jetzt ein günstiger Zeitpunkt zum Laden # ist. - if self.data.et.active and data.data.optional_data.et_provider_available(): + if self.data.et.active: hour_list = data.data.optional_data.et_get_loading_hours(plan_data.duration, plan_data.remaining_time) hours_message = ("Geladen wird zu folgenden Uhrzeiten: " + ", ".join([datetime.datetime.fromtimestamp(hour).strftime('%-H:%M') diff --git a/packages/control/ev/charge_template_test.py b/packages/control/ev/charge_template_test.py index 9b17b7c716..f113757322 100644 --- a/packages/control/ev/charge_template_test.py +++ b/packages/control/ev/charge_template_test.py @@ -297,8 +297,6 @@ def test_scheduled_charging_calc_current_electricity_tariff(loading_hour, expect mock_et_get_loading_hours = Mock(return_value=[datetime.datetime( year=2022, month=5, day=16, hour=8, minute=0).timestamp()]) monkeypatch.setattr(data.data.optional_data, "et_get_loading_hours", mock_et_get_loading_hours) - mock_et_provider_available = Mock(return_value=True) - monkeypatch.setattr(data.data.optional_data, "et_provider_available", mock_et_provider_available) mock_is_list_valid = Mock(return_value=loading_hour) monkeypatch.setattr(timecheck, "is_list_valid", mock_is_list_valid) diff --git a/packages/control/optional.py b/packages/control/optional.py index cd161fffd9..5d936d8e9c 100644 --- a/packages/control/optional.py +++ b/packages/control/optional.py @@ -38,8 +38,8 @@ def monitoring_stop(self): if self.mon_module is not None: self.mon_module.stop_monitoring() - def et_provider_available(self) -> bool: - return self.et_module is not None and self.data.et.get.fault_state != 2 + def _et_provider_available(self) -> bool: + return self.et_module is not None def et_charging_allowed(self, max_price: float): """ prüft, ob der aktuelle Strompreis niedriger oder gleich der festgelegten Preisgrenze ist. @@ -50,10 +50,13 @@ def et_charging_allowed(self, max_price: float): False: Preis liegt darüber """ try: - if self.et_get_current_price() <= max_price: - return True + if self._et_provider_available(): + if self.et_get_current_price() <= max_price: + return True + else: + return False else: - return False + return True except KeyError: log.exception("Fehler beim strompreisbasierten Laden") self.et_get_prices() @@ -62,7 +65,10 @@ def et_charging_allowed(self, max_price: float): return False def et_get_current_price(self): - return self.data.et.get.prices[str(int(create_unix_timestamp_current_full_hour()))] + if self._et_provider_available(): + return self.data.et.get.prices[str(int(create_unix_timestamp_current_full_hour()))] + else: + raise Exception("Kein Anbieter für strompreisbasiertes Laden konfiguriert.") def et_get_loading_hours(self, duration: float, remaining_time: float) -> List[int]: """ @@ -75,6 +81,8 @@ def et_get_loading_hours(self, duration: float, remaining_time: float) -> List[i ------ list: Key des Dictionary (Unix-Sekunden der günstigen Stunden) """ + if self._et_provider_available() is False: + raise Exception("Kein Anbieter für strompreisbasiertes Laden konfiguriert.") try: prices = self.data.et.get.prices prices_in_scheduled_time = {} diff --git a/packages/control/optional_test.py b/packages/control/optional_test.py index f4ecf1211f..8e3c4d5042 100644 --- a/packages/control/optional_test.py +++ b/packages/control/optional_test.py @@ -1,10 +1,13 @@ +from unittest.mock import Mock from control.optional import Optional -def test_et_get_loading_hours(): +def test_et_get_loading_hours(monkeypatch): # setup opt = Optional() opt.data.et.get.prices = PRICE_LIST + mock_et_provider_available = Mock(return_value=True) + monkeypatch.setattr(opt, "_et_provider_available", mock_et_provider_available) # execution loading_hours = opt.et_get_loading_hours(3600, 7200)