mirror of
				https://github.com/Akkudoktor-EOS/EOS.git
				synced 2025-11-04 08:46:20 +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