mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2025-11-25 06:46:25 +00:00
Automatic optimization used to take the adjusted load data even if there were no measurements leading to 0 load values. Split LoadAkkudoktor into LoadAkkudoktor and LoadAkkudoktorAdjusted. This allows to select load data either purely from the load data database or load data additionally adjusted by load measurements. Some value names have been adapted to denote also the unit of a value. For better load bug squashing the optimization solution data availability was improved. For better data visbility prediction data can now be distinguished from solution data in the generic optimization solution. Some predictions that may be of interest to understand the solution were added. Documentation was updated to resemble the addition load prediction provider and the value name changes. Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
"""Abstract and base classes for load predictions.
|
|
|
|
Notes:
|
|
- Ensure appropriate API keys or configurations are set up if required by external data sources.
|
|
"""
|
|
|
|
from abc import abstractmethod
|
|
from typing import List, Optional
|
|
|
|
from pydantic import Field
|
|
|
|
from akkudoktoreos.prediction.predictionabc import PredictionProvider, PredictionRecord
|
|
|
|
|
|
class LoadDataRecord(PredictionRecord):
|
|
"""Represents a load data record containing various load attributes at a specific datetime."""
|
|
|
|
loadforecast_power_w: Optional[float] = Field(
|
|
default=None, description="Predicted load mean value (W)."
|
|
)
|
|
|
|
|
|
class LoadProvider(PredictionProvider):
|
|
"""Abstract base class for load providers.
|
|
|
|
LoadProvider is a thread-safe singleton, ensuring only one instance of this class is created.
|
|
|
|
Configuration variables:
|
|
provider (str): Prediction provider for load.
|
|
|
|
Attributes:
|
|
hours (int, optional): The number of hours into the future for which predictions are generated.
|
|
historic_hours (int, optional): The number of past hours for which historical data is retained.
|
|
latitude (float, optional): The latitude in degrees, must be within -90 to 90.
|
|
longitude (float, optional): The longitude in degrees, must be within -180 to 180.
|
|
start_datetime (datetime, optional): The starting datetime for predictions, defaults to the current datetime if unspecified.
|
|
end_datetime (datetime, computed): The datetime representing the end of the prediction range,
|
|
calculated based on `start_datetime` and `hours`.
|
|
keep_datetime (datetime, computed): The earliest datetime for retaining historical data, calculated
|
|
based on `start_datetime` and `historic_hours`.
|
|
"""
|
|
|
|
# overload
|
|
records: List[LoadDataRecord] = Field(
|
|
default_factory=list, description="List of LoadDataRecord records"
|
|
)
|
|
|
|
@classmethod
|
|
@abstractmethod
|
|
def provider_id(cls) -> str:
|
|
return "LoadProvider"
|
|
|
|
def enabled(self) -> bool:
|
|
return self.provider_id() == self.config.load.provider
|