mirror of
				https://github.com/Akkudoktor-EOS/EOS.git
				synced 2025-10-30 22:36:21 +00:00 
			
		
		
		
	
		
			Some checks failed
		
		
	
	docker-build / platform-excludes (push) Has been cancelled
				
			docker-build / build (push) Has been cancelled
				
			docker-build / merge (push) Has been cancelled
				
			pre-commit / pre-commit (push) Has been cancelled
				
			Run Pytest on Pull Request / test (push) Has been cancelled
				
			Add support for fetching forecasts from the VRM API by Victron Energy. Retrieve forecasts for PV generation and total load of a Victron system from the internet. Tests for the new modules have been added, and the documentation has been updated accordingly. Signed-off-by: redmoon2711 <redmoon2711@gmx.de>
		
			
				
	
	
		
			1125 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			1125 lines
		
	
	
		
			36 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 |
 | |
| | ---- | -------------------- | ---- | --------- | ------- | ----------- |
 | |
| | 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": {
 | |
|            "data_folder_path": null,
 | |
|            "data_output_subpath": "output",
 | |
|            "latitude": 52.52,
 | |
|            "longitude": 13.405
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Example Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "general": {
 | |
|            "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. |
 | |
| :::
 | |
| 
 | |
| ### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "ems": {
 | |
|            "startup_delay": 5.0,
 | |
|            "interval": 300.0
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ## Logging Configuration
 | |
| 
 | |
| :::{table} logging
 | |
| :widths: 10 20 10 5 5 30
 | |
| :align: left
 | |
| 
 | |
| | Name | Environment Variable | Type | Read-Only | Default | Description |
 | |
| | ---- | -------------------- | ---- | --------- | ------- | ----------- |
 | |
| | level | `EOS_LOGGING__LEVEL` | `Optional[str]` | `rw` | `None` | This is deprecated. Use console_level and file_level instead. |
 | |
| | 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": {
 | |
|            "level": null,
 | |
|            "console_level": "TRACE",
 | |
|            "file_level": "TRACE"
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Example Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "logging": {
 | |
|            "level": null,
 | |
|            "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.battery.BaseBatteryParameters]]` | `rw` | `None` | List of battery/ev devices |
 | |
| | inverters | `EOS_DEVICES__INVERTERS` | `Optional[list[akkudoktoreos.devices.inverter.InverterParameters]]` | `rw` | `None` | List of inverters |
 | |
| | home_appliances | `EOS_DEVICES__HOME_APPLIANCES` | `Optional[list[akkudoktoreos.devices.generic.HomeApplianceParameters]]` | `rw` | `None` | List of home appliances |
 | |
| :::
 | |
| 
 | |
| ### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "devices": {
 | |
|            "batteries": [
 | |
|                {
 | |
|                    "device_id": "battery1",
 | |
|                    "hours": null,
 | |
|                    "capacity_wh": 8000,
 | |
|                    "charging_efficiency": 0.88,
 | |
|                    "discharging_efficiency": 0.88,
 | |
|                    "max_charge_power_w": 5000,
 | |
|                    "initial_soc_percentage": 0,
 | |
|                    "min_soc_percentage": 0,
 | |
|                    "max_soc_percentage": 100
 | |
|                }
 | |
|            ],
 | |
|            "inverters": [],
 | |
|            "home_appliances": []
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Home Appliance Device Simulation Configuration
 | |
| 
 | |
| :::{table} devices::home_appliances::list
 | |
| :widths: 10 10 5 5 30
 | |
| :align: left
 | |
| 
 | |
| | Name | Type | Read-Only | Default | Description |
 | |
| | ---- | ---- | --------- | ------- | ----------- |
 | |
| | device_id | `str` | `rw` | `required` | ID of home appliance |
 | |
| | hours | `Optional[int]` | `rw` | `None` | Number of prediction hours. Defaults to global config prediction hours. |
 | |
| | consumption_wh | `int` | `rw` | `required` | An integer representing the energy consumption of a household device in watt-hours. |
 | |
| | duration_h | `int` | `rw` | `required` | An integer representing the usage duration of a household device in hours. |
 | |
| :::
 | |
| 
 | |
| #### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "devices": {
 | |
|            "home_appliances": [
 | |
|                {
 | |
|                    "device_id": "dishwasher",
 | |
|                    "hours": null,
 | |
|                    "consumption_wh": 2000,
 | |
|                    "duration_h": 3
 | |
|                }
 | |
|            ]
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Inverter Device Simulation Configuration
 | |
| 
 | |
| :::{table} devices::inverters::list
 | |
| :widths: 10 10 5 5 30
 | |
| :align: left
 | |
| 
 | |
| | Name | Type | Read-Only | Default | Description |
 | |
| | ---- | ---- | --------- | ------- | ----------- |
 | |
| | device_id | `str` | `rw` | `required` | ID of inverter |
 | |
| | hours | `Optional[int]` | `rw` | `None` | Number of prediction hours. Defaults to global config prediction hours. |
 | |
| | max_power_wh | `float` | `rw` | `required` | - |
 | |
| | battery_id | `Optional[str]` | `rw` | `None` | ID of battery |
 | |
| :::
 | |
| 
 | |
| #### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "devices": {
 | |
|            "inverters": [
 | |
|                {
 | |
|                    "device_id": "inverter1",
 | |
|                    "hours": null,
 | |
|                    "max_power_wh": 10000.0,
 | |
|                    "battery_id": null
 | |
|                }
 | |
|            ]
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Battery Device Simulation Configuration
 | |
| 
 | |
| :::{table} devices::batteries::list
 | |
| :widths: 10 10 5 5 30
 | |
| :align: left
 | |
| 
 | |
| | Name | Type | Read-Only | Default | Description |
 | |
| | ---- | ---- | --------- | ------- | ----------- |
 | |
| | device_id | `str` | `rw` | `required` | ID of battery |
 | |
| | hours | `Optional[int]` | `rw` | `None` | Number of prediction hours. Defaults to global config prediction hours. |
 | |
| | capacity_wh | `int` | `rw` | `required` | An integer representing the capacity of the battery in watt-hours. |
 | |
| | charging_efficiency | `float` | `rw` | `0.88` | A float representing the charging efficiency of the battery. |
 | |
| | discharging_efficiency | `float` | `rw` | `0.88` | A float representing the discharge efficiency of the battery. |
 | |
| | max_charge_power_w | `Optional[float]` | `rw` | `5000` | Maximum charging power in watts. |
 | |
| | initial_soc_percentage | `int` | `rw` | `0` | An integer representing the state of charge of the battery at the **start** of the current hour (not the current state). |
 | |
| | min_soc_percentage | `int` | `rw` | `0` | An integer representing the minimum state of charge (SOC) of the battery in percentage. |
 | |
| | max_soc_percentage | `int` | `rw` | `100` | An integer representing the maximum state of charge (SOC) of the battery in percentage. |
 | |
| :::
 | |
| 
 | |
| #### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "devices": {
 | |
|            "batteries": [
 | |
|                {
 | |
|                    "device_id": "battery1",
 | |
|                    "hours": null,
 | |
|                    "capacity_wh": 8000,
 | |
|                    "charging_efficiency": 0.88,
 | |
|                    "discharging_efficiency": 0.88,
 | |
|                    "max_charge_power_w": 5000.0,
 | |
|                    "initial_soc_percentage": 42,
 | |
|                    "min_soc_percentage": 10,
 | |
|                    "max_soc_percentage": 100
 | |
|                }
 | |
|            ]
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ## Measurement Configuration
 | |
| 
 | |
| :::{table} measurement
 | |
| :widths: 10 20 10 5 5 30
 | |
| :align: left
 | |
| 
 | |
| | Name | Environment Variable | Type | Read-Only | Default | Description |
 | |
| | ---- | -------------------- | ---- | --------- | ------- | ----------- |
 | |
| | load0_name | `EOS_MEASUREMENT__LOAD0_NAME` | `Optional[str]` | `rw` | `None` | Name of the load0 source |
 | |
| | load1_name | `EOS_MEASUREMENT__LOAD1_NAME` | `Optional[str]` | `rw` | `None` | Name of the load1 source |
 | |
| | load2_name | `EOS_MEASUREMENT__LOAD2_NAME` | `Optional[str]` | `rw` | `None` | Name of the load2 source |
 | |
| | load3_name | `EOS_MEASUREMENT__LOAD3_NAME` | `Optional[str]` | `rw` | `None` | Name of the load3 source |
 | |
| | load4_name | `EOS_MEASUREMENT__LOAD4_NAME` | `Optional[str]` | `rw` | `None` | Name of the load4 source |
 | |
| :::
 | |
| 
 | |
| ### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "measurement": {
 | |
|            "load0_name": "Household",
 | |
|            "load1_name": null,
 | |
|            "load2_name": null,
 | |
|            "load3_name": null,
 | |
|            "load4_name": null
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ## General Optimization Configuration
 | |
| 
 | |
| Attributes:
 | |
|     hours (int): Number of hours for optimizations.
 | |
| 
 | |
| :::{table} optimization
 | |
| :widths: 10 20 10 5 5 30
 | |
| :align: left
 | |
| 
 | |
| | Name | Environment Variable | Type | Read-Only | Default | Description |
 | |
| | ---- | -------------------- | ---- | --------- | ------- | ----------- |
 | |
| | hours | `EOS_OPTIMIZATION__HOURS` | `Optional[int]` | `rw` | `48` | Number of hours into the future for optimizations. |
 | |
| | penalty | `EOS_OPTIMIZATION__PENALTY` | `Optional[int]` | `rw` | `10` | Penalty factor used in optimization. |
 | |
| | ev_available_charge_rates_percent | `EOS_OPTIMIZATION__EV_AVAILABLE_CHARGE_RATES_PERCENT` | `Optional[List[float]]` | `rw` | `[0.0, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0]` | Charge rates available for the EV in percent of maximum charge. |
 | |
| :::
 | |
| 
 | |
| ### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "optimization": {
 | |
|            "hours": 48,
 | |
|            "penalty": 10,
 | |
|            "ev_available_charge_rates_percent": [
 | |
|                0.0,
 | |
|                0.375,
 | |
|                0.5,
 | |
|                0.625,
 | |
|                0.75,
 | |
|                0.875,
 | |
|                1.0
 | |
|            ]
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ## 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). |
 | |
| | provider_settings | `EOS_ELECPRICE__PROVIDER_SETTINGS` | `Optional[akkudoktoreos.prediction.elecpriceimport.ElecPriceImportCommonSettings]` | `rw` | `None` | Provider settings |
 | |
| :::
 | |
| 
 | |
| ### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "elecprice": {
 | |
|            "provider": "ElecPriceAkkudoktor",
 | |
|            "charges_kwh": 0.21,
 | |
|            "provider_settings": null
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Common settings for elecprice data import from file or JSON String
 | |
| 
 | |
| :::{table} elecprice::provider_settings
 | |
| :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": {
 | |
|                "import_file_path": null,
 | |
|                "import_json": "{\"elecprice_marketprice_wh\": [0.0003384, 0.0003318, 0.0003284]}"
 | |
|            }
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ## 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` | `Union[akkudoktoreos.prediction.loadakkudoktor.LoadAkkudoktorCommonSettings, akkudoktoreos.prediction.loadvrm.LoadVrmCommonSettings, akkudoktoreos.prediction.loadimport.LoadImportCommonSettings, NoneType]` | `rw` | `None` | Provider settings |
 | |
| :::
 | |
| 
 | |
| ### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "load": {
 | |
|            "provider": "LoadAkkudoktor",
 | |
|            "provider_settings": null
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Common settings for load data import from file or JSON string
 | |
| 
 | |
| :::{table} load::provider_settings
 | |
| :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": {
 | |
|                "import_file_path": null,
 | |
|                "import_json": "{\"load0_mean\": [676.71, 876.19, 527.13]}"
 | |
|            }
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Common settings for VRM API
 | |
| 
 | |
| :::{table} load::provider_settings
 | |
| :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": {
 | |
|                "load_vrm_token": "your-token",
 | |
|                "load_vrm_idsite": 12345
 | |
|            }
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Common settings for load data import from file
 | |
| 
 | |
| :::{table} load::provider_settings
 | |
| :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_year_energy": 40421.0
 | |
|            }
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ## 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` | `Union[akkudoktoreos.prediction.pvforecastimport.PVForecastImportCommonSettings, akkudoktoreos.prediction.pvforecastvrm.PVforecastVrmCommonSettings, NoneType]` | `rw` | `None` | 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": 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": 0
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Example Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "pvforecast": {
 | |
|            "provider": "PVForecastAkkudoktor",
 | |
|            "provider_settings": 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": 0,
 | |
|            "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
 | |
| :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": {
 | |
|                "pvforecast_vrm_token": "your-token",
 | |
|                "pvforecast_vrm_idsite": 12345
 | |
|            }
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Common settings for pvforecast data import from file or JSON string
 | |
| 
 | |
| :::{table} pvforecast::provider_settings
 | |
| :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": {
 | |
|                "import_file_path": null,
 | |
|                "import_json": "{\"pvforecast_ac_power\": [0, 8.05, 352.91]}"
 | |
|            }
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ## 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` | `Optional[akkudoktoreos.prediction.weatherimport.WeatherImportCommonSettings]` | `rw` | `None` | Provider settings |
 | |
| :::
 | |
| 
 | |
| ### Example Input/Output
 | |
| 
 | |
| ```{eval-rst}
 | |
| .. code-block:: json
 | |
| 
 | |
|    {
 | |
|        "weather": {
 | |
|            "provider": "WeatherImport",
 | |
|            "provider_settings": null
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ### Common settings for weather data import from file or JSON string
 | |
| 
 | |
| :::{table} weather::provider_settings
 | |
| :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": {
 | |
|                "import_file_path": null,
 | |
|                "import_json": "{\"weather_temp_air\": [18.3, 17.8, 16.9]}"
 | |
|            }
 | |
|        }
 | |
|    }
 | |
| ```
 | |
| 
 | |
| ## 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[pydantic.networks.IPvAnyAddress]` | `rw` | `127.0.0.1` | EOS server IP address. |
 | |
| | port | `EOS_SERVER__PORT` | `Optional[int]` | `rw` | `8503` | EOS server IP port number. |
 | |
| | 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. |
 | |
| | eosdash_host | `EOS_SERVER__EOSDASH_HOST` | `Optional[pydantic.networks.IPvAnyAddress]` | `rw` | `127.0.0.1` | EOSdash server IP address. |
 | |
| | eosdash_port | `EOS_SERVER__EOSDASH_PORT` | `Optional[int]` | `rw` | `8504` | EOSdash server IP port number. |
 | |
| :::
 | |
| 
 | |
| ### 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": {
 | |
|            "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
 | |
|        },
 | |
|        "logging": {
 | |
|            "level": null,
 | |
|            "console_level": "TRACE",
 | |
|            "file_level": "TRACE"
 | |
|        },
 | |
|        "devices": {
 | |
|            "batteries": [
 | |
|                {
 | |
|                    "device_id": "battery1",
 | |
|                    "hours": null,
 | |
|                    "capacity_wh": 8000,
 | |
|                    "charging_efficiency": 0.88,
 | |
|                    "discharging_efficiency": 0.88,
 | |
|                    "max_charge_power_w": 5000,
 | |
|                    "initial_soc_percentage": 0,
 | |
|                    "min_soc_percentage": 0,
 | |
|                    "max_soc_percentage": 100
 | |
|                }
 | |
|            ],
 | |
|            "inverters": [],
 | |
|            "home_appliances": []
 | |
|        },
 | |
|        "measurement": {
 | |
|            "load0_name": "Household",
 | |
|            "load1_name": null,
 | |
|            "load2_name": null,
 | |
|            "load3_name": null,
 | |
|            "load4_name": null
 | |
|        },
 | |
|        "optimization": {
 | |
|            "hours": 48,
 | |
|            "penalty": 10,
 | |
|            "ev_available_charge_rates_percent": [
 | |
|                0.0,
 | |
|                0.375,
 | |
|                0.5,
 | |
|                0.625,
 | |
|                0.75,
 | |
|                0.875,
 | |
|                1.0
 | |
|            ]
 | |
|        },
 | |
|        "prediction": {
 | |
|            "hours": 48,
 | |
|            "historic_hours": 48
 | |
|        },
 | |
|        "elecprice": {
 | |
|            "provider": "ElecPriceAkkudoktor",
 | |
|            "charges_kwh": 0.21,
 | |
|            "provider_settings": null
 | |
|        },
 | |
|        "load": {
 | |
|            "provider": "LoadAkkudoktor",
 | |
|            "provider_settings": null
 | |
|        },
 | |
|        "pvforecast": {
 | |
|            "provider": "PVForecastAkkudoktor",
 | |
|            "provider_settings": 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": 0
 | |
|        },
 | |
|        "weather": {
 | |
|            "provider": "WeatherImport",
 | |
|            "provider_settings": null
 | |
|        },
 | |
|        "server": {
 | |
|            "host": "127.0.0.1",
 | |
|            "port": 8503,
 | |
|            "verbose": false,
 | |
|            "startup_eosdash": true,
 | |
|            "eosdash_host": "127.0.0.1",
 | |
|            "eosdash_port": 8504
 | |
|        },
 | |
|        "utils": {}
 | |
|    }
 | |
| ```
 |