Configuration Guideline

The configuration controls all aspects of EOS: optimization, prediction, measurement, and energy management.

Storing Configuration

EOS stores configuration data in a nested structure. Note that configuration changes inside EOS are updated in memory, meaning all changes will be lost upon restarting the EOS REST server if not saved to the EOS configuration file.

Some configuration keys are read-only and cannot be altered. These keys are either set up by other means, such as environment variables, or determined from other information.

Several endpoints of the EOS REST server allow for the management and retrieval of configuration data.

Save Configuration File

Use endpoint PUT /v1/config/file to save the current configuration to the EOS configuration file.

Load Configuration File

Use endpoint POST /v1/config/reset to reset the configuration to the values in the EOS configuration file.

Configuration Sources and Priorities

The configuration sources and their priorities are as follows:

  1. Settings: Provided during runtime by the REST interface

  2. Environment Variables: Defined at startup of the REST server and during runtime

  3. EOS Configuration File: Read at startup of the REST server and on request

  4. Default Values

Runtime Config Updates

The EOS configuration can be updated at runtime. Note that those updates are not persistent automatically. However it is possible to save the configuration to the EOS configuration file.

Use the following endpoints to change the current runtime configuration:

  • PUT /v1/config: Update the entire or parts of the configuration.

Environment Variables

All configuration keys can be set by environment variables prefixed with EOS_ and separated by __ for nested structures. Environment variables are case insensitive.

EOS recognizes the following special environment variables (case sensitive):

  • EOS_CONFIG_DIR: The directory to search for an EOS configuration file.

  • EOS_DIR: The directory used by EOS for data, which will also be searched for an EOS configuration file.

EOS Configuration File

The EOS configuration file provides persistent storage for configuration data. It can be modified directly or through the REST interface.

If you do not have a configuration file, it will be automatically created on the first startup of the REST server in a system-dependent location.

To determine the location of the configuration file used by EOS, ask the REST server. The endpoint GET /v1/config provides the general.config_file_path configuration key.

EOS searches for the configuration file in the following order:

  1. The directory specified by the EOS_CONFIG_DIR environment variable

  2. The directory specified by the EOS_DIR environment variable

  3. A platform-specific default directory for EOS

  4. The current working directory

The first configuration file available in these directories is loaded. If no configuration file is found, a default configuration file is created, and the default settings are written to it. The location of the created configuration file follows the same order in which EOS searches for configuration files, and it depends on whether the relevant environment variables are set.

Use the following endpoints to interact with the configuration file:

  • PUT /v1/config/file: Save the current configuration to the configuration file.

  • PUT /v1/config/reset: Reload the configuration file, all unsaved runtime configuration is reset.

Default Values

Some of the configuration keys have default values by definition. For most of the configuration keys the default value is just None, which means no default value.

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.

general

Name

Environment Variable

Type

Read-Only

Default

Description

version

EOS_GENERAL__VERSION

str

rw

0.2.0

Configuration file version. Used to check compatibility.

data_folder_path

EOS_GENERAL__DATA_FOLDER_PATH

Optional[pathlib.Path]

rw

None

Path to EOS data directory.

data_output_subpath

EOS_GENERAL__DATA_OUTPUT_SUBPATH

Optional[pathlib.Path]

rw

output

Sub-path for the EOS output data directory.

latitude

EOS_GENERAL__LATITUDE

Optional[float]

rw

52.52

Latitude in decimal degrees, between -90 and 90, north is positive (ISO 19115) (°)

longitude

EOS_GENERAL__LONGITUDE

Optional[float]

rw

13.405

Longitude in decimal degrees, within -180 to 180 (°)

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

{
    "general": {
        "version": "0.2.0",
        "data_folder_path": null,
        "data_output_subpath": "output",
        "latitude": 52.52,
        "longitude": 13.405
    }
}

Example Output

