mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2025-09-20 18:51:15 +00:00
Fix config and prediction revamp. (#259)
Extend single_test_optimization.py to be able to use real world data from new prediction classes. - .venv/bin/python single_test_optimization.py --real_world --verbose Can also be run with profiling "--profile". Add single_test_prediction.py to fetch predictions from remote prediction providers - .venv/bin/python single_test_prediction.py --verbose --provider-id PVForecastAkkudoktor | more - .venv/bin/python single_test_prediction.py --verbose --provider-id LoadAkkudoktor | more - .venv/bin/python single_test_prediction.py --verbose --provider-id ElecPriceAkkudoktor | more - .venv/bin/python single_test_prediction.py --verbose --provider-id BrightSky | more - .venv/bin/python single_test_prediction.py --verbose --provider-id ClearOutside | more Can also be run with profiling "--profile". single_test_optimization.py is an example on how to retrieve prediction data for optimization and use it to set up the optimization parameters. Changes: - load: Only one load provider at a time (vs. 5 before) Bug fixes: - prediction: only use providers that are enabled to retrieve or set data. - prediction: fix pre pendulum format strings - dataabc: Prevent error when resampling data with no datasets. Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
"""Load forecast module for load predictions."""
|
||||
|
||||
from typing import Optional, Set
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import Field, computed_field
|
||||
from pydantic import Field
|
||||
|
||||
from akkudoktoreos.config.configabc import SettingsBaseModel
|
||||
from akkudoktoreos.utils.logutil import get_logger
|
||||
@@ -12,50 +12,7 @@ logger = get_logger(__name__)
|
||||
|
||||
class LoadCommonSettings(SettingsBaseModel):
|
||||
# Load 0
|
||||
load0_provider: Optional[str] = Field(
|
||||
load_provider: Optional[str] = Field(
|
||||
default=None, description="Load provider id of provider to be used."
|
||||
)
|
||||
load0_name: Optional[str] = Field(default=None, description="Name of the load source.")
|
||||
|
||||
# Load 1
|
||||
load1_provider: Optional[str] = Field(
|
||||
default=None, description="Load provider id of provider to be used."
|
||||
)
|
||||
load1_name: Optional[str] = Field(default=None, description="Name of the load source.")
|
||||
|
||||
# Load 2
|
||||
load2_provider: Optional[str] = Field(
|
||||
default=None, description="Load provider id of provider to be used."
|
||||
)
|
||||
load2_name: Optional[str] = Field(default=None, description="Name of the load source.")
|
||||
|
||||
# Load 3
|
||||
load3_provider: Optional[str] = Field(
|
||||
default=None, description="Load provider id of provider to be used."
|
||||
)
|
||||
load3_name: Optional[str] = Field(default=None, description="Name of the load source.")
|
||||
|
||||
# Load 4
|
||||
load4_provider: Optional[str] = Field(
|
||||
default=None, description="Load provider id of provider to be used."
|
||||
)
|
||||
load4_name: Optional[str] = Field(default=None, description="Name of the load source.")
|
||||
|
||||
# Computed fields
|
||||
@computed_field # type: ignore[prop-decorator]
|
||||
@property
|
||||
def load_count(self) -> int:
|
||||
"""Maximum number of loads."""
|
||||
return 5
|
||||
|
||||
@computed_field # type: ignore[prop-decorator]
|
||||
@property
|
||||
def load_providers(self) -> Set[str]:
|
||||
"""Load providers."""
|
||||
providers = []
|
||||
for i in range(self.load_count):
|
||||
load_provider_attr = f"load{i}_provider"
|
||||
value = getattr(self, load_provider_attr)
|
||||
if value:
|
||||
providers.append(value)
|
||||
return set(providers)
|
||||
load_name: Optional[str] = Field(default=None, description="Name of the load source.")
|
||||
|
Reference in New Issue
Block a user