Files
EOS/docs/_generated/config.md
Bobby Noelte e7b43782a4 fix: pydantic extra keywords deprecated (#753)
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>
2025-11-10 16:57:44 +01:00

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": {}
   }