Pydantic deprecates using extra keyword arguments on Field. Used json_schema_extra instead. Deprecated in Pydantic V2.0 to be removed in V3.0. Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
52 KiB
Configuration Table
Settings for common configuration
General configuration to set directories of cache and output files and system location (latitude
and longitude).
Validators ensure each parameter is within a specified range. A computed property, timezone,
determines the time zone based on latitude and longitude.
Attributes: latitude (Optional[float]): Latitude in degrees, must be between -90 and 90. longitude (Optional[float]): Longitude in degrees, must be between -180 and 180.
Properties: timezone (Optional[str]): Computed time zone string based on the specified latitude and longitude.
:::{table} general :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| version | EOS_GENERAL__VERSION |
str |
rw |
0.2.0+dev |
- |
| data_folder_path | EOS_GENERAL__DATA_FOLDER_PATH |
Optional[pathlib.Path] |
rw |
None |
- |
| data_output_subpath | EOS_GENERAL__DATA_OUTPUT_SUBPATH |
Optional[pathlib.Path] |
rw |
output |
- |
| latitude | EOS_GENERAL__LATITUDE |
Optional[float] |
rw |
52.52 |
- |
| longitude | EOS_GENERAL__LONGITUDE |
Optional[float] |
rw |
13.405 |
- |
| timezone | Optional[str] |
ro |
N/A |
Compute timezone based on latitude and longitude. | |
| data_output_path | Optional[pathlib.Path] |
ro |
N/A |
Compute data_output_path based on data_folder_path. | |
| config_folder_path | Optional[pathlib.Path] |
ro |
N/A |
Path to EOS configuration directory. | |
| config_file_path | Optional[pathlib.Path] |
ro |
N/A |
Path to EOS configuration file. | |
| ::: |
Example Input
.. code-block:: json
{
"general": {
"version": "0.2.0+dev",
"data_folder_path": null,
"data_output_subpath": "output",
"latitude": 52.52,
"longitude": 13.405
}
}
Example Output
.. code-block:: json
{
"general": {
"version": "0.2.0+dev",
"data_folder_path": null,
"data_output_subpath": "output",
"latitude": 52.52,
"longitude": 13.405,
"timezone": "Europe/Berlin",
"data_output_path": null,
"config_folder_path": "/home/user/.config/net.akkudoktoreos.net",
"config_file_path": "/home/user/.config/net.akkudoktoreos.net/EOS.config.json"
}
}
Cache Configuration
:::{table} cache :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| subpath | EOS_CACHE__SUBPATH |
Optional[pathlib.Path] |
rw |
cache |
- |
| cleanup_interval | EOS_CACHE__CLEANUP_INTERVAL |
float |
rw |
300 |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"cache": {
"subpath": "cache",
"cleanup_interval": 300.0
}
}
Energy Management Configuration
:::{table} ems :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| startup_delay | EOS_EMS__STARTUP_DELAY |
float |
rw |
5 |
- |
| interval | EOS_EMS__INTERVAL |
Optional[float] |
rw |
None |
- |
| mode | EOS_EMS__MODE |
Optional[akkudoktoreos.core.emsettings.EnergyManagementMode] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"ems": {
"startup_delay": 5.0,
"interval": 300.0,
"mode": "OPTIMIZATION"
}
}
Logging Configuration
:::{table} logging :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| console_level | EOS_LOGGING__CONSOLE_LEVEL |
Optional[str] |
rw |
None |
- |
| file_level | EOS_LOGGING__FILE_LEVEL |
Optional[str] |
rw |
None |
- |
| file_path | Optional[pathlib.Path] |
ro |
N/A |
Computed log file path based on data output path. | |
| ::: |
Example Input
.. code-block:: json
{
"logging": {
"console_level": "TRACE",
"file_level": "TRACE"
}
}
Example Output
.. code-block:: json
{
"logging": {
"console_level": "TRACE",
"file_level": "TRACE",
"file_path": "/home/user/.local/share/net.akkudoktoreos.net/output/eos.log"
}
}
Base configuration for devices simulation settings
:::{table} devices :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| batteries | EOS_DEVICES__BATTERIES |
Optional[list[akkudoktoreos.devices.devices.BatteriesCommonSettings]] |
rw |
None |
- |
| max_batteries | EOS_DEVICES__MAX_BATTERIES |
Optional[int] |
rw |
None |
- |
| electric_vehicles | EOS_DEVICES__ELECTRIC_VEHICLES |
Optional[list[akkudoktoreos.devices.devices.BatteriesCommonSettings]] |
rw |
None |
- |
| max_electric_vehicles | EOS_DEVICES__MAX_ELECTRIC_VEHICLES |
Optional[int] |
rw |
None |
- |
| inverters | EOS_DEVICES__INVERTERS |
Optional[list[akkudoktoreos.devices.devices.InverterCommonSettings]] |
rw |
None |
- |
| max_inverters | EOS_DEVICES__MAX_INVERTERS |
Optional[int] |
rw |
None |
- |
| home_appliances | EOS_DEVICES__HOME_APPLIANCES |
Optional[list[akkudoktoreos.devices.devices.HomeApplianceCommonSettings]] |
rw |
None |
- |
| max_home_appliances | EOS_DEVICES__MAX_HOME_APPLIANCES |
Optional[int] |
rw |
None |
- |
| measurement_keys | Optional[list[str]] |
ro |
N/A |
Return the measurement keys for the resource/ device stati that are measurements. | |
| ::: |
Example Input
.. code-block:: json
{
"devices": {
"batteries": [
{
"device_id": "battery1",
"capacity_wh": 8000,
"charging_efficiency": 0.88,
"discharging_efficiency": 0.88,
"levelized_cost_of_storage_kwh": 0.0,
"max_charge_power_w": 5000,
"min_charge_power_w": 50,
"charge_rates": "[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
"min_soc_percentage": 0,
"max_soc_percentage": 100,
"measurement_key_soc_factor": "battery1-soc-factor",
"measurement_key_power_l1_w": "battery1-power-l1-w",
"measurement_key_power_l2_w": "battery1-power-l2-w",
"measurement_key_power_l3_w": "battery1-power-l3-w",
"measurement_key_power_3_phase_sym_w": "battery1-power-3-phase-sym-w",
"measurement_keys": [
"battery1-soc-factor",
"battery1-power-l1-w",
"battery1-power-l2-w",
"battery1-power-l3-w",
"battery1-power-3-phase-sym-w"
]
}
],
"max_batteries": 1,
"electric_vehicles": [
{
"device_id": "battery1",
"capacity_wh": 8000,
"charging_efficiency": 0.88,
"discharging_efficiency": 0.88,
"levelized_cost_of_storage_kwh": 0.0,
"max_charge_power_w": 5000,
"min_charge_power_w": 50,
"charge_rates": "[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
"min_soc_percentage": 0,
"max_soc_percentage": 100,
"measurement_key_soc_factor": "battery1-soc-factor",
"measurement_key_power_l1_w": "battery1-power-l1-w",
"measurement_key_power_l2_w": "battery1-power-l2-w",
"measurement_key_power_l3_w": "battery1-power-l3-w",
"measurement_key_power_3_phase_sym_w": "battery1-power-3-phase-sym-w",
"measurement_keys": [
"battery1-soc-factor",
"battery1-power-l1-w",
"battery1-power-l2-w",
"battery1-power-l3-w",
"battery1-power-3-phase-sym-w"
]
}
],
"max_electric_vehicles": 1,
"inverters": [],
"max_inverters": 1,
"home_appliances": [],
"max_home_appliances": 1
}
}
Example Output
.. code-block:: json
{
"devices": {
"batteries": [
{
"device_id": "battery1",
"capacity_wh": 8000,
"charging_efficiency": 0.88,
"discharging_efficiency": 0.88,
"levelized_cost_of_storage_kwh": 0.0,
"max_charge_power_w": 5000,
"min_charge_power_w": 50,
"charge_rates": "[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
"min_soc_percentage": 0,
"max_soc_percentage": 100,
"measurement_key_soc_factor": "battery1-soc-factor",
"measurement_key_power_l1_w": "battery1-power-l1-w",
"measurement_key_power_l2_w": "battery1-power-l2-w",
"measurement_key_power_l3_w": "battery1-power-l3-w",
"measurement_key_power_3_phase_sym_w": "battery1-power-3-phase-sym-w",
"measurement_keys": [
"battery1-soc-factor",
"battery1-power-l1-w",
"battery1-power-l2-w",
"battery1-power-l3-w",
"battery1-power-3-phase-sym-w"
]
}
],
"max_batteries": 1,
"electric_vehicles": [
{
"device_id": "battery1",
"capacity_wh": 8000,
"charging_efficiency": 0.88,
"discharging_efficiency": 0.88,
"levelized_cost_of_storage_kwh": 0.0,
"max_charge_power_w": 5000,
"min_charge_power_w": 50,
"charge_rates": "[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
"min_soc_percentage": 0,
"max_soc_percentage": 100,
"measurement_key_soc_factor": "battery1-soc-factor",
"measurement_key_power_l1_w": "battery1-power-l1-w",
"measurement_key_power_l2_w": "battery1-power-l2-w",
"measurement_key_power_l3_w": "battery1-power-l3-w",
"measurement_key_power_3_phase_sym_w": "battery1-power-3-phase-sym-w",
"measurement_keys": [
"battery1-soc-factor",
"battery1-power-l1-w",
"battery1-power-l2-w",
"battery1-power-l3-w",
"battery1-power-3-phase-sym-w"
]
}
],
"max_electric_vehicles": 1,
"inverters": [],
"max_inverters": 1,
"home_appliances": [],
"max_home_appliances": 1,
"measurement_keys": [
"battery1-soc-factor",
"battery1-power-l1-w",
"battery1-power-l2-w",
"battery1-power-l3-w",
"battery1-power-3-phase-sym-w",
"battery1-soc-factor",
"battery1-power-l1-w",
"battery1-power-l2-w",
"battery1-power-l3-w",
"battery1-power-3-phase-sym-w"
]
}
}
Home Appliance devices base settings
:::{table} devices::home_appliances::list :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| device_id | str |
rw |
<unknown> |
- |
| consumption_wh | int |
rw |
required |
- |
| duration_h | int |
rw |
required |
- |
| time_windows | Optional[akkudoktoreos.utils.datetimeutil.TimeWindowSequence] |
rw |
None |
- |
| measurement_keys | Optional[list[str]] |
ro |
N/A |
Measurement keys for the home appliance stati that are measurements. |
| ::: |
Example Input
.. code-block:: json
{
"devices": {
"home_appliances": [
{
"device_id": "battery1",
"consumption_wh": 2000,
"duration_h": 1,
"time_windows": {
"windows": [
{
"start_time": "10:00:00.000000 Europe/Berlin",
"duration": "2 hours",
"day_of_week": null,
"date": null,
"locale": null
}
]
}
}
]
}
}
Example Output
.. code-block:: json
{
"devices": {
"home_appliances": [
{
"device_id": "battery1",
"consumption_wh": 2000,
"duration_h": 1,
"time_windows": {
"windows": [
{
"start_time": "10:00:00.000000 Europe/Berlin",
"duration": "2 hours",
"day_of_week": null,
"date": null,
"locale": null
}
]
},
"measurement_keys": []
}
]
}
}
Inverter devices base settings
:::{table} devices::inverters::list :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| device_id | str |
rw |
<unknown> |
- |
| max_power_w | Optional[float] |
rw |
None |
- |
| battery_id | Optional[str] |
rw |
None |
- |
| measurement_keys | Optional[list[str]] |
ro |
N/A |
Measurement keys for the inverter stati that are measurements. |
| ::: |
Example Input
.. code-block:: json
{
"devices": {
"inverters": [
{
"device_id": "battery1",
"max_power_w": 10000.0,
"battery_id": null
}
]
}
}
Example Output
.. code-block:: json
{
"devices": {
"inverters": [
{
"device_id": "battery1",
"max_power_w": 10000.0,
"battery_id": null,
"measurement_keys": []
}
]
}
}
Battery devices base settings
:::{table} devices::batteries::list :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| device_id | str |
rw |
<unknown> |
- |
| capacity_wh | int |
rw |
8000 |
- |
| charging_efficiency | float |
rw |
0.88 |
- |
| discharging_efficiency | float |
rw |
0.88 |
- |
| levelized_cost_of_storage_kwh | float |
rw |
0.0 |
- |
| max_charge_power_w | Optional[float] |
rw |
5000 |
- |
| min_charge_power_w | Optional[float] |
rw |
50 |
- |
| charge_rates | Optional[numpydantic.vendor.npbase_meta_classes.NDArray] |
rw |
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ] |
- |
| min_soc_percentage | int |
rw |
0 |
- |
| max_soc_percentage | int |
rw |
100 |
- |
| measurement_key_soc_factor | str |
ro |
N/A |
Measurement key for the battery state of charge (SoC) as factor of total capacity [0.0 ... 1.0]. |
| measurement_key_power_l1_w | str |
ro |
N/A |
Measurement key for the L1 power the battery is charged or discharged with [W]. |
| measurement_key_power_l2_w | str |
ro |
N/A |
Measurement key for the L2 power the battery is charged or discharged with [W]. |
| measurement_key_power_l3_w | str |
ro |
N/A |
Measurement key for the L3 power the battery is charged or discharged with [W]. |
| measurement_key_power_3_phase_sym_w | str |
ro |
N/A |
Measurement key for the symmetric 3 phase power the battery is charged or discharged with [W]. |
| measurement_keys | Optional[list[str]] |
ro |
N/A |
Measurement keys for the battery stati that are measurements. |
Battery SoC, power. | :::
Example Input
.. code-block:: json
{
"devices": {
"batteries": [
{
"device_id": "battery1",
"capacity_wh": 8000,
"charging_efficiency": 0.88,
"discharging_efficiency": 0.88,
"levelized_cost_of_storage_kwh": 0.12,
"max_charge_power_w": 5000.0,
"min_charge_power_w": 50.0,
"charge_rates": "[0. 0.25 0.5 0.75 1. ]",
"min_soc_percentage": 10,
"max_soc_percentage": 100
}
]
}
}
Example Output
.. code-block:: json
{
"devices": {
"batteries": [
{
"device_id": "battery1",
"capacity_wh": 8000,
"charging_efficiency": 0.88,
"discharging_efficiency": 0.88,
"levelized_cost_of_storage_kwh": 0.12,
"max_charge_power_w": 5000.0,
"min_charge_power_w": 50.0,
"charge_rates": "[0. 0.25 0.5 0.75 1. ]",
"min_soc_percentage": 10,
"max_soc_percentage": 100,
"measurement_key_soc_factor": "battery1-soc-factor",
"measurement_key_power_l1_w": "battery1-power-l1-w",
"measurement_key_power_l2_w": "battery1-power-l2-w",
"measurement_key_power_l3_w": "battery1-power-l3-w",
"measurement_key_power_3_phase_sym_w": "battery1-power-3-phase-sym-w",
"measurement_keys": [
"battery1-soc-factor",
"battery1-power-l1-w",
"battery1-power-l2-w",
"battery1-power-l3-w",
"battery1-power-3-phase-sym-w"
]
}
]
}
}
Measurement Configuration
:::{table} measurement :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| load_emr_keys | EOS_MEASUREMENT__LOAD_EMR_KEYS |
Optional[list[str]] |
rw |
None |
- |
| grid_export_emr_keys | EOS_MEASUREMENT__GRID_EXPORT_EMR_KEYS |
Optional[list[str]] |
rw |
None |
- |
| grid_import_emr_keys | EOS_MEASUREMENT__GRID_IMPORT_EMR_KEYS |
Optional[list[str]] |
rw |
None |
- |
| pv_production_emr_keys | EOS_MEASUREMENT__PV_PRODUCTION_EMR_KEYS |
Optional[list[str]] |
rw |
None |
- |
| keys | list[str] |
ro |
N/A |
The keys of the measurements that can be stored. | |
| ::: |
Example Input
.. code-block:: json
{
"measurement": {
"load_emr_keys": [
"load0_emr"
],
"grid_export_emr_keys": [
"grid_export_emr"
],
"grid_import_emr_keys": [
"grid_import_emr"
],
"pv_production_emr_keys": [
"pv1_emr"
]
}
}
Example Output
.. code-block:: json
{
"measurement": {
"load_emr_keys": [
"load0_emr"
],
"grid_export_emr_keys": [
"grid_export_emr"
],
"grid_import_emr_keys": [
"grid_import_emr"
],
"pv_production_emr_keys": [
"pv1_emr"
],
"keys": [
"grid_export_emr",
"grid_import_emr",
"load0_emr",
"pv1_emr"
]
}
}
General Optimization Configuration
:::{table} optimization :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| horizon_hours | EOS_OPTIMIZATION__HORIZON_HOURS |
Optional[int] |
rw |
24 |
- |
| interval | EOS_OPTIMIZATION__INTERVAL |
Optional[int] |
rw |
3600 |
- |
| algorithm | EOS_OPTIMIZATION__ALGORITHM |
Optional[str] |
rw |
GENETIC |
- |
| genetic | EOS_OPTIMIZATION__GENETIC |
Optional[akkudoktoreos.optimization.optimization.GeneticCommonSettings] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"optimization": {
"horizon_hours": 24,
"interval": 3600,
"algorithm": "GENETIC",
"genetic": {
"individuals": 400,
"generations": 400,
"seed": null,
"penalties": {
"ev_soc_miss": 10
}
}
}
}
General Genetic Optimization Algorithm Configuration
:::{table} optimization::genetic :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| individuals | Optional[int] |
rw |
300 |
- |
| generations | Optional[int] |
rw |
400 |
- |
| seed | Optional[int] |
rw |
None |
- |
| penalties | Optional[dict[str, Union[float, int, str]]] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"optimization": {
"genetic": {
"individuals": 300,
"generations": 400,
"seed": null,
"penalties": {
"ev_soc_miss": 10
}
}
}
}
General Prediction Configuration
This class provides configuration for prediction settings, allowing users to specify parameters such as the forecast duration (in hours). Validators ensure each parameter is within a specified range.
Attributes: hours (Optional[int]): Number of hours into the future for predictions. Must be non-negative. historic_hours (Optional[int]): Number of hours into the past for historical data. Must be non-negative.
Validators:
validate_hours (int): Ensures hours is a non-negative integer.
validate_historic_hours (int): Ensures historic_hours is a non-negative integer.
:::{table} prediction :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| hours | EOS_PREDICTION__HOURS |
Optional[int] |
rw |
48 |
- |
| historic_hours | EOS_PREDICTION__HISTORIC_HOURS |
Optional[int] |
rw |
48 |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"prediction": {
"hours": 48,
"historic_hours": 48
}
}
Electricity Price Prediction Configuration
:::{table} elecprice :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| provider | EOS_ELECPRICE__PROVIDER |
Optional[str] |
rw |
None |
- |
| charges_kwh | EOS_ELECPRICE__CHARGES_KWH |
Optional[float] |
rw |
None |
- |
| vat_rate | EOS_ELECPRICE__VAT_RATE |
Optional[float] |
rw |
1.19 |
- |
| provider_settings | EOS_ELECPRICE__PROVIDER_SETTINGS |
ElecPriceCommonProviderSettings |
rw |
required |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"elecprice": {
"provider": "ElecPriceAkkudoktor",
"charges_kwh": 0.21,
"vat_rate": 1.19,
"provider_settings": {
"ElecPriceImport": null
}
}
}
Common settings for elecprice data import from file or JSON String
:::{table} elecprice::provider_settings::ElecPriceImport :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| import_file_path | Union[str, pathlib.Path, NoneType] |
rw |
None |
- |
| import_json | Optional[str] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"elecprice": {
"provider_settings": {
"ElecPriceImport": {
"import_file_path": null,
"import_json": "{\"elecprice_marketprice_wh\": [0.0003384, 0.0003318, 0.0003284]}"
}
}
}
}
Electricity Price Prediction Provider Configuration
:::{table} elecprice::provider_settings :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| ElecPriceImport | Optional[akkudoktoreos.prediction.elecpriceimport.ElecPriceImportCommonSettings] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"elecprice": {
"provider_settings": {
"ElecPriceImport": null
}
}
}
Feed In Tariff Prediction Configuration
:::{table} feedintariff :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| provider | EOS_FEEDINTARIFF__PROVIDER |
Optional[str] |
rw |
None |
- |
| provider_settings | EOS_FEEDINTARIFF__PROVIDER_SETTINGS |
FeedInTariffCommonProviderSettings |
rw |
required |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"feedintariff": {
"provider": "FeedInTariffFixed",
"provider_settings": {
"FeedInTariffFixed": null,
"FeedInTariffImport": null
}
}
}
Common settings for feed in tariff data import from file or JSON string
:::{table} feedintariff::provider_settings::FeedInTariffImport :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| import_file_path | Union[str, pathlib.Path, NoneType] |
rw |
None |
- |
| import_json | Optional[str] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"feedintariff": {
"provider_settings": {
"FeedInTariffImport": {
"import_file_path": null,
"import_json": "{\"fead_in_tariff_wh\": [0.000078, 0.000078, 0.000023]}"
}
}
}
}
Common settings for elecprice fixed price
:::{table} feedintariff::provider_settings::FeedInTariffFixed :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| feed_in_tariff_kwh | Optional[float] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"feedintariff": {
"provider_settings": {
"FeedInTariffFixed": {
"feed_in_tariff_kwh": 0.078
}
}
}
}
Feed In Tariff Prediction Provider Configuration
:::{table} feedintariff::provider_settings :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| FeedInTariffFixed | Optional[akkudoktoreos.prediction.feedintarifffixed.FeedInTariffFixedCommonSettings] |
rw |
None |
- |
| FeedInTariffImport | Optional[akkudoktoreos.prediction.feedintariffimport.FeedInTariffImportCommonSettings] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"feedintariff": {
"provider_settings": {
"FeedInTariffFixed": null,
"FeedInTariffImport": null
}
}
}
Load Prediction Configuration
:::{table} load :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| provider | EOS_LOAD__PROVIDER |
Optional[str] |
rw |
None |
- |
| provider_settings | EOS_LOAD__PROVIDER_SETTINGS |
LoadCommonProviderSettings |
rw |
required |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"load": {
"provider": "LoadAkkudoktor",
"provider_settings": {
"LoadAkkudoktor": null,
"LoadVrm": null,
"LoadImport": null
}
}
}
Common settings for load data import from file or JSON string
:::{table} load::provider_settings::LoadImport :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| import_file_path | Union[str, pathlib.Path, NoneType] |
rw |
None |
- |
| import_json | Optional[str] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"load": {
"provider_settings": {
"LoadImport": {
"import_file_path": null,
"import_json": "{\"load0_mean\": [676.71, 876.19, 527.13]}"
}
}
}
}
Common settings for VRM API
:::{table} load::provider_settings::LoadVrm :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| load_vrm_token | str |
rw |
your-token |
- |
| load_vrm_idsite | int |
rw |
12345 |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"load": {
"provider_settings": {
"LoadVrm": {
"load_vrm_token": "your-token",
"load_vrm_idsite": 12345
}
}
}
}
Common settings for load data import from file
:::{table} load::provider_settings::LoadAkkudoktor :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| loadakkudoktor_year_energy_kwh | Optional[float] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"load": {
"provider_settings": {
"LoadAkkudoktor": {
"loadakkudoktor_year_energy_kwh": 40421.0
}
}
}
}
Load Prediction Provider Configuration
:::{table} load::provider_settings :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| LoadAkkudoktor | Optional[akkudoktoreos.prediction.loadakkudoktor.LoadAkkudoktorCommonSettings] |
rw |
None |
- |
| LoadVrm | Optional[akkudoktoreos.prediction.loadvrm.LoadVrmCommonSettings] |
rw |
None |
- |
| LoadImport | Optional[akkudoktoreos.prediction.loadimport.LoadImportCommonSettings] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"load": {
"provider_settings": {
"LoadAkkudoktor": null,
"LoadVrm": null,
"LoadImport": null
}
}
}
PV Forecast Configuration
:::{table} pvforecast :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| provider | EOS_PVFORECAST__PROVIDER |
Optional[str] |
rw |
None |
- |
| provider_settings | EOS_PVFORECAST__PROVIDER_SETTINGS |
PVForecastCommonProviderSettings |
rw |
required |
- |
| planes | EOS_PVFORECAST__PLANES |
Optional[list[akkudoktoreos.prediction.pvforecast.PVForecastPlaneSetting]] |
rw |
None |
- |
| max_planes | EOS_PVFORECAST__MAX_PLANES |
Optional[int] |
rw |
0 |
- |
| planes_peakpower | List[float] |
ro |
N/A |
Compute a list of the peak power per active planes. | |
| planes_azimuth | List[float] |
ro |
N/A |
Compute a list of the azimuths per active planes. | |
| planes_tilt | List[float] |
ro |
N/A |
Compute a list of the tilts per active planes. | |
| planes_userhorizon | Any |
ro |
N/A |
Compute a list of the user horizon per active planes. | |
| planes_inverter_paco | Any |
ro |
N/A |
Compute a list of the maximum power rating of the inverter per active planes. | |
| ::: |
Example Input
.. code-block:: json
{
"pvforecast": {
"provider": "PVForecastAkkudoktor",
"provider_settings": {
"PVForecastImport": null,
"PVForecastVrm": null
},
"planes": [
{
"surface_tilt": 10.0,
"surface_azimuth": 180.0,
"userhorizon": [
10.0,
20.0,
30.0
],
"peakpower": 5.0,
"pvtechchoice": "crystSi",
"mountingplace": "free",
"loss": 14.0,
"trackingtype": 0,
"optimal_surface_tilt": false,
"optimalangles": false,
"albedo": null,
"module_model": null,
"inverter_model": null,
"inverter_paco": 6000,
"modules_per_string": 20,
"strings_per_inverter": 2
},
{
"surface_tilt": 20.0,
"surface_azimuth": 90.0,
"userhorizon": [
5.0,
15.0,
25.0
],
"peakpower": 3.5,
"pvtechchoice": "crystSi",
"mountingplace": "free",
"loss": 14.0,
"trackingtype": 1,
"optimal_surface_tilt": false,
"optimalangles": false,
"albedo": null,
"module_model": null,
"inverter_model": null,
"inverter_paco": 4000,
"modules_per_string": 20,
"strings_per_inverter": 2
}
],
"max_planes": 1
}
}
Example Output
.. code-block:: json
{
"pvforecast": {
"provider": "PVForecastAkkudoktor",
"provider_settings": {
"PVForecastImport": null,
"PVForecastVrm": null
},
"planes": [
{
"surface_tilt": 10.0,
"surface_azimuth": 180.0,
"userhorizon": [
10.0,
20.0,
30.0
],
"peakpower": 5.0,
"pvtechchoice": "crystSi",
"mountingplace": "free",
"loss": 14.0,
"trackingtype": 0,
"optimal_surface_tilt": false,
"optimalangles": false,
"albedo": null,
"module_model": null,
"inverter_model": null,
"inverter_paco": 6000,
"modules_per_string": 20,
"strings_per_inverter": 2
},
{
"surface_tilt": 20.0,
"surface_azimuth": 90.0,
"userhorizon": [
5.0,
15.0,
25.0
],
"peakpower": 3.5,
"pvtechchoice": "crystSi",
"mountingplace": "free",
"loss": 14.0,
"trackingtype": 1,
"optimal_surface_tilt": false,
"optimalangles": false,
"albedo": null,
"module_model": null,
"inverter_model": null,
"inverter_paco": 4000,
"modules_per_string": 20,
"strings_per_inverter": 2
}
],
"max_planes": 1,
"planes_peakpower": [
5.0,
3.5
],
"planes_azimuth": [
180.0,
90.0
],
"planes_tilt": [
10.0,
20.0
],
"planes_userhorizon": [
[
10.0,
20.0,
30.0
],
[
5.0,
15.0,
25.0
]
],
"planes_inverter_paco": [
6000.0,
4000.0
]
}
}
PV Forecast Plane Configuration
:::{table} pvforecast::planes::list :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| surface_tilt | Optional[float] |
rw |
30.0 |
- |
| surface_azimuth | Optional[float] |
rw |
180.0 |
- |
| userhorizon | Optional[List[float]] |
rw |
None |
- |
| peakpower | Optional[float] |
rw |
None |
- |
| pvtechchoice | Optional[str] |
rw |
crystSi |
- |
| mountingplace | Optional[str] |
rw |
free |
- |
| loss | Optional[float] |
rw |
14.0 |
- |
| trackingtype | Optional[int] |
rw |
None |
- |
| optimal_surface_tilt | Optional[bool] |
rw |
False |
- |
| optimalangles | Optional[bool] |
rw |
False |
- |
| albedo | Optional[float] |
rw |
None |
- |
| module_model | Optional[str] |
rw |
None |
- |
| inverter_model | Optional[str] |
rw |
None |
- |
| inverter_paco | Optional[int] |
rw |
None |
- |
| modules_per_string | Optional[int] |
rw |
None |
- |
| strings_per_inverter | Optional[int] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"pvforecast": {
"planes": [
{
"surface_tilt": 10.0,
"surface_azimuth": 180.0,
"userhorizon": [
10.0,
20.0,
30.0
],
"peakpower": 5.0,
"pvtechchoice": "crystSi",
"mountingplace": "free",
"loss": 14.0,
"trackingtype": 0,
"optimal_surface_tilt": false,
"optimalangles": false,
"albedo": null,
"module_model": null,
"inverter_model": null,
"inverter_paco": 6000,
"modules_per_string": 20,
"strings_per_inverter": 2
}
]
}
}
Common settings for VRM API
:::{table} pvforecast::provider_settings::PVForecastVrm :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| pvforecast_vrm_token | str |
rw |
your-token |
- |
| pvforecast_vrm_idsite | int |
rw |
12345 |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"pvforecast": {
"provider_settings": {
"PVForecastVrm": {
"pvforecast_vrm_token": "your-token",
"pvforecast_vrm_idsite": 12345
}
}
}
}
Common settings for pvforecast data import from file or JSON string
:::{table} pvforecast::provider_settings::PVForecastImport :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| import_file_path | Union[str, pathlib.Path, NoneType] |
rw |
None |
- |
| import_json | Optional[str] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"pvforecast": {
"provider_settings": {
"PVForecastImport": {
"import_file_path": null,
"import_json": "{\"pvforecast_ac_power\": [0, 8.05, 352.91]}"
}
}
}
}
PV Forecast Provider Configuration
:::{table} pvforecast::provider_settings :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| PVForecastImport | Optional[akkudoktoreos.prediction.pvforecastimport.PVForecastImportCommonSettings] |
rw |
None |
- |
| PVForecastVrm | Optional[akkudoktoreos.prediction.pvforecastvrm.PVForecastVrmCommonSettings] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"pvforecast": {
"provider_settings": {
"PVForecastImport": null,
"PVForecastVrm": null
}
}
}
Weather Forecast Configuration
:::{table} weather :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| provider | EOS_WEATHER__PROVIDER |
Optional[str] |
rw |
None |
- |
| provider_settings | EOS_WEATHER__PROVIDER_SETTINGS |
WeatherCommonProviderSettings |
rw |
required |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"weather": {
"provider": "WeatherImport",
"provider_settings": {
"WeatherImport": null
}
}
}
Common settings for weather data import from file or JSON string
:::{table} weather::provider_settings::WeatherImport :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| import_file_path | Union[str, pathlib.Path, NoneType] |
rw |
None |
- |
| import_json | Optional[str] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"weather": {
"provider_settings": {
"WeatherImport": {
"import_file_path": null,
"import_json": "{\"weather_temp_air\": [18.3, 17.8, 16.9]}"
}
}
}
}
Weather Forecast Provider Configuration
:::{table} weather::provider_settings :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| WeatherImport | Optional[akkudoktoreos.prediction.weatherimport.WeatherImportCommonSettings] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"weather": {
"provider_settings": {
"WeatherImport": null
}
}
}
Server Configuration
:::{table} server :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| host | EOS_SERVER__HOST |
Optional[str] |
rw |
127.0.0.1 |
- |
| port | EOS_SERVER__PORT |
Optional[int] |
rw |
8503 |
- |
| verbose | EOS_SERVER__VERBOSE |
Optional[bool] |
rw |
False |
- |
| startup_eosdash | EOS_SERVER__STARTUP_EOSDASH |
Optional[bool] |
rw |
True |
- |
| eosdash_host | EOS_SERVER__EOSDASH_HOST |
Optional[str] |
rw |
None |
- |
| eosdash_port | EOS_SERVER__EOSDASH_PORT |
Optional[int] |
rw |
None |
- |
| ::: |
Example Input/Output
.. code-block:: json
{
"server": {
"host": "127.0.0.1",
"port": 8503,
"verbose": false,
"startup_eosdash": true,
"eosdash_host": "127.0.0.1",
"eosdash_port": 8504
}
}
Utils Configuration
:::{table} utils :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| ::: |
Example Input/Output
.. code-block:: json
{
"utils": {}
}
Full example Config
.. code-block:: json
{
"general": {
"version": "0.2.0+dev",
"data_folder_path": null,
"data_output_subpath": "output",
"latitude": 52.52,
"longitude": 13.405
},
"cache": {
"subpath": "cache",
"cleanup_interval": 300.0
},
"ems": {
"startup_delay": 5.0,
"interval": 300.0,
"mode": "OPTIMIZATION"
},
"logging": {
"console_level": "TRACE",
"file_level": "TRACE"
},
"devices": {
"batteries": [
{
"device_id": "battery1",
"capacity_wh": 8000,
"charging_efficiency": 0.88,
"discharging_efficiency": 0.88,
"levelized_cost_of_storage_kwh": 0.0,
"max_charge_power_w": 5000,
"min_charge_power_w": 50,
"charge_rates": "[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
"min_soc_percentage": 0,
"max_soc_percentage": 100,
"measurement_key_soc_factor": "battery1-soc-factor",
"measurement_key_power_l1_w": "battery1-power-l1-w",
"measurement_key_power_l2_w": "battery1-power-l2-w",
"measurement_key_power_l3_w": "battery1-power-l3-w",
"measurement_key_power_3_phase_sym_w": "battery1-power-3-phase-sym-w",
"measurement_keys": [
"battery1-soc-factor",
"battery1-power-l1-w",
"battery1-power-l2-w",
"battery1-power-l3-w",
"battery1-power-3-phase-sym-w"
]
}
],
"max_batteries": 1,
"electric_vehicles": [
{
"device_id": "battery1",
"capacity_wh": 8000,
"charging_efficiency": 0.88,
"discharging_efficiency": 0.88,
"levelized_cost_of_storage_kwh": 0.0,
"max_charge_power_w": 5000,
"min_charge_power_w": 50,
"charge_rates": "[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
"min_soc_percentage": 0,
"max_soc_percentage": 100,
"measurement_key_soc_factor": "battery1-soc-factor",
"measurement_key_power_l1_w": "battery1-power-l1-w",
"measurement_key_power_l2_w": "battery1-power-l2-w",
"measurement_key_power_l3_w": "battery1-power-l3-w",
"measurement_key_power_3_phase_sym_w": "battery1-power-3-phase-sym-w",
"measurement_keys": [
"battery1-soc-factor",
"battery1-power-l1-w",
"battery1-power-l2-w",
"battery1-power-l3-w",
"battery1-power-3-phase-sym-w"
]
}
],
"max_electric_vehicles": 1,
"inverters": [],
"max_inverters": 1,
"home_appliances": [],
"max_home_appliances": 1
},
"measurement": {
"load_emr_keys": [
"load0_emr"
],
"grid_export_emr_keys": [
"grid_export_emr"
],
"grid_import_emr_keys": [
"grid_import_emr"
],
"pv_production_emr_keys": [
"pv1_emr"
]
},
"optimization": {
"horizon_hours": 24,
"interval": 3600,
"algorithm": "GENETIC",
"genetic": {
"individuals": 400,
"generations": 400,
"seed": null,
"penalties": {
"ev_soc_miss": 10
}
}
},
"prediction": {
"hours": 48,
"historic_hours": 48
},
"elecprice": {
"provider": "ElecPriceAkkudoktor",
"charges_kwh": 0.21,
"vat_rate": 1.19,
"provider_settings": {
"ElecPriceImport": null
}
},
"feedintariff": {
"provider": "FeedInTariffFixed",
"provider_settings": {
"FeedInTariffFixed": null,
"FeedInTariffImport": null
}
},
"load": {
"provider": "LoadAkkudoktor",
"provider_settings": {
"LoadAkkudoktor": null,
"LoadVrm": null,
"LoadImport": null
}
},
"pvforecast": {
"provider": "PVForecastAkkudoktor",
"provider_settings": {
"PVForecastImport": null,
"PVForecastVrm": null
},
"planes": [
{
"surface_tilt": 10.0,
"surface_azimuth": 180.0,
"userhorizon": [
10.0,
20.0,
30.0
],
"peakpower": 5.0,
"pvtechchoice": "crystSi",
"mountingplace": "free",
"loss": 14.0,
"trackingtype": 0,
"optimal_surface_tilt": false,
"optimalangles": false,
"albedo": null,
"module_model": null,
"inverter_model": null,
"inverter_paco": 6000,
"modules_per_string": 20,
"strings_per_inverter": 2
},
{
"surface_tilt": 20.0,
"surface_azimuth": 90.0,
"userhorizon": [
5.0,
15.0,
25.0
],
"peakpower": 3.5,
"pvtechchoice": "crystSi",
"mountingplace": "free",
"loss": 14.0,
"trackingtype": 1,
"optimal_surface_tilt": false,
"optimalangles": false,
"albedo": null,
"module_model": null,
"inverter_model": null,
"inverter_paco": 4000,
"modules_per_string": 20,
"strings_per_inverter": 2
}
],
"max_planes": 1
},
"weather": {
"provider": "WeatherImport",
"provider_settings": {
"WeatherImport": null
}
},
"server": {
"host": "127.0.0.1",
"port": 8503,
"verbose": false,
"startup_eosdash": true,
"eosdash_host": "127.0.0.1",
"eosdash_port": 8504
},
"utils": {}
}