{
    "general": {
        "version": "0.2.0",
        "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

cache

Name

Environment Variable

Type

Read-Only

Default

Description

subpath

EOS_CACHE__SUBPATH

Optional[pathlib.Path]

rw

cache

Sub-path for the EOS cache data directory.

cleanup_interval

EOS_CACHE__CLEANUP_INTERVAL

float

rw

300

Intervall in seconds for EOS file cache cleanup.

Example Input/Output

{
    "cache": {
        "subpath": "cache",
        "cleanup_interval": 300.0
    }
}

Energy Management Configuration

ems

Name

Environment Variable

Type

Read-Only

Default

Description

startup_delay

EOS_EMS__STARTUP_DELAY

float

rw

5

Startup delay in seconds for EOS energy management runs.

interval

EOS_EMS__INTERVAL

Optional[float]

rw

None

Intervall in seconds between EOS energy management runs.

mode

EOS_EMS__MODE

Optional[akkudoktoreos.core.emsettings.EnergyManagementMode]

rw

None

Energy management mode [OPTIMIZATION

Example Input/Output

{
    "ems": {
        "startup_delay": 5.0,
        "interval": 300.0,
        "mode": "OPTIMIZATION"
    }
}

Logging Configuration

logging

Name

Environment Variable

Type

Read-Only

Default

Description

console_level

EOS_LOGGING__CONSOLE_LEVEL

Optional[str]

rw

None

Logging level when logging to console.

file_level

EOS_LOGGING__FILE_LEVEL

Optional[str]

rw

None

Logging level when logging to file.

file_path

Optional[pathlib.Path]

ro

N/A

Computed log file path based on data output path.

Example Input

{
    "logging": {
        "console_level": "TRACE",
        "file_level": "TRACE"
    }
}

Example Output

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

devices

Name

Environment Variable

Type

Read-Only

Default

Description

batteries

EOS_DEVICES__BATTERIES

Optional[list[akkudoktoreos.devices.devices.BatteriesCommonSettings]]

rw

None

List of battery devices

max_batteries

EOS_DEVICES__MAX_BATTERIES

Optional[int]

rw

None

Maximum number of batteries that can be set

electric_vehicles

EOS_DEVICES__ELECTRIC_VEHICLES

Optional[list[akkudoktoreos.devices.devices.BatteriesCommonSettings]]

rw

None

List of electric vehicle devices

max_electric_vehicles

EOS_DEVICES__MAX_ELECTRIC_VEHICLES

Optional[int]

rw

None

Maximum number of electric vehicles that can be set

inverters

EOS_DEVICES__INVERTERS

Optional[list[akkudoktoreos.devices.devices.InverterCommonSettings]]

rw

None

List of inverters

max_inverters

EOS_DEVICES__MAX_INVERTERS

Optional[int]

rw

None

Maximum number of inverters that can be set

home_appliances

EOS_DEVICES__HOME_APPLIANCES

Optional[list[akkudoktoreos.devices.devices.HomeApplianceCommonSettings]]

rw

None

List of home appliances

max_home_appliances

EOS_DEVICES__MAX_HOME_APPLIANCES

Optional[int]

rw

None

Maximum number of home_appliances that can be set

measurement_keys

Optional[list[str]]

ro

N/A

Return the measurement keys for the resource/ device stati that are measurements.

Example Input

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

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

devices::home_appliances::list

Name

Type

Read-Only

Default

Description

device_id

str

rw

<unknown>

ID of device

consumption_wh

int

rw

required

Energy consumption [Wh].

duration_h

int

rw

required

Usage duration in hours [0 … 24].

time_windows

Optional[akkudoktoreos.utils.datetimeutil.TimeWindowSequence]

rw

None

Sequence of allowed time windows. Defaults to optimization general time window.

measurement_keys

Optional[list[str]]

ro

N/A

Measurement keys for the home appliance stati that are measurements.

Example Input
{
    "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
                        }
                    ]
                }
            },
            {
                "device_id": "ev1",
                "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
                        }
                    ]
                }
            },
            {
                "device_id": "inverter1",
                "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
                        }
                    ]
                }
            },
            {
                "device_id": "dishwasher",
                "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
{
    "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": []
            },
            {
                "device_id": "ev1",
                "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": []
            },
            {
                "device_id": "inverter1",
                "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": []
            },
            {
                "device_id": "dishwasher",
                "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

devices::inverters::list

Name

Type

Read-Only

Default

Description

device_id

str

rw

<unknown>

ID of device

max_power_w

Optional[float]

rw

None

Maximum power [W].

battery_id

Optional[str]

rw

None

ID of battery controlled by this inverter.

measurement_keys

Optional[list[str]]

ro

N/A

Measurement keys for the inverter stati that are measurements.

Example Input
{
    "devices": {
        "inverters": [
            {
                "device_id": "battery1",
                "max_power_w": 10000.0,
                "battery_id": null
            },
            {
                "device_id": "ev1",
                "max_power_w": 10000.0,
                "battery_id": "battery1"
            },
            {
                "device_id": "inverter1",
                "max_power_w": 10000.0,
                "battery_id": "battery1"
            },
            {
                "device_id": "dishwasher",
                "max_power_w": 10000.0,
                "battery_id": "battery1"
            }
        ]
    }
}
Example Output
{
    "devices": {
        "inverters": [
            {
                "device_id": "battery1",
                "max_power_w": 10000.0,
                "battery_id": null,
                "measurement_keys": []
            },
            {
                "device_id": "ev1",
                "max_power_w": 10000.0,
                "battery_id": "battery1",
                "measurement_keys": []
            },
            {
                "device_id": "inverter1",
                "max_power_w": 10000.0,
                "battery_id": "battery1",
                "measurement_keys": []
            },
            {
                "device_id": "dishwasher",
                "max_power_w": 10000.0,
                "battery_id": "battery1",
                "measurement_keys": []
            }
        ]
    }
}

Battery devices base settings

Example Input
{
    "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
            },
            {
                "device_id": "ev1",
                "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.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
                "min_soc_percentage": 10,
                "max_soc_percentage": 100
            },
            {
                "device_id": "inverter1",
                "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.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
                "min_soc_percentage": 10,
                "max_soc_percentage": 100
            },
            {
                "device_id": "dishwasher",
                "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.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
                "min_soc_percentage": 10,
                "max_soc_percentage": 100
            }
        ]
    }
}
Example Output
{
    "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"
                ]
            },
            {
                "device_id": "ev1",
                "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.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
                "min_soc_percentage": 10,
                "max_soc_percentage": 100,
                "measurement_key_soc_factor": "ev1-soc-factor",
                "measurement_key_power_l1_w": "ev1-power-l1-w",
                "measurement_key_power_l2_w": "ev1-power-l2-w",
                "measurement_key_power_l3_w": "ev1-power-l3-w",
                "measurement_key_power_3_phase_sym_w": "ev1-power-3-phase-sym-w",
                "measurement_keys": [
                    "ev1-soc-factor",
                    "ev1-power-l1-w",
                    "ev1-power-l2-w",
                    "ev1-power-l3-w",
                    "ev1-power-3-phase-sym-w"
                ]
            },
            {
                "device_id": "inverter1",
                "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.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
                "min_soc_percentage": 10,
                "max_soc_percentage": 100,
                "measurement_key_soc_factor": "inverter1-soc-factor",
                "measurement_key_power_l1_w": "inverter1-power-l1-w",
                "measurement_key_power_l2_w": "inverter1-power-l2-w",
                "measurement_key_power_l3_w": "inverter1-power-l3-w",
                "measurement_key_power_3_phase_sym_w": "inverter1-power-3-phase-sym-w",
                "measurement_keys": [
                    "inverter1-soc-factor",
                    "inverter1-power-l1-w",
                    "inverter1-power-l2-w",
                    "inverter1-power-l3-w",
                    "inverter1-power-3-phase-sym-w"
                ]
            },
            {
                "device_id": "dishwasher",
                "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.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]",
                "min_soc_percentage": 10,
                "max_soc_percentage": 100,
                "measurement_key_soc_factor": "dishwasher-soc-factor",
                "measurement_key_power_l1_w": "dishwasher-power-l1-w",
                "measurement_key_power_l2_w": "dishwasher-power-l2-w",
                "measurement_key_power_l3_w": "dishwasher-power-l3-w",
                "measurement_key_power_3_phase_sym_w": "dishwasher-power-3-phase-sym-w",
                "measurement_keys": [
                    "dishwasher-soc-factor",
                    "dishwasher-power-l1-w",
                    "dishwasher-power-l2-w",
                    "dishwasher-power-l3-w",
                    "dishwasher-power-3-phase-sym-w"
                ]
            }
        ]
    }
}

Measurement Configuration

measurement

Name

Environment Variable

Type

Read-Only

Default

Description

load_emr_keys

EOS_MEASUREMENT__LOAD_EMR_KEYS

Optional[list[str]]

rw

None

The keys of the measurements that are energy meter readings of a load [kWh].

grid_export_emr_keys

EOS_MEASUREMENT__GRID_EXPORT_EMR_KEYS

Optional[list[str]]

rw

None

The keys of the measurements that are energy meter readings of energy export to grid [kWh].

grid_import_emr_keys

EOS_MEASUREMENT__GRID_IMPORT_EMR_KEYS

Optional[list[str]]

rw

None

The keys of the measurements that are energy meter readings of energy import from grid [kWh].

pv_production_emr_keys

EOS_MEASUREMENT__PV_PRODUCTION_EMR_KEYS

Optional[list[str]]

rw

None

The keys of the measurements that are PV production energy meter readings [kWh].

keys

list[str]

ro

N/A

The keys of the measurements that can be stored.

Example Input

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

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

optimization

Name

Environment Variable

Type

Read-Only

Default

Description

horizon_hours

EOS_OPTIMIZATION__HORIZON_HOURS

Optional[int]

rw

24

The general time window within which the energy optimization goal shall be achieved [h]. Defaults to 24 hours.

interval

EOS_OPTIMIZATION__INTERVAL

Optional[int]

rw

3600

The optimization interval [sec].

algorithm

EOS_OPTIMIZATION__ALGORITHM

Optional[str]

rw

GENETIC

The optimization algorithm.

genetic

EOS_OPTIMIZATION__GENETIC

Optional[akkudoktoreos.optimization.optimization.GeneticCommonSettings]

rw

None

Genetic optimization algorithm configuration.

Example Input/Output

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

optimization::genetic

Name

Type

Read-Only

Default

Description

individuals

Optional[int]

rw

300

Number of individuals (solutions) to generate for the (initial) generation [>= 10]. Defaults to 300.

generations

Optional[int]

rw

400

Number of generations to evaluate the optimal solution [>= 10]. Defaults to 400.

seed

Optional[int]

rw

None

Fixed seed for genetic algorithm. Defaults to ‘None’ which means random seed.

penalties

Optional[dict[str, Union[float, int, str]]]

rw

None

A dictionary of penalty function parameters consisting of a penalty function parameter name and the associated value.

Example Input/Output
{
    "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.

prediction

Name

Environment Variable

Type

Read-Only

Default

Description

hours

EOS_PREDICTION__HOURS

Optional[int]

rw

48

Number of hours into the future for predictions

historic_hours

EOS_PREDICTION__HISTORIC_HOURS

Optional[int]

rw

48

Number of hours into the past for historical predictions data

Example Input/Output

{
    "prediction": {
        "hours": 48,
        "historic_hours": 48
    }
}

Electricity Price Prediction Configuration

elecprice

Name

Environment Variable

Type

Read-Only

Default

Description

provider

EOS_ELECPRICE__PROVIDER

Optional[str]

rw

None

Electricity price provider id of provider to be used.

charges_kwh

EOS_ELECPRICE__CHARGES_KWH

Optional[float]

rw

None

Electricity price charges [€/kWh]. Will be added to variable market price.

vat_rate

EOS_ELECPRICE__VAT_RATE

Optional[float]

rw

1.19

VAT rate factor applied to electricity price when charges are used.

provider_settings

EOS_ELECPRICE__PROVIDER_SETTINGS

ElecPriceCommonProviderSettings

rw

required

Provider settings

Example Input/Output

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

elecprice::provider_settings::ElecPriceImport

Name

Type

Read-Only

Default

Description

import_file_path

Union[str, pathlib.Path, NoneType]

rw

None

Path to the file to import elecprice data from.

import_json

Optional[str]

rw

None

JSON string, dictionary of electricity price forecast value lists.

Example Input/Output
{
    "elecprice": {
        "provider_settings": {
            "ElecPriceImport": {
                "import_file_path": null,
                "import_json": "{\"elecprice_marketprice_wh\": [0.0003384, 0.0003318, 0.0003284]}"
            }
        }
    }
}

Electricity Price Prediction Provider Configuration

elecprice::provider_settings

Name

Type

Read-Only

Default

Description

ElecPriceImport

Optional[akkudoktoreos.prediction.elecpriceimport.ElecPriceImportCommonSettings]

rw

None

ElecPriceImport settings

Example Input/Output
{
    "elecprice": {
        "provider_settings": {
            "ElecPriceImport": null
        }
    }
}

Feed In Tariff Prediction Configuration

feedintariff

Name

Environment Variable

Type

Read-Only

Default

Description

provider

EOS_FEEDINTARIFF__PROVIDER

Optional[str]

rw

None

Feed in tariff provider id of provider to be used.

provider_settings

EOS_FEEDINTARIFF__PROVIDER_SETTINGS

FeedInTariffCommonProviderSettings

rw

required

Provider settings

Example Input/Output

{
    "feedintariff": {
        "provider": "FeedInTariffFixed",
        "provider_settings": {
            "FeedInTariffFixed": null,
            "FeedInTariffImport": null
        }
    }
}

Common settings for feed in tariff data import from file or JSON string

feedintariff::provider_settings::FeedInTariffImport

Name

Type

Read-Only

Default

Description

import_file_path

Union[str, pathlib.Path, NoneType]

rw

None

Path to the file to import feed in tariff data from.

import_json

Optional[str]

rw

None

JSON string, dictionary of feed in tariff forecast value lists.

Example Input/Output
{
    "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

feedintariff::provider_settings::FeedInTariffFixed

Name

Type

Read-Only

Default

Description

feed_in_tariff_kwh

Optional[float]

rw

None

Electricity price feed in tariff [€/kWH].

Example Input/Output
{
    "feedintariff": {
        "provider_settings": {
            "FeedInTariffFixed": {
                "feed_in_tariff_kwh": 0.078
            }
        }
    }
}

Feed In Tariff Prediction Provider Configuration

feedintariff::provider_settings

Name

Type

Read-Only

Default

Description

FeedInTariffFixed

Optional[akkudoktoreos.prediction.feedintarifffixed.FeedInTariffFixedCommonSettings]

rw

None

FeedInTariffFixed settings

FeedInTariffImport

Optional[akkudoktoreos.prediction.feedintariffimport.FeedInTariffImportCommonSettings]

rw

None

FeedInTariffImport settings

Example Input/Output
{
    "feedintariff": {
        "provider_settings": {
            "FeedInTariffFixed": null,
            "FeedInTariffImport": null
        }
    }
}

Load Prediction Configuration

load

Name

Environment Variable

Type

Read-Only

Default

Description

provider

EOS_LOAD__PROVIDER

Optional[str]

rw

None

Load provider id of provider to be used.

provider_settings

EOS_LOAD__PROVIDER_SETTINGS

LoadCommonProviderSettings

rw

required

Provider settings

Example Input/Output

{
    "load": {
        "provider": "LoadAkkudoktor",
        "provider_settings": {
            "LoadAkkudoktor": null,
            "LoadVrm": null,
            "LoadImport": null
        }
    }
}

Common settings for load data import from file or JSON string

load::provider_settings::LoadImport

Name

Type

Read-Only

Default

Description

import_file_path

Union[str, pathlib.Path, NoneType]

rw

None

Path to the file to import load data from.

import_json

Optional[str]

rw

None

JSON string, dictionary of load forecast value lists.

Example Input/Output
{
    "load": {
        "provider_settings": {
            "LoadImport": {
                "import_file_path": null,
                "import_json": "{\"load0_mean\": [676.71, 876.19, 527.13]}"
            }
        }
    }
}

Common settings for VRM API

load::provider_settings::LoadVrm

Name

Type

Read-Only

Default

Description

load_vrm_token

str

rw

your-token

Token for Connecting VRM API

load_vrm_idsite

int

rw

12345

VRM-Installation-ID

Example Input/Output
{
    "load": {
        "provider_settings": {
            "LoadVrm": {
                "load_vrm_token": "your-token",
                "load_vrm_idsite": 12345
            }
        }
    }
}

Common settings for load data import from file

load::provider_settings::LoadAkkudoktor

Name

Type

Read-Only

Default

Description

loadakkudoktor_year_energy_kwh

Optional[float]

rw

None

Yearly energy consumption (kWh).

Example Input/Output
{
    "load": {
        "provider_settings": {
            "LoadAkkudoktor": {
                "loadakkudoktor_year_energy_kwh": 40421.0
            }
        }
    }
}

Load Prediction Provider Configuration

load::provider_settings

Name

Type

Read-Only

Default

Description

LoadAkkudoktor

Optional[akkudoktoreos.prediction.loadakkudoktor.LoadAkkudoktorCommonSettings]

rw

None

LoadAkkudoktor settings

LoadVrm

Optional[akkudoktoreos.prediction.loadvrm.LoadVrmCommonSettings]

rw

None

LoadVrm settings

LoadImport

Optional[akkudoktoreos.prediction.loadimport.LoadImportCommonSettings]

rw

None

LoadImport settings

Example Input/Output
{
    "load": {
        "provider_settings": {
            "LoadAkkudoktor": null,
            "LoadVrm": null,
            "LoadImport": null
        }
    }
}

PV Forecast Configuration

pvforecast

Name

Environment Variable

Type

Read-Only

Default

Description

provider

EOS_PVFORECAST__PROVIDER

Optional[str]

rw

None

PVForecast provider id of provider to be used.

provider_settings

EOS_PVFORECAST__PROVIDER_SETTINGS

PVForecastCommonProviderSettings

rw

required

Provider settings

planes

EOS_PVFORECAST__PLANES

Optional[list[akkudoktoreos.prediction.pvforecast.PVForecastPlaneSetting]]

rw

None

Plane configuration.

max_planes

EOS_PVFORECAST__MAX_PLANES

Optional[int]

rw

0

Maximum number of planes that can be set

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

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

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

pvforecast::planes::list

Name

Type

Read-Only

Default

Description

surface_tilt

Optional[float]

rw

30.0

Tilt angle from horizontal plane. Ignored for two-axis tracking.

surface_azimuth

Optional[float]

rw

180.0

Orientation (azimuth angle) of the (fixed) plane. Clockwise from north (north=0, east=90, south=180, west=270).

userhorizon

Optional[List[float]]

rw

None

Elevation of horizon in degrees, at equally spaced azimuth clockwise from north.

peakpower

Optional[float]

rw

None

Nominal power of PV system in kW.

pvtechchoice

Optional[str]

rw

crystSi

PV technology. One of ‘crystSi’, ‘CIS’, ‘CdTe’, ‘Unknown’.

mountingplace

Optional[str]

rw

free

Type of mounting for PV system. Options are ‘free’ for free-standing and ‘building’ for building-integrated.

loss

Optional[float]

rw

14.0

Sum of PV system losses in percent

trackingtype

Optional[int]

rw

None

Type of suntracking. 0=fixed, 1=single horizontal axis aligned north-south, 2=two-axis tracking, 3=vertical axis tracking, 4=single horizontal axis aligned east-west, 5=single inclined axis aligned north-south.

optimal_surface_tilt

Optional[bool]

rw

False

Calculate the optimum tilt angle. Ignored for two-axis tracking.

optimalangles

Optional[bool]

rw

False

Calculate the optimum tilt and azimuth angles. Ignored for two-axis tracking.

albedo

Optional[float]

rw

None

Proportion of the light hitting the ground that it reflects back.

module_model

Optional[str]

rw

None

Model of the PV modules of this plane.

inverter_model

Optional[str]

rw

None

Model of the inverter of this plane.

inverter_paco

Optional[int]

rw

None

AC power rating of the inverter [W].

modules_per_string

Optional[int]

rw

None

Number of the PV modules of the strings of this plane.

strings_per_inverter

Optional[int]

rw

None

Number of the strings of the inverter of this plane.

Example Input/Output
{
    "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
            },
            {
                "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
            }
        ]
    }
}

Common settings for VRM API

pvforecast::provider_settings::PVForecastVrm

Name

Type

Read-Only

Default

Description

pvforecast_vrm_token

str

rw

your-token

Token for Connecting VRM API

pvforecast_vrm_idsite

int

rw

12345

VRM-Installation-ID

Example Input/Output
{
    "pvforecast": {
        "provider_settings": {
            "PVForecastVrm": {
                "pvforecast_vrm_token": "your-token",
                "pvforecast_vrm_idsite": 12345
            }
        }
    }
}

Common settings for pvforecast data import from file or JSON string

pvforecast::provider_settings::PVForecastImport

Name

Type

Read-Only

Default

Description

import_file_path

Union[str, pathlib.Path, NoneType]

rw

None

Path to the file to import PV forecast data from.

import_json

Optional[str]

rw

None

JSON string, dictionary of PV forecast value lists.

Example Input/Output
{
    "pvforecast": {
        "provider_settings": {
            "PVForecastImport": {
                "import_file_path": null,
                "import_json": "{\"pvforecast_ac_power\": [0, 8.05, 352.91]}"
            }
        }
    }
}

PV Forecast Provider Configuration

pvforecast::provider_settings

Name

Type

Read-Only

Default

Description

PVForecastImport

Optional[akkudoktoreos.prediction.pvforecastimport.PVForecastImportCommonSettings]

rw

None

PVForecastImport settings

PVForecastVrm

Optional[akkudoktoreos.prediction.pvforecastvrm.PVForecastVrmCommonSettings]

rw

None

PVForecastVrm settings

Example Input/Output
{
    "pvforecast": {
        "provider_settings": {
            "PVForecastImport": null,
            "PVForecastVrm": null
        }
    }
}

Weather Forecast Configuration

weather

Name

Environment Variable

Type

Read-Only

Default

Description

provider

EOS_WEATHER__PROVIDER

Optional[str]

rw

None

Weather provider id of provider to be used.

provider_settings

EOS_WEATHER__PROVIDER_SETTINGS

WeatherCommonProviderSettings

rw

required

Provider settings

Example Input/Output

{
    "weather": {
        "provider": "WeatherImport",
        "provider_settings": {
            "WeatherImport": null
        }
    }
}

Common settings for weather data import from file or JSON string

weather::provider_settings::WeatherImport

Name

Type

Read-Only

Default

Description

import_file_path

Union[str, pathlib.Path, NoneType]

rw

None

Path to the file to import weather data from.

import_json

Optional[str]

rw

None

JSON string, dictionary of weather forecast value lists.

Example Input/Output
{
    "weather": {
        "provider_settings": {
            "WeatherImport": {
                "import_file_path": null,
                "import_json": "{\"weather_temp_air\": [18.3, 17.8, 16.9]}"
            }
        }
    }
}

Weather Forecast Provider Configuration

weather::provider_settings

Name

Type

Read-Only

Default

Description

WeatherImport

Optional[akkudoktoreos.prediction.weatherimport.WeatherImportCommonSettings]

rw

None

WeatherImport settings

Example Input/Output
{
    "weather": {
        "provider_settings": {
            "WeatherImport": null
        }
    }
}

Server Configuration

server

Name

Environment Variable

Type

Read-Only

Default

Description

host

EOS_SERVER__HOST

Optional[str]

rw

127.0.0.1

EOS server IP address. Defaults to 127.0.0.1.

port

EOS_SERVER__PORT

Optional[int]

rw

8503

EOS server IP port number. Defaults to 8503.

verbose

EOS_SERVER__VERBOSE

Optional[bool]

rw

False

Enable debug output

startup_eosdash

EOS_SERVER__STARTUP_EOSDASH

Optional[bool]

rw

True

EOS server to start EOSdash server. Defaults to True.

eosdash_host

EOS_SERVER__EOSDASH_HOST

Optional[str]

rw

None

EOSdash server IP address. Defaults to EOS server IP address.

eosdash_port

EOS_SERVER__EOSDASH_PORT

Optional[int]

rw

None

EOSdash server IP port number. Defaults to EOS server IP port number + 1.

Example Input/Output

{
    "server": {
        "host": "127.0.0.1",
        "port": 8503,
        "verbose": false,
        "startup_eosdash": true,
        "eosdash_host": "127.0.0.1",
        "eosdash_port": 8504
    }
}

Utils Configuration

utils

Name

Environment Variable

Type

Read-Only

Default

Description

Example Input/Output

{
    "utils": {}
}

Full example Config

{
    "general": {
        "version": "0.2.0",
        "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": {}
}