Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions packages/control/ev/charge_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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":
Expand Down Expand Up @@ -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')
Expand Down
2 changes: 0 additions & 2 deletions packages/control/ev/charge_template_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
20 changes: 14 additions & 6 deletions packages/control/optional.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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()
Expand All @@ -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]:
"""
Expand All @@ -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 = {}
Expand Down
5 changes: 4 additions & 1 deletion packages/control/optional_test.py
Original file line number Diff line number Diff line change
@@ -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)
Expand Down