mirror of
				https://github.com/Akkudoktor-EOS/EOS.git
				synced 2025-11-03 16:26:20 +00:00 
			
		
		
		
	
		
			Some checks failed
		
		
	
	Close stale pull requests/issues / Find Stale issues and PRs (push) Has been cancelled
				
			docker-build / platform-excludes (push) Has been cancelled
				
			pre-commit / pre-commit (push) Has been cancelled
				
			Run Pytest on Pull Request / test (push) Has been cancelled
				
			docker-build / build (push) Has been cancelled
				
			docker-build / merge (push) Has been cancelled
				
			Allow charge rates for electric vehicle to be provided by the POST optimize endpoint. Create a default value in case neither the parameters nor the configuration provide charge rates. This is also to allow to migrate from 0.1.0 configuration format to actual one. Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
		
			
				
	
	
		
			1999 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			1999 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# 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.1.0+dev` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. code-block:: json
 | 
						|
 | 
						|
   {
 | 
						|
       "general": {
 | 
						|
           "version": "0.1.0+dev",
 | 
						|
           "data_folder_path": null,
 | 
						|
           "data_output_subpath": "output",
 | 
						|
           "latitude": 52.52,
 | 
						|
           "longitude": 13.405
 | 
						|
       }
 | 
						|
   }
 | 
						|
```
 | 
						|
 | 
						|
### Example Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. code-block:: json
 | 
						|
 | 
						|
   {
 | 
						|
       "general": {
 | 
						|
           "version": "0.1.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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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 | PREDICTION]. |
 | 
						|
:::
 | 
						|
 | 
						|
### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. code-block:: json
 | 
						|
 | 
						|
   {
 | 
						|
       "logging": {
 | 
						|
           "console_level": "TRACE",
 | 
						|
           "file_level": "TRACE"
 | 
						|
       }
 | 
						|
   }
 | 
						|
```
 | 
						|
 | 
						|
### Example Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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": null,
 | 
						|
                   "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": null,
 | 
						|
                   "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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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": null,
 | 
						|
                   "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": null,
 | 
						|
                   "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>` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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
 | 
						|
                           }
 | 
						|
                       ]
 | 
						|
                   }
 | 
						|
               },
 | 
						|
               {
 | 
						|
                   "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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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": []
 | 
						|
               },
 | 
						|
               {
 | 
						|
                   "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
 | 
						|
 | 
						|
:::{table} devices::inverters::list
 | 
						|
:widths: 10 10 5 5 30
 | 
						|
:align: left
 | 
						|
 | 
						|
| 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. code-block:: json
 | 
						|
 | 
						|
   {
 | 
						|
       "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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. code-block:: json
 | 
						|
 | 
						|
   {
 | 
						|
       "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
 | 
						|
 | 
						|
:::{table} devices::batteries::list
 | 
						|
:widths: 10 10 5 5 30
 | 
						|
:align: left
 | 
						|
 | 
						|
| Name | Type | Read-Only | Default | Description |
 | 
						|
| ---- | ---- | --------- | ------- | ----------- |
 | 
						|
| device_id | `str` | `rw` | `<unknown>` | ID of device |
 | 
						|
| capacity_wh | `int` | `rw` | `8000` | Capacity [Wh]. |
 | 
						|
| charging_efficiency | `float` | `rw` | `0.88` | Charging efficiency [0.01 ... 1.00]. |
 | 
						|
| discharging_efficiency | `float` | `rw` | `0.88` | Discharge efficiency [0.01 ... 1.00]. |
 | 
						|
| levelized_cost_of_storage_kwh | `float` | `rw` | `0.0` | Levelized cost of storage (LCOS), the average lifetime cost of delivering one kWh [€/kWh]. |
 | 
						|
| max_charge_power_w | `Optional[float]` | `rw` | `5000` | Maximum charging power [W]. |
 | 
						|
| min_charge_power_w | `Optional[float]` | `rw` | `50` | Minimum charging power [W]. |
 | 
						|
| charge_rates | `Optional[list[float]]` | `rw` | `None` | Charge rates as factor of maximum charging power [0.00 ... 1.00]. None denotes all charge rates are available. |
 | 
						|
| min_soc_percentage | `int` | `rw` | `0` | Minimum state of charge (SOC) as percentage of capacity [%]. This is the target SoC for charging |
 | 
						|
| max_soc_percentage | `int` | `rw` | `100` | Maximum state of charge (SOC) as percentage of capacity [%]. |
 | 
						|
| 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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,
 | 
						|
                       0.25,
 | 
						|
                       0.5,
 | 
						|
                       0.75,
 | 
						|
                       1.0
 | 
						|
                   ],
 | 
						|
                   "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": null,
 | 
						|
                   "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": null,
 | 
						|
                   "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": null,
 | 
						|
                   "min_soc_percentage": 10,
 | 
						|
                   "max_soc_percentage": 100
 | 
						|
               }
 | 
						|
           ]
 | 
						|
       }
 | 
						|
   }
 | 
						|
```
 | 
						|
 | 
						|
#### Example Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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,
 | 
						|
                       0.25,
 | 
						|
                       0.5,
 | 
						|
                       0.75,
 | 
						|
                       1.0
 | 
						|
                   ],
 | 
						|
                   "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": null,
 | 
						|
                   "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": null,
 | 
						|
                   "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": null,
 | 
						|
                   "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
 | 
						|
 | 
						|
:::{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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | ElecPriceImport settings |
 | 
						|
:::
 | 
						|
 | 
						|
#### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | Feed in tariff provider id of provider to be used. |
 | 
						|
| provider_settings | `EOS_FEEDINTARIFF__PROVIDER_SETTINGS` | `FeedInTariffCommonProviderSettings` | `rw` | `required` | Provider settings |
 | 
						|
:::
 | 
						|
 | 
						|
### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | Electricity price feed in tariff [€/kWH]. |
 | 
						|
:::
 | 
						|
 | 
						|
#### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | FeedInTariffFixed settings |
 | 
						|
| FeedInTariffImport | `Optional[akkudoktoreos.prediction.feedintariffimport.FeedInTariffImportCommonSettings]` | `rw` | `None` | FeedInTariffImport settings |
 | 
						|
:::
 | 
						|
 | 
						|
#### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | Load provider id of provider to be used. |
 | 
						|
| provider_settings | `EOS_LOAD__PROVIDER_SETTINGS` | `LoadCommonProviderSettings` | `rw` | `required` | Provider settings |
 | 
						|
:::
 | 
						|
 | 
						|
### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | Token for Connecting VRM API |
 | 
						|
| load_vrm_idsite | `int` | `rw` | `12345` | VRM-Installation-ID |
 | 
						|
:::
 | 
						|
 | 
						|
#### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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 | `Optional[float]` | `rw` | `None` | Yearly energy consumption (kWh). |
 | 
						|
:::
 | 
						|
 | 
						|
#### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. code-block:: json
 | 
						|
 | 
						|
   {
 | 
						|
       "load": {
 | 
						|
           "provider_settings": {
 | 
						|
               "LoadAkkudoktor": {
 | 
						|
                   "loadakkudoktor_year_energy": 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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
 | 
						|
               },
 | 
						|
               {
 | 
						|
                   "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
 | 
						|
 | 
						|
:::{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` | Token for Connecting VRM API |
 | 
						|
| pvforecast_vrm_idsite | `int` | `rw` | `12345` | VRM-Installation-ID |
 | 
						|
:::
 | 
						|
 | 
						|
#### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | PVForecastImport settings |
 | 
						|
| PVForecastVrm | `Optional[akkudoktoreos.prediction.pvforecastvrm.PVForecastVrmCommonSettings]` | `rw` | `None` | PVForecastVrm settings |
 | 
						|
:::
 | 
						|
 | 
						|
#### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | Weather provider id of provider to be used. |
 | 
						|
| provider_settings | `EOS_WEATHER__PROVIDER_SETTINGS` | `WeatherCommonProviderSettings` | `rw` | `required` | Provider settings |
 | 
						|
:::
 | 
						|
 | 
						|
### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | WeatherImport settings |
 | 
						|
:::
 | 
						|
 | 
						|
#### Example Input/Output
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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` | 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. 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
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. code-block:: json
 | 
						|
 | 
						|
   {
 | 
						|
       "utils": {}
 | 
						|
   }
 | 
						|
```
 | 
						|
 | 
						|
## Full example Config
 | 
						|
 | 
						|
```{eval-rst}
 | 
						|
.. code-block:: json
 | 
						|
 | 
						|
   {
 | 
						|
       "general": {
 | 
						|
           "version": "0.1.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": null,
 | 
						|
                   "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": null,
 | 
						|
                   "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": {}
 | 
						|
   }
 | 
						|
```
 |