* Fix logging configuration issues that made logging stop operation. Switch to Loguru logging (from Python logging). Enable console and file logging with different log levels. Add logging documentation. * Fix logging configuration and EOS configuration out of sync. Added tracking support for nested value updates of Pydantic models. This used to update the logging configuration when the EOS configurationm for logging is changed. Should keep logging config and EOS config in sync as long as all changes to the EOS logging configuration are done by set_nested_value(), which is the case for the REST API. * Fix energy management task looping endlessly after the second update when trying to update the last_update datetime. * Fix get_nested_value() to correctly take values from the dicts in a Pydantic model instance. * Fix usage of model classes instead of model instances in nested value access when evaluation the value type that is associated to each key. * Fix illegal json format in prediction documentation for PVForecastAkkudoktor provider. * Fix documentation qirks and add EOS Connect to integrations. * Support deprecated fields in configuration in documentation generation and EOSdash. * Enhance EOSdash demo to show BrightSky humidity data (that is often missing) * Update documentation reference to German EOS installation videos. Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
34 KiB
Configuration Table
Settings for common configuration
General configuration to set directories of cache and output files and system location (latitude
and longitude).
Validators ensure each parameter is within a specified range. A computed property, timezone
,
determines the time zone based on latitude and longitude.
Attributes: latitude (Optional[float]): Latitude in degrees, must be between -90 and 90. longitude (Optional[float]): Longitude in degrees, must be between -180 and 180.
Properties: timezone (Optional[str]): Computed time zone string based on the specified latitude and longitude.
:::{table} general :widths: 10 20 10 5 5 30 :align: left
Name | Environment Variable | Type | Read-Only | Default | Description |
---|---|---|---|---|---|
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
.. code-block:: json
{
"general": {
"data_folder_path": null,
"data_output_subpath": "output",
"latitude": 52.52,
"longitude": 13.405
}
}
Example Output
.. 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
.. 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
.. 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
.. code-block:: json
{
"logging": {
"level": null,
"console_level": "TRACE",
"file_level": "TRACE"
}
}
Example Output
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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.loadimport.LoadImportCommonSettings, NoneType] |
rw |
None |
Provider settings |
::: |
Example Input/Output
.. 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
.. code-block:: json
{
"load": {
"provider_settings": {
"import_file_path": null,
"import_json": "{\"load0_mean\": [676.71, 876.19, 527.13]}"
}
}
}
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
.. 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 |
Optional[akkudoktoreos.prediction.pvforecastimport.PVForecastImportCommonSettings] |
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
.. 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
.. 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
.. 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 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
.. 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
.. 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
.. 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
.. code-block:: json
{
"server": {
"host": "127.0.0.1",
"port": 8503,
"verbose": false,
"startup_eosdash": true,
"eosdash_host": "127.0.0.1",
"eosdash_port": 8504
}
}
Utils Configuration
:::{table} utils :widths: 10 20 10 5 5 30 :align: left
Name | Environment Variable | Type | Read-Only | Default | Description |
---|---|---|---|---|---|
::: |
Example Input/Output
.. code-block:: json
{
"utils": {}
}
Full example Config
.. code-block:: json
{
"general": {
"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": {}
}