Make EOSdash use UI components from MonsterUI to ease further development. - Add a first menu with some dummy pages and the configuration page. - Make the configuration scrollable. - Add markdown component that uses markdown-it-py (same as used by the myth-parser for documentation generation). - Add bokeh (https://docs.bokeh.org/) component for charts - Added several prediction charts to demo - Add a footer that displays connection status with EOS server - Add logo and favicon Update EOS server: - Move error message generation to extra module - Use redirect instead of proxy 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.
Validators:
validate_latitude (float): Ensures latitude
is within the range -90 to 90.
validate_longitude (float): Ensures longitude
is within the range -180 to 180.
:::{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 |
EOS default logging level. |
root_level | str |
ro |
N/A |
Root logger logging level. | |
::: |
Example Input
.. code-block:: json
{
"logging": {
"level": "INFO"
}
}
Example Output
.. code-block:: json
{
"logging": {
"level": "INFO",
"root_level": "INFO"
}
}
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. |
planes | EOS_PVFORECAST__PLANES |
Optional[list[akkudoktoreos.prediction.pvforecast.PVForecastPlaneSetting]] |
rw |
None |
Plane configuration. |
provider_settings | EOS_PVFORECAST__PROVIDER_SETTINGS |
Optional[akkudoktoreos.prediction.pvforecastimport.PVForecastImportCommonSettings] |
rw |
None |
Provider settings |
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",
"planes": [
{
"surface_tilt": 10.0,
"surface_azimuth": 10.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": 20.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
}
],
"provider_settings": null
}
}
Example Output
.. code-block:: json
{
"pvforecast": {
"provider": "PVForecastAkkudoktor",
"planes": [
{
"surface_tilt": 10.0,
"surface_azimuth": 10.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": 20.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
}
],
"provider_settings": null,
"planes_peakpower": [
5.0,
3.5
],
"planes_azimuth": [
10.0,
20.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
]
}
}
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]}"
}
}
}
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 |
None |
Tilt angle from horizontal plane. Ignored for two-axis tracking. |
surface_azimuth | Optional[float] |
rw |
None |
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": 10.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": 20.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
}
]
}
}
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 |
0.0.0.0 |
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 |
0.0.0.0 |
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": "0.0.0.0",
"port": 8503,
"verbose": false,
"startup_eosdash": true,
"eosdash_host": "0.0.0.0",
"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": "INFO"
},
"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",
"planes": [
{
"surface_tilt": 10.0,
"surface_azimuth": 10.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": 20.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
}
],
"provider_settings": null
},
"weather": {
"provider": "WeatherImport",
"provider_settings": null
},
"server": {
"host": "0.0.0.0",
"port": 8503,
"verbose": false,
"startup_eosdash": true,
"eosdash_host": "0.0.0.0",
"eosdash_port": 8504
},
"utils": {}
}