mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2025-04-19 08:55:15 +00:00
Add minimum historic prediction hours for prediction providers. (#346)
Prediction providers can now individually set the minimum historic prediction hours to be kept in the data records. This setting supersedes any lower setting given by the configuration `prediction_historic_hours`. As a help for the future change of ElecPriceAkkudoktor, the minimum historic hours for this provider is set to 5 * 7 * 24 hours. Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
This commit is contained in:
parent
10acc705ec
commit
0ac31348f0
@ -100,6 +100,10 @@ class ElecPriceAkkudoktor(ElecPriceProvider):
|
|||||||
raise ValueError(error_msg)
|
raise ValueError(error_msg)
|
||||||
return akkudoktor_data
|
return akkudoktor_data
|
||||||
|
|
||||||
|
def historic_hours_min(self) -> int:
|
||||||
|
"""Return the minimum historic prediction hours for Akkudoktor electricity price data."""
|
||||||
|
return 5 * 7 * 24 # 5 weeks a 7 days a 24 hours
|
||||||
|
|
||||||
def _calculate_weighted_mean(self, day_of_week: int, hour: int) -> float:
|
def _calculate_weighted_mean(self, day_of_week: int, hour: int) -> float:
|
||||||
"""Calculate the weighted mean price for given day_of_week and hour.
|
"""Calculate the weighted mean price for given day_of_week and hour.
|
||||||
|
|
||||||
|
@ -103,6 +103,13 @@ class PredictionStartEndKeepMixin(PredictionBase):
|
|||||||
system. Predictions cannot be computed if this value is `None`.
|
system. Predictions cannot be computed if this value is `None`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def historic_hours_min(self) -> int:
|
||||||
|
"""Return the minimum historic prediction hours for specific data.
|
||||||
|
|
||||||
|
To be implemented by derived classes if default 0 is not appropriate.
|
||||||
|
"""
|
||||||
|
return 0
|
||||||
|
|
||||||
# Computed field for end_datetime and keep_datetime
|
# Computed field for end_datetime and keep_datetime
|
||||||
@computed_field # type: ignore[prop-decorator]
|
@computed_field # type: ignore[prop-decorator]
|
||||||
@property
|
@property
|
||||||
@ -136,11 +143,15 @@ class PredictionStartEndKeepMixin(PredictionBase):
|
|||||||
Returns:
|
Returns:
|
||||||
Optional[DateTime]: The calculated retention cutoff datetime, or `None` if inputs are missing.
|
Optional[DateTime]: The calculated retention cutoff datetime, or `None` if inputs are missing.
|
||||||
"""
|
"""
|
||||||
if self.start_datetime and self.config.prediction_historic_hours:
|
if self.start_datetime is None:
|
||||||
return self.start_datetime - to_duration(
|
return None
|
||||||
f"{int(self.config.prediction_historic_hours)} hours"
|
historic_hours = self.historic_hours_min()
|
||||||
)
|
if (
|
||||||
return None
|
self.config.prediction_historic_hours
|
||||||
|
and self.config.prediction_historic_hours > historic_hours
|
||||||
|
):
|
||||||
|
historic_hours = int(self.config.prediction_historic_hours)
|
||||||
|
return self.start_datetime - to_duration(f"{historic_hours} hours")
|
||||||
|
|
||||||
@computed_field # type: ignore[prop-decorator]
|
@computed_field # type: ignore[prop-decorator]
|
||||||
@property
|
@property
|
||||||
|
Loading…
x
Reference in New Issue
Block a user