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
22 changes: 3 additions & 19 deletions packages/control/optional.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@
"""
import logging
from math import ceil
import random
from threading import Thread
from typing import Dict, List, Optional as TypingOptional, Union
from datetime import datetime, timedelta
from datetime import datetime

from control import data
from control.ocpp import OcppMixin
from control.optional_data import FlexibleTariff, GridFee, OptionalData, PricingGet
from control.optional_data import TARIFF_UPDATE_HOUR, FlexibleTariff, GridFee, OptionalData, PricingGet
from helpermodules import hardware_configuration
from helpermodules.constants import NO_ERROR
from helpermodules.pub import Pub
Expand All @@ -20,7 +19,6 @@

log = logging.getLogger(__name__)
AS_EURO_PER_KWH = 1000.0 # Umrechnung von €/Wh in €/kWh
TARIFF_UPDATE_HOUR = 14 # latest expected time for daily tariff update


class Optional(OcppMixin):
Expand All @@ -47,9 +45,6 @@ def flexible_tariff_module(self, value: TypingOptional[ConfigurableFlexibleTarif
self.data.electricity_pricing.flexible_tariff.get = PricingGet()
self._reset_state(self.data.electricity_pricing.flexible_tariff, "flexible_tariff")
self._flexible_tariff_module = value
if value:
self.data.electricity_pricing.get.next_query_time = None
Pub().pub("openWB/set/optional/ep/get/next_query_time", None)
self._set_ep_configured()

@property
Expand All @@ -63,9 +58,6 @@ def grid_fee_module(self, value: TypingOptional[ConfigurableGridFee]):
self.data.electricity_pricing.grid_fee.get = PricingGet()
self._reset_state(self.data.electricity_pricing.grid_fee, "grid_fee")
self._grid_fee_module = value
if value:
self.data.electricity_pricing.get.next_query_time = None
Pub().pub("openWB/set/optional/ep/get/next_query_time", None)
self._set_ep_configured()

def _set_ep_configured(self):
Expand All @@ -84,6 +76,7 @@ def _reset_state(self, module: Union[FlexibleTariff, GridFee], module_name: str)
Pub().pub(f"openWB/set/optional/ep/{module_name}/get/fault_str", NO_ERROR)
Pub().pub(f"openWB/set/optional/ep/{module_name}/get/prices", {})
Pub().pub("openWB/set/optional/ep/get/prices", {})
Pub().pub("openWB/set/optional/ep/get/next_query_time", None)

def monitoring_start(self):
if self.monitoring_module is not None:
Expand Down Expand Up @@ -256,15 +249,6 @@ def get_last_entry_time_stamp() -> str:
if len(self.data.electricity_pricing.get.prices) == 0:
return True
if self.data.electricity_pricing.get.next_query_time is None:
next_query_time = datetime.fromtimestamp(float(max(self.data.electricity_pricing.get.prices))).replace(
hour=TARIFF_UPDATE_HOUR, minute=0, second=0
) + timedelta(
# aktually ET providers issue next day prices up to half an hour earlier then 14:00
# reduce serverload on their site by trying early and randomizing query time
minutes=random.randint(1, 7) * -5
)
self.data.electricity_pricing.get.next_query_time = next_query_time.timestamp()
Pub().pub("openWB/set/optional/ep/get/next_query_time", self.data.electricity_pricing.get.next_query_time)
return True
if is_tomorrow(get_last_entry_time_stamp()):
if timecheck.create_timestamp() > self.data.electricity_pricing.get.next_query_time:
Expand Down
24 changes: 23 additions & 1 deletion packages/control/optional_data.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
from dataclasses import dataclass, field
from datetime import datetime, timedelta
import random
from typing import Dict, Optional, Protocol

from dataclass_utils.factories import empty_dict_factory
from helpermodules.constants import NO_ERROR
from helpermodules.pub import Pub
from modules.display_themes.cards.config import CardsDisplayTheme

TARIFF_UPDATE_HOUR = 14 # latest expected time for daily tariff update


@dataclass
class PricingGet:
Expand Down Expand Up @@ -38,7 +43,24 @@ def get_grid_fee_factory() -> GridFee:
@dataclass
class ElectricityPricingGet:
next_query_time: Optional[float] = None
prices: Dict = field(default_factory=empty_dict_factory)
_prices: Dict = field(default_factory=empty_dict_factory)

@property
def prices(self) -> Dict:
return self._prices

@prices.setter
def prices(self, value: Dict):
self._prices = value
if value:
next_query_time = datetime.fromtimestamp(float(max(value))).replace(
hour=TARIFF_UPDATE_HOUR, minute=0, second=0
) + timedelta(
# actully ET providers issue next day prices up to half an hour earlier then 14:00
# reduce serverload on their site by trying early and randomizing query time
minutes=random.randint(1, 7) * -5
)
Pub().pub("openWB/set/optional/ep/get/next_query_time", next_query_time.timestamp())


def electricity_pricing_get_factory() -> ElectricityPricingGet:
Expand Down