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)
|
||||
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:
|
||||
"""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`.
|
||||
"""
|
||||
|
||||
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 # type: ignore[prop-decorator]
|
||||
@property
|
||||
@ -136,11 +143,15 @@ class PredictionStartEndKeepMixin(PredictionBase):
|
||||
Returns:
|
||||
Optional[DateTime]: The calculated retention cutoff datetime, or `None` if inputs are missing.
|
||||
"""
|
||||
if self.start_datetime and self.config.prediction_historic_hours:
|
||||
return self.start_datetime - to_duration(
|
||||
f"{int(self.config.prediction_historic_hours)} hours"
|
||||
)
|
||||
return None
|
||||
if self.start_datetime is None:
|
||||
return None
|
||||
historic_hours = self.historic_hours_min()
|
||||
if (
|
||||
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]
|
||||
@property
|
||||
|
Loading…
x
Reference in New Issue
Block a user