mirror of
				https://github.com/Akkudoktor-EOS/EOS.git
				synced 2025-10-30 22:36:21 +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:
		| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user