mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2025-09-13 07:21:16 +00:00
Migrate from Flask to FastAPI (#163)
* Migrate from Flask to FastAPI * FastAPI migration: - Use pydantic model classes as input parameters to the data/calculation classes. - Interface field names changed to constructor parameter names (for simplicity only during transition, should be updated in a followup PR). - Add basic interface requirements (e.g. some values > 0, etc.). * Update tests for new data format. * Python requirement down to 3.9 (TypeGuard no longer needed) * Makefile: Add helpful targets (e.g. development server with reload) * Move API doc from README to pydantic model classes (swagger) * Link to swagger.io with own openapi.yml. * Commit openapi.json and check with pytest for changes so the documentation is always up-to-date. * Streamline docker * FastAPI: Run startup action on dev server * Fix config for /strompreis, endpoint still broken however. * test_openapi: Compare against docs/.../openapi.json * Move fastapi to server/ submodule * See #187 for new repository structure.
This commit is contained in:
committed by
GitHub
parent
ed3226e522
commit
f61665669f
260
README.md
260
README.md
@@ -83,10 +83,18 @@ source .venv/bin/activate
|
||||
|
||||
## Usage
|
||||
|
||||
To use the system, run `flask_server.py`, which starts the server:
|
||||
To use the system, run `fastapi_server.py`, which starts the server:
|
||||
|
||||
```bash
|
||||
./flask_server.py
|
||||
./src/akkudoktoreos/server/fastapi_server.py
|
||||
```
|
||||
|
||||
### Docker
|
||||
|
||||
To run the system with Docker:
|
||||
|
||||
```bash
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
## Classes and Functionalities
|
||||
@@ -111,250 +119,6 @@ These classes work together to enable a detailed simulation and optimization of
|
||||
|
||||
Each class is designed to be easily customized and extended to integrate additional functions or improvements. For example, new methods can be added for more accurate modeling of PV system or battery behavior. Developers are invited to modify and extend the system according to their needs.
|
||||
|
||||
# Input for the Flask Server (as of 30.07.2024)
|
||||
## Server API
|
||||
|
||||
Describes the structure and data types of the JSON object sent to the Flask server, with a forecast period of 48 hours.
|
||||
|
||||
## JSON Object Fields
|
||||
|
||||
### `strompreis_euro_pro_wh`
|
||||
|
||||
- **Description**: An array of floats representing the electricity price in euros per watt-hour for different time intervals.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 48
|
||||
|
||||
### `gesamtlast`
|
||||
|
||||
- **Description**: An array of floats representing the total load (consumption) in watts for different time intervals.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 48
|
||||
|
||||
### `pv_forecast`
|
||||
|
||||
- **Description**: An array of floats representing the forecasted photovoltaic output in watts for different time intervals.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 48
|
||||
|
||||
### `temperature_forecast`
|
||||
|
||||
- **Description**: An array of floats representing the temperature forecast in degrees Celsius for different time intervals.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 48
|
||||
|
||||
### `pv_soc`
|
||||
|
||||
- **Description**: An integer representing the state of charge of the PV battery at the **start** of the current hour (not the current state).
|
||||
- **Type**: Integer
|
||||
|
||||
### `pv_akku_cap`
|
||||
|
||||
- **Description**: An integer representing the capacity of the photovoltaic battery in watt-hours.
|
||||
- **Type**: Integer
|
||||
|
||||
### `einspeiseverguetung_euro_pro_wh`
|
||||
|
||||
- **Description**: A float representing the feed-in compensation in euros per watt-hour.
|
||||
- **Type**: Float
|
||||
|
||||
### `eauto_min_soc`
|
||||
|
||||
- **Description**: An integer representing the minimum state of charge (SOC) of the electric vehicle in percentage.
|
||||
- **Type**: Integer
|
||||
|
||||
### `eauto_cap`
|
||||
|
||||
- **Description**: An integer representing the capacity of the electric vehicle battery in watt-hours.
|
||||
- **Type**: Integer
|
||||
|
||||
### `eauto_charge_efficiency`
|
||||
|
||||
- **Description**: A float representing the charging efficiency of the electric vehicle.
|
||||
- **Type**: Float
|
||||
|
||||
### `eauto_charge_power`
|
||||
|
||||
- **Description**: An integer representing the charging power of the electric vehicle in watts.
|
||||
- **Type**: Integer
|
||||
|
||||
### `eauto_soc`
|
||||
|
||||
- **Description**: An integer representing the current state of charge (SOC) of the electric vehicle in percentage.
|
||||
- **Type**: Integer
|
||||
|
||||
### `start_solution`
|
||||
|
||||
- **Description**: Can be `null` or contain a previous solution (if available).
|
||||
- **Type**: `null` or object
|
||||
|
||||
### `haushaltsgeraet_wh`
|
||||
|
||||
- **Description**: An integer representing the energy consumption of a household device in watt-hours.
|
||||
- **Type**: Integer
|
||||
|
||||
### `haushaltsgeraet_dauer`
|
||||
|
||||
- **Description**: An integer representing the usage duration of a household device in hours.
|
||||
- **Type**: Integer
|
||||
|
||||
# JSON Output Description
|
||||
|
||||
This document describes the structure and data types of the JSON output returned by the Flask server, with a forecast period of 48 hours.
|
||||
|
||||
**Note**: The first value of "Last_Wh_pro_Stunde", "Netzeinspeisung_Wh_pro_Stunde" and "Netzbezug_Wh_pro_Stunde", will be set to null in the JSON output and represented as NaN or None in the corresponding classes' data returns. This approach is adopted to ensure that the current hour's processing remains unchanged.
|
||||
|
||||
## JSON Output Fields (as of 30.7.2024)
|
||||
|
||||
### discharge_hours_bin
|
||||
|
||||
An array that indicates for each hour of the forecast period (in this example, 48 hours) whether energy is discharged from the battery or not. The values are either `0` (no discharge) or `1` (discharge).
|
||||
|
||||
### eauto_obj
|
||||
|
||||
This object contains information related to the electric vehicle and its charging and discharging behavior:
|
||||
|
||||
- **charge_array**: Indicates for each hour whether the EV is charging (`0` for no charging, `1` for charging).
|
||||
- **Type**: Array
|
||||
- **Element Type**: Integer (0 or 1)
|
||||
- **Length**: 48
|
||||
- **discharge_array**: Indicates for each hour whether the EV is discharging (`0` for no discharging, `1` for discharging).
|
||||
- **Type**: Array
|
||||
- **Element Type**: Integer (0 or 1)
|
||||
- **Length**: 48
|
||||
- **entlade_effizienz**: The discharge efficiency as a float.
|
||||
- **Type**: Float
|
||||
- **hours**: Amount of hours the simulation is done for.
|
||||
- **Type**: Integer
|
||||
- **kapazitaet_wh**: The capacity of the EV’s battery in watt-hours.
|
||||
- **Type**: Integer
|
||||
- **lade_effizienz**: The charging efficiency as a float.
|
||||
- **Type**: Float
|
||||
- **max_ladeleistung_w**: The maximum charging power of the EV in watts.
|
||||
- **Type**: Float
|
||||
- **max_ladeleistung_w**: Max charging power of the EV in Watts.
|
||||
- **Type**: Integer
|
||||
- **soc_wh**: The state of charge of the battery in watt-hours at the start of the simulation.
|
||||
- **Type**: Integer
|
||||
- **start_soc_prozent**: The state of charge of the battery in percentage at the start of the simulation.
|
||||
- **Type**: Integer
|
||||
|
||||
### eautocharge_hours_float
|
||||
|
||||
An array of binary values (0 or 1) that indicates whether the EV will be charged in a certain hour.
|
||||
|
||||
- **Type**: Array
|
||||
- **Element Type**: Integer (0 or 1)
|
||||
- **Length**: 48
|
||||
|
||||
### result
|
||||
|
||||
This object contains the results of the simulation and provides insights into various parameters over the entire forecast period:
|
||||
|
||||
- **E-Auto_SoC_pro_Stunde**: The state of charge of the EV for each hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Eigenverbrauch_Wh_pro_Stunde**: The self-consumption of the system in watt-hours per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Einnahmen_Euro_pro_Stunde**: The revenue from grid feed-in or other sources in euros per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Gesamt_Verluste**: The total losses in watt-hours over the entire period.
|
||||
- **Type**: Float
|
||||
- **Gesamtbilanz_Euro**: The total balance of revenues minus costs in euros.
|
||||
- **Type**: Float
|
||||
- **Gesamteinnahmen_Euro**: The total revenues in euros.
|
||||
- **Type**: Float
|
||||
- **Gesamtkosten_Euro**: The total costs in euros.
|
||||
- **Type**: Float
|
||||
- **Haushaltsgeraet_wh_pro_stunde**: The energy consumption of a household appliance in watt-hours per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Kosten_Euro_pro_Stunde**: The costs in euros per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Netzbezug_Wh_pro_Stunde**: The grid energy drawn in watt-hours per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Netzeinspeisung_Wh_pro_Stunde**: The energy fed into the grid in watt-hours per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Verluste_Pro_Stunde**: The losses in watt-hours per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **akku_soc_pro_stunde**: The state of charge of the battery (not the EV) in percentage per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
|
||||
### simulation_data
|
||||
|
||||
An object containing the simulated data.
|
||||
|
||||
- **E-Auto_SoC_pro_Stunde**: An array of floats representing the simulated state of charge of the electric car per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Eigenverbrauch_Wh_pro_Stunde**: An array of floats representing the simulated self-consumption in watt-hours per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Einnahmen_Euro_pro_Stunde**: An array of floats representing the simulated income in euros per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Gesamt_Verluste**: The total simulated losses in watt-hours.
|
||||
- **Type**: Float
|
||||
- **Gesamtbilanz_Euro**: The total simulated balance in euros.
|
||||
- **Type**: Float
|
||||
- **Gesamteinnahmen_Euro**: The total simulated income in euros.
|
||||
- **Type**: Float
|
||||
- **Gesamtkosten_Euro**: The total simulated costs in euros.
|
||||
- **Type**: Float
|
||||
- **Haushaltsgeraet_wh_pro_stunde**: An array of floats representing the simulated energy consumption of a household appliance in watt-hours per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Kosten_Euro_pro_Stunde**: An array of floats representing the simulated costs in euros per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Netzbezug_Wh_pro_Stunde**: An array of floats representing the simulated grid consumption in watt-hours per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Netzeinspeisung_Wh_pro_Stunde**: An array of floats representing the simulated grid feed-in in watt-hours per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **Verluste_Pro_Stunde**: An array of floats representing the simulated losses per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
- **akku_soc_pro_stunde**: An array of floats representing the simulated state of charge of the battery in percentage per hour.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Float
|
||||
- **Length**: 35
|
||||
|
||||
### spuelstart
|
||||
|
||||
- **Description**: Can be `null` or contain an object representing the start of washing (if applicable).
|
||||
- **Type**: null or object
|
||||
|
||||
### start_solution
|
||||
|
||||
- **Description**: An array of binary values (0 or 1) representing a possible starting solution for the simulation.
|
||||
- **Type**: Array
|
||||
- **Element Type**: Integer (0 or 1)
|
||||
- **Length**: 48
|
||||
See the Swagger documentation for detailed information: [EOS OpenAPI Spec](https://petstore3.swagger.io/?url=https://raw.githubusercontent.com/Akkudoktor-EOS/EOS/refs/heads/main/docs/akkudoktoreos/openapi.json)
|
||||
|
Reference in New Issue
Block a user