Add english translation for readme.

Moving german readme to READEME-DE.md. Add sensible gitignore defaults for most operating systems, VS code and Python.
This commit is contained in:
Fortrieb 2024-09-27 22:58:12 +02:00 committed by drbacke
parent c2254dc5ed
commit af7b745d15
3 changed files with 701 additions and 240 deletions

246
.gitignore vendored
View File

@ -1,3 +1,247 @@
.venv/
docs/
data/
# Default ignore folders and files for VS Code, Python
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
.pdm.toml
.pdm-python
.pdm-build/
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk

333
README-DE.md Normal file
View File

@ -0,0 +1,333 @@
# Energiesystem Simulation und Optimierung
Dieses Projekt bietet eine umfassende Lösung zur Simulation und Optimierung eines Energiesystems, das auf erneuerbaren Energiequellen basiert. Mit Fokus auf Photovoltaik (PV)-Anlagen, Batteriespeichern (Akkus), Lastmanagement (Verbraucheranforderungen), Wärmepumpen, Elektrofahrzeugen und der Berücksichtigung von Strompreisdaten ermöglicht dieses System die Vorhersage und Optimierung des Energieflusses und der Kosten über einen bestimmten Zeitraum.
## Mitmachen
Die Diskussion findet im [Forum](https://www.akkudoktor.net/forum/diy-energie-optimierungssystem-opensource-projekt/) statt. Bugs bitte im [Issue Tracker](https://github.com/Akkudoktor-EOS/EOS/issues) melden, Code-Beiträge und Bug-Fixes nehmen wir gerne als [Pull-Requests](https://github.com/Akkudoktor-EOS/EOS/pulls) entgegen.
## Installation
Gute Install Anleitung:
https://meintechblog.de/2024/09/05/andreas-schmitz-joerg-installiert-mein-energieoptimierungssystem/
Das Projekt erfordert Python 3.8 oder neuer.
### Schnellanleitung
Unter Linux (Ubuntu/Debian):
```bash
sudo apt install make
```
Unter Macos (benötigt [Homebrew](https://brew.sh)):
```zsh
brew install make
```
Nun `config.example.py` anpassen und dann in `config.py` umbennenen. Anschließend kann der Server über `make run` gestartet werden.
Eine vollständige Übersicht über die wichtigsten Kurzbefehle gibt `make help`.
### Ausführliche Anleitung
Alle notwendigen Abhängigkeiten können über `pip` installiert werden. Klonen Sie das Repository und installieren Sie die erforderlichen Pakete mit:
```bash
git clone https://github.com/Akkudoktor-EOS/EOS
cd EOS
```
Als Nächstes legen wir ein virtuelles Environment an. Es dient zur Ablage der Python-Abhängigkeiten,
die wir später per `pip` installieren:
```bash
virtualenv .venv
```
Schließlich installieren wir die Python-Abhängigkeiten von EOS:
```bash
.venv/bin/pip install -r requirements.txt
```
Um immer die Python-Version aus dem Virtual-Env zu verwenden, sollte vor der Arbeit in
EOS Folgendes aufgerufen werden:
```bash
source .venv/bin/activate
```
(für Bash-Nutzende, der Standard unter Linux) oder
```zsh
. .venv/bin/activate
```
(wenn zsh verwendet wird, vor allem MacOS-Nutzende).
Sollte `pip install` die mariadb-Abhängigkeit nicht installieren können,
dann helfen folgende Kommandos:
* Debian/Ubuntu: `sudo apt-get install -y libmariadb-dev`
* Macos/Homebrew: `brew install mariadb-connector-c`
gefolgt von einem erneuten `pip install -r requirements.txt`.
## Nutzung
`config.example.py` anpassen und dann in config.py umbennenen
Um das System zu nutzen, führen Sie `flask_server.py` aus, damit wird der Server gestartet
```bash
./flask_server.py
```
## Klassen und Funktionalitäten
In diesem Projekt werden verschiedene Klassen verwendet, um die Komponenten eines Energiesystems zu simulieren und zu optimieren. Jede Klasse repräsentiert einen spezifischen Aspekt des Systems, wie nachfolgend beschrieben:
- `PVAkku`: Simuliert einen Batteriespeicher, einschließlich der Kapazität, des Ladezustands und jetzt auch der Lade- und Entladeverluste.
- `PVForecast`: Stellt Vorhersagedaten für die Photovoltaik-Erzeugung bereit, basierend auf Wetterdaten und historischen Erzeugungsdaten.
- `Load`: Modelliert die Lastanforderungen des Haushalts oder Unternehmens, ermöglicht die Vorhersage des zukünftigen Energiebedarfs.
- `HeatPump`: Simuliert eine Wärmepumpe, einschließlich ihres Energieverbrauchs und ihrer Effizienz unter verschiedenen Betriebsbedingungen.
- `Strompreis`: Bietet Informationen zu den Strompreisen, ermöglicht die Optimierung des Energieverbrauchs und der -erzeugung basierend auf Tarifinformationen.
- `EMS`: Das Energiemanagementsystem (EMS) koordiniert die Interaktion zwischen den verschiedenen Komponenten, führt die Optimierung durch und simuliert den Betrieb des gesamten Energiesystems.
Diese Klassen arbeiten zusammen, um eine detaillierte Simulation und Optimierung des Energiesystems zu ermöglichen. Für jede Klasse können spezifische Parameter und Einstellungen angepasst werden, um verschiedene Szenarien und Strategien zu testen.
### Anpassung und Erweiterung
Jede Klasse ist so gestaltet, dass sie leicht angepasst und erweitert werden kann, um zusätzliche Funktionen oder Verbesserungen zu integrieren. Beispielsweise können neue Methoden zur genaueren Modellierung des Verhaltens von PV-Anlagen oder Batteriespeichern hinzugefügt werden. Entwickler sind eingeladen, das System nach ihren Bedürfnissen zu modifizieren und zu erweitern.
# Input für den Flask Server (Stand 30.07.204)
Beschreibt die Struktur und Datentypen des JSON-Objekts, das an den Flask-Server gesendet wird. Hier mit einem Prognosezeitraum von 48 Stunden!
## Felder des JSON-Objekts
### strompreis_euro_pro_wh
- **Beschreibung**: Ein Array von Floats, das den Strompreis in Euro pro Wattstunde für verschiedene Zeitintervalle darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 48
### gesamtlast
- **Beschreibung**: Ein Array von Floats, das die Gesamtlast (Verbrauch) in Watt für verschiedene Zeitintervalle darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 48
### pv_forecast
- **Beschreibung**: Ein Array von Floats, das die prognostizierte Photovoltaik-Leistung in Watt für verschiedene Zeitintervalle darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 48
### temperature_forecast
- **Beschreibung**: Ein Array von Floats, das die Temperaturvorhersage in Grad Celsius für verschiedene Zeitintervalle darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 48
### pv_soc
- **Beschreibung**: Ein Integer, der den Ladezustand des PV Akkus zum START der aktuellen Stunde anzeigt, das ist nicht der aktuelle!!!
- **Typ**: Integer
### pv_akku_cap
- **Beschreibung**: Ein Integer, der die Kapazität des Photovoltaik-Akkus in Wattstunden darstellt.
- **Typ**: Integer
### einspeiseverguetung_euro_pro_wh
- **Beschreibung**: Ein Float, der die Einspeisevergütung in Euro pro Wattstunde darstellt.
- **Typ**: Float
### eauto_min_soc
- **Beschreibung**: Ein Integer, der den minimalen Ladezustand (State of Charge) des Elektroautos in Prozent darstellt.
- **Typ**: Integer
### eauto_cap
- **Beschreibung**: Ein Integer, der die Kapazität des Elektroauto-Akkus in Wattstunden darstellt.
- **Typ**: Integer
### eauto_charge_efficiency
- **Beschreibung**: Ein Float, der die Ladeeffizienz des Elektroautos darstellt.
- **Typ**: Float
### eauto_charge_power
- **Beschreibung**: Ein Integer, der die Ladeleistung des Elektroautos in Watt darstellt.
- **Typ**: Integer
### eauto_soc
- **Beschreibung**: Ein Integer, der den aktuellen Ladezustand (State of Charge) des Elektroautos in Prozent darstellt.
- **Typ**: Integer
### start_solution
- **Beschreibung**: Kann null sein oder eine vorherige Lösung enthalten (wenn vorhanden).
- **Typ**: null oder object
### haushaltsgeraet_wh
- **Beschreibung**: Ein Integer, der den Energieverbrauch eines Haushaltsgeräts in Wattstunden darstellt.
- **Typ**: Integer
### haushaltsgeraet_dauer
- **Beschreibung**: Ein Integer, der die Dauer der Nutzung des Haushaltsgeräts in Stunden darstellt.
- **Typ**: Integer
# JSON-Output Beschreibung
Dieses Dokument beschreibt die Struktur und Datentypen des JSON-Outputs, den der Flask-Server zurückgibt. Hier mit einem Prognosezeitraum von 48h
## Felder des JSON-Outputs (Stand 30.7.2024)
### discharge_hours_bin
- **Beschreibung**: Ein Array von Binärwerten (0 oder 1), das anzeigt, ob in einer bestimmten Stunde Energie entladen wird.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48
### eauto_obj
- **Beschreibung**: Ein Objekt, das Informationen über das Elektroauto enthält.
- **charge_array**: Ein Array von Binärwerten (0 oder 1), das anzeigt, ob das Elektroauto in einer bestimmten Stunde geladen wird.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48
- **discharge_array**: Ein Array von Binärwerten (0 oder 1), das anzeigt, ob das Elektroauto in einer bestimmten Stunde entladen wird.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48
- **entlade_effizienz**: Die Entladeeffizienz des Elektroautos.
- **Typ**: Float
- **hours**: Die Anzahl der Stunden, für die die Simulation durchgeführt wird.
- **Typ**: Integer
- **kapazitaet_wh**: Die Kapazität des Elektroauto-Akkus in Wattstunden.
- **Typ**: Integer
- **lade_effizienz**: Die Ladeeffizienz des Elektroautos.
- **Typ**: Float
- **max_ladeleistung_w**: Die maximale Ladeleistung des Elektroautos in Watt.
- **Typ**: Integer
- **soc_wh**: Der Ladezustand (State of Charge) des Elektroautos in Wattstunden.
- **Typ**: Integer
- **start_soc_prozent**: Der initiale Ladezustand (State of Charge) des Elektroautos in Prozent.
- **Typ**: Integer
### eautocharge_hours_float
- **Beschreibung**: Ein Array von Binärwerten (0 oder 1), das anzeigt, ob das Elektroauto in einer bestimmten Stunde geladen wird.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48
### result
- **Beschreibung**: Ein Objekt, das die Ergebnisse der Simulation enthält.
- **E-Auto_SoC_pro_Stunde**: Ein Array von Floats, das den Ladezustand des Elektroautos für jede Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Eigenverbrauch_Wh_pro_Stunde**: Ein Array von Floats, das den Eigenverbrauch in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Einnahmen_Euro_pro_Stunde**: Ein Array von Floats, das die Einnahmen in Euro pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Gesamt_Verluste**: Die gesamten Verluste in Wattstunden.
- **Typ**: Float
- **Gesamtbilanz_Euro**: Die gesamte Bilanz in Euro.
- **Typ**: Float
- **Gesamteinnahmen_Euro**: Die gesamten Einnahmen in Euro.
- **Typ**: Float
- **Gesamtkosten_Euro**: Die gesamten Kosten in Euro.
- **Typ**: Float
- **Haushaltsgeraet_wh_pro_stunde**: Ein Array von Floats, das den Energieverbrauch eines Haushaltsgeräts in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Kosten_Euro_pro_Stunde**: Ein Array von Floats, das die Kosten in Euro pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Netzbezug_Wh_pro_Stunde**: Ein Array von Floats, das den Netzbezug in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Netzeinspeisung_Wh_pro_Stunde**: Ein Array von Floats, das die Netzeinspeisung in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Verluste_Pro_Stunde**: Ein Array von Floats, das die Verluste pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **akku_soc_pro_stunde**: Ein Array von Floats, das den Ladezustand des Akkus in Prozent pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
### simulation_data
- **Beschreibung**: Ein Objekt, das die simulierten Daten enthält.
- **E-Auto_SoC_pro_Stunde**: Ein Array von Floats, das den simulierten Ladezustand des Elektroautos pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Eigenverbrauch_Wh_pro_Stunde**: Ein Array von Floats, das den simulierten Eigenverbrauch in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Einnahmen_Euro_pro_Stunde**: Ein Array von Floats, das die simulierten Einnahmen in Euro pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Gesamt_Verluste**: Die gesamten simulierten Verluste in Wattstunden.
- **Typ**: Float
- **Gesamtbilanz_Euro**: Die gesamte simulierte Bilanz in Euro.
- **Typ**: Float
- **Gesamteinnahmen_Euro**: Die gesamten simulierten Einnahmen in Euro.
- **Typ**: Float
- **Gesamtkosten_Euro**: Die gesamten simulierten Kosten in Euro.
- **Typ**: Float
- **Haushaltsgeraet_wh_pro_stunde**: Ein Array von Floats, das den simulierten Energieverbrauch eines Haushaltsgeräts in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Kosten_Euro_pro_Stunde**: Ein Array von Floats, das die simulierten Kosten in Euro pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Netzbezug_Wh_pro_Stunde**: Ein Array von Floats, das den simulierten Netzbezug in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Netzeinspeisung_Wh_pro_Stunde**: Ein Array von Floats, das die simulierte Netzeinspeisung in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Verluste_Pro_Stunde**: Ein Array von Floats, das die simulierten Verluste pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **akku_soc_pro_stunde**: Ein Array von Floats, das den simulierten Ladezustand des Akkus in Prozent pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
### spuelstart
- **Beschreibung**: Kann `null` sein oder ein Objekt enthalten, das den Spülstart darstellt (wenn vorhanden).
- **Typ**: null oder object
### start_solution
- **Beschreibung**: Ein Array von Binärwerten (0 oder 1), das eine mögliche Startlösung für die Simulation darstellt.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48

362
README.md
View File

@ -1,333 +1,217 @@
# Energiesystem Simulation und Optimierung
# Energy System Simulation and Optimization
Dieses Projekt bietet eine umfassende Lösung zur Simulation und Optimierung eines Energiesystems, das auf erneuerbaren Energiequellen basiert. Mit Fokus auf Photovoltaik (PV)-Anlagen, Batteriespeichern (Akkus), Lastmanagement (Verbraucheranforderungen), Wärmepumpen, Elektrofahrzeugen und der Berücksichtigung von Strompreisdaten ermöglicht dieses System die Vorhersage und Optimierung des Energieflusses und der Kosten über einen bestimmten Zeitraum.
This project provides a comprehensive solution for simulating and optimizing an energy system based on renewable energy sources. With a focus on photovoltaic (PV) systems, battery storage (batteries), load management (consumer requirements), heat pumps, electric vehicles, and consideration of electricity price data, this system enables forecasting and optimization of energy flow and costs over a specified period.
## Mitmachen
## Getting Involved
Die Diskussion findet im [Forum](https://www.akkudoktor.net/forum/diy-energie-optimierungssystem-opensource-projekt/) statt. Bugs bitte im [Issue Tracker](https://github.com/Akkudoktor-EOS/EOS/issues) melden, Code-Beiträge und Bug-Fixes nehmen wir gerne als [Pull-Requests](https://github.com/Akkudoktor-EOS/EOS/pulls) entgegen.
The discussion takes place in the [forum](https://www.akkudoktor.net/forum/diy-energie-optimierungssystem-opensource-projekt/). Please report bugs in the [Issue Tracker](https://github.com/Akkudoktor-EOS/EOS/issues). We welcome code contributions and bug fixes via [Pull Requests](https://github.com/Akkudoktor-EOS/EOS/pulls).
## Installation
Gute Install Anleitung:
Good installation guide:
https://meintechblog.de/2024/09/05/andreas-schmitz-joerg-installiert-mein-energieoptimierungssystem/
Das Projekt erfordert Python 3.8 oder neuer.
The project requires Python 3.8 or newer.
### Schnellanleitung
### Quick Start Guide
Unter Linux (Ubuntu/Debian):
On Linux (Ubuntu/Debian):
```bash
sudo apt install make
```
Unter Macos (benötigt [Homebrew](https://brew.sh)):
On MacOS (requires [Homebrew](https://brew.sh)):
```zsh
brew install make
```
Nun `config.example.py` anpassen und dann in `config.py` umbennenen. Anschließend kann der Server über `make run` gestartet werden.
Eine vollständige Übersicht über die wichtigsten Kurzbefehle gibt `make help`.
Next, adjust `config.example.py` and rename it to `config.py`. The server can then be started with `make run`. A full overview of the main shortcuts is given by `make help`.
### Ausführliche Anleitung
### Detailed Instructions
Alle notwendigen Abhängigkeiten können über `pip` installiert werden. Klonen Sie das Repository und installieren Sie die erforderlichen Pakete mit:
All necessary dependencies can be installed via `pip`. Clone the repository and install the required packages with:
```bash
git clone https://github.com/Akkudoktor-EOS/EOS
cd EOS
```
Als Nächstes legen wir ein virtuelles Environment an. Es dient zur Ablage der Python-Abhängigkeiten,
die wir später per `pip` installieren:
Next, create a virtual environment. This serves to store the Python dependencies, which we will install later using `pip`:
```bash
virtualenv .venv
```
Schließlich installieren wir die Python-Abhängigkeiten von EOS:
Finally, install the Python dependencies for EOS:
```bash
.venv/bin/pip install -r requirements.txt
```
Um immer die Python-Version aus dem Virtual-Env zu verwenden, sollte vor der Arbeit in
EOS Folgendes aufgerufen werden:
To always use the Python version from the virtual environment, you should activate it before working in EOS:
```bash
source .venv/bin/activate
```
(für Bash-Nutzende, der Standard unter Linux) oder
(for Bash users, the default under Linux) or
```zsh
. .venv/bin/activate
```
(if using zsh, primarily for MacOS users).
(wenn zsh verwendet wird, vor allem MacOS-Nutzende).
Sollte `pip install` die mariadb-Abhängigkeit nicht installieren können,
dann helfen folgende Kommandos:
If `pip install` fails to install the mariadb dependency, the following commands may help:
* Debian/Ubuntu: `sudo apt-get install -y libmariadb-dev`
* Macos/Homebrew: `brew install mariadb-connector-c`
* MacOS/Homebrew: `brew install mariadb-connector-c`
gefolgt von einem erneuten `pip install -r requirements.txt`.
Followed by a renewed `pip install -r requirements.txt`.
## Nutzung
`config.example.py` anpassen und dann in config.py umbennenen
Um das System zu nutzen, führen Sie `flask_server.py` aus, damit wird der Server gestartet
## Usage
Adjust `config.example.py` and rename it to `config.py`. To use the system, run `flask_server.py`, which starts the server:
```bash
./flask_server.py
```
## Klassen und Funktionalitäten
In diesem Projekt werden verschiedene Klassen verwendet, um die Komponenten eines Energiesystems zu simulieren und zu optimieren. Jede Klasse repräsentiert einen spezifischen Aspekt des Systems, wie nachfolgend beschrieben:
## Classes and Functionalities
- `PVAkku`: Simuliert einen Batteriespeicher, einschließlich der Kapazität, des Ladezustands und jetzt auch der Lade- und Entladeverluste.
This project uses various classes to simulate and optimize the components of an energy system. Each class represents a specific aspect of the system, as described below:
- `PVForecast`: Stellt Vorhersagedaten für die Photovoltaik-Erzeugung bereit, basierend auf Wetterdaten und historischen Erzeugungsdaten.
- `PVAkku`: Simulates a battery storage system, including capacity, state of charge, and now charge and discharge losses.
- `Load`: Modelliert die Lastanforderungen des Haushalts oder Unternehmens, ermöglicht die Vorhersage des zukünftigen Energiebedarfs.
- `PVForecast`: Provides forecast data for photovoltaic generation, based on weather data and historical generation data.
- `HeatPump`: Simuliert eine Wärmepumpe, einschließlich ihres Energieverbrauchs und ihrer Effizienz unter verschiedenen Betriebsbedingungen.
- `Load`: Models the load requirements of a household or business, enabling the prediction of future energy demand.
- `Strompreis`: Bietet Informationen zu den Strompreisen, ermöglicht die Optimierung des Energieverbrauchs und der -erzeugung basierend auf Tarifinformationen.
- `HeatPump`: Simulates a heat pump, including its energy consumption and efficiency under various operating conditions.
- `EMS`: Das Energiemanagementsystem (EMS) koordiniert die Interaktion zwischen den verschiedenen Komponenten, führt die Optimierung durch und simuliert den Betrieb des gesamten Energiesystems.
- `Strompreis`: Provides information on electricity prices, enabling optimization of energy consumption and generation based on tariff information.
Diese Klassen arbeiten zusammen, um eine detaillierte Simulation und Optimierung des Energiesystems zu ermöglichen. Für jede Klasse können spezifische Parameter und Einstellungen angepasst werden, um verschiedene Szenarien und Strategien zu testen.
- `EMS`: The Energy Management System (EMS) coordinates the interaction between the various components, performs optimization, and simulates the operation of the entire energy system.
### Anpassung und Erweiterung
These classes work together to enable a detailed simulation and optimization of the energy system. For each class, specific parameters and settings can be adjusted to test different scenarios and strategies.
Jede Klasse ist so gestaltet, dass sie leicht angepasst und erweitert werden kann, um zusätzliche Funktionen oder Verbesserungen zu integrieren. Beispielsweise können neue Methoden zur genaueren Modellierung des Verhaltens von PV-Anlagen oder Batteriespeichern hinzugefügt werden. Entwickler sind eingeladen, das System nach ihren Bedürfnissen zu modifizieren und zu erweitern.
### Customization and Extension
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 für den Flask Server (Stand 30.07.204)
Beschreibt die Struktur und Datentypen des JSON-Objekts, das an den Flask-Server gesendet wird. Hier mit einem Prognosezeitraum von 48 Stunden!
# Input for the Flask Server (as of 30.07.2024)
## Felder des JSON-Objekts
Describes the structure and data types of the JSON object sent to the Flask server, with a forecast period of 48 hours.
### strompreis_euro_pro_wh
- **Beschreibung**: Ein Array von Floats, das den Strompreis in Euro pro Wattstunde für verschiedene Zeitintervalle darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 48
## JSON Object Fields
### gesamtlast
- **Beschreibung**: Ein Array von Floats, das die Gesamtlast (Verbrauch) in Watt für verschiedene Zeitintervalle darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 48
### `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
### pv_forecast
- **Beschreibung**: Ein Array von Floats, das die prognostizierte Photovoltaik-Leistung in Watt für verschiedene Zeitintervalle darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 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
### temperature_forecast
- **Beschreibung**: Ein Array von Floats, das die Temperaturvorhersage in Grad Celsius für verschiedene Zeitintervalle darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 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
### pv_soc
- **Beschreibung**: Ein Integer, der den Ladezustand des PV Akkus zum START der aktuellen Stunde anzeigt, das ist nicht der aktuelle!!!
- **Typ**: Integer
### `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_akku_cap
- **Beschreibung**: Ein Integer, der die Kapazität des Photovoltaik-Akkus in Wattstunden darstellt.
- **Typ**: Integer
### `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
### einspeiseverguetung_euro_pro_wh
- **Beschreibung**: Ein Float, der die Einspeisevergütung in Euro pro Wattstunde darstellt.
- **Typ**: Float
### `pv_akku_cap`
- **Description**: An integer representing the capacity of the photovoltaic battery in watt-hours.
- **Type**: Integer
### eauto_min_soc
- **Beschreibung**: Ein Integer, der den minimalen Ladezustand (State of Charge) des Elektroautos in Prozent darstellt.
- **Typ**: Integer
### `einspeiseverguetung_euro_pro_wh`
- **Description**: A float representing the feed-in compensation in euros per watt-hour.
- **Type**: Float
### eauto_cap
- **Beschreibung**: Ein Integer, der die Kapazität des Elektroauto-Akkus in Wattstunden darstellt.
- **Typ**: Integer
### `eauto_min_soc`
- **Description**: An integer representing the minimum state of charge (SOC) of the electric vehicle in percentage.
- **Type**: Integer
### eauto_charge_efficiency
- **Beschreibung**: Ein Float, der die Ladeeffizienz des Elektroautos darstellt.
- **Typ**: Float
### `eauto_cap`
- **Description**: An integer representing the capacity of the electric vehicle battery in watt-hours.
- **Type**: Integer
### eauto_charge_power
- **Beschreibung**: Ein Integer, der die Ladeleistung des Elektroautos in Watt darstellt.
- **Typ**: Integer
### `eauto_charge_efficiency`
- **Description**: A float representing the charging efficiency of the electric vehicle.
- **Type**: Float
### eauto_soc
- **Beschreibung**: Ein Integer, der den aktuellen Ladezustand (State of Charge) des Elektroautos in Prozent darstellt.
- **Typ**: Integer
### `eauto_charge_power`
- **Description**: An integer representing the charging power of the electric vehicle in watts.
- **Type**: Integer
### start_solution
- **Beschreibung**: Kann null sein oder eine vorherige Lösung enthalten (wenn vorhanden).
- **Typ**: null oder object
### `eauto_soc`
- **Description**: An integer representing the current state of charge (SOC) of the electric vehicle in percentage.
- **Type**: Integer
### haushaltsgeraet_wh
- **Beschreibung**: Ein Integer, der den Energieverbrauch eines Haushaltsgeräts in Wattstunden darstellt.
- **Typ**: Integer
### `start_solution`
- **Description**: Can be `null` or contain a previous solution (if available).
- **Type**: `null` or object
### haushaltsgeraet_dauer
- **Beschreibung**: Ein Integer, der die Dauer der Nutzung des Haushaltsgeräts in Stunden darstellt.
- **Typ**: Integer
### `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.
## JSON Output Fields (as of 30.7.2024)
### Explanation of the Output Fields
# JSON-Output Beschreibung
#### 1. **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).
Dieses Dokument beschreibt die Struktur und Datentypen des JSON-Outputs, den der Flask-Server zurückgibt. Hier mit einem Prognosezeitraum von 48h
#### 2. **eauto_obj**
This object contains information related to the electric vehicle and its charging and discharging behavior:
## Felder des JSON-Outputs (Stand 30.7.2024)
- **charge_array**: Indicates for each hour whether the EV is charging (`0` for no charging, `1` for charging).
- **discharge_array**: Indicates for each hour whether the EV is discharging (`0` for no discharging, `1` for discharging).
- **entlade_effizienz**: The discharge efficiency as a float.
- **kapazitaet_wh**: The capacity of the EVs battery in watt-hours.
- **lade_effizienz**: The charging efficiency as a float.
- **max_ladeleistung_w**: The maximum charging power of the EV in watts.
- **soc_wh**: The state of charge of the battery in watt-hours at the start of the simulation.
- **start_soc_prozent**: The state of charge of the battery in percentage at the start of the simulation.
### discharge_hours_bin
- **Beschreibung**: Ein Array von Binärwerten (0 oder 1), das anzeigt, ob in einer bestimmten Stunde Energie entladen wird.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48
#### 3. **result**
This object contains the results of the simulation and provides insights into various parameters over the entire forecast period:
### eauto_obj
- **Beschreibung**: Ein Objekt, das Informationen über das Elektroauto enthält.
- **charge_array**: Ein Array von Binärwerten (0 oder 1), das anzeigt, ob das Elektroauto in einer bestimmten Stunde geladen wird.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48
- **discharge_array**: Ein Array von Binärwerten (0 oder 1), das anzeigt, ob das Elektroauto in einer bestimmten Stunde entladen wird.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48
- **entlade_effizienz**: Die Entladeeffizienz des Elektroautos.
- **Typ**: Float
- **hours**: Die Anzahl der Stunden, für die die Simulation durchgeführt wird.
- **Typ**: Integer
- **kapazitaet_wh**: Die Kapazität des Elektroauto-Akkus in Wattstunden.
- **Typ**: Integer
- **lade_effizienz**: Die Ladeeffizienz des Elektroautos.
- **Typ**: Float
- **max_ladeleistung_w**: Die maximale Ladeleistung des Elektroautos in Watt.
- **Typ**: Integer
- **soc_wh**: Der Ladezustand (State of Charge) des Elektroautos in Wattstunden.
- **Typ**: Integer
- **start_soc_prozent**: Der initiale Ladezustand (State of Charge) des Elektroautos in Prozent.
- **Typ**: Integer
### eautocharge_hours_float
- **Beschreibung**: Ein Array von Binärwerten (0 oder 1), das anzeigt, ob das Elektroauto in einer bestimmten Stunde geladen wird.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48
### result
- **Beschreibung**: Ein Objekt, das die Ergebnisse der Simulation enthält.
- **E-Auto_SoC_pro_Stunde**: Ein Array von Floats, das den Ladezustand des Elektroautos für jede Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Eigenverbrauch_Wh_pro_Stunde**: Ein Array von Floats, das den Eigenverbrauch in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Einnahmen_Euro_pro_Stunde**: Ein Array von Floats, das die Einnahmen in Euro pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Gesamt_Verluste**: Die gesamten Verluste in Wattstunden.
- **Typ**: Float
- **Gesamtbilanz_Euro**: Die gesamte Bilanz in Euro.
- **Typ**: Float
- **Gesamteinnahmen_Euro**: Die gesamten Einnahmen in Euro.
- **Typ**: Float
- **Gesamtkosten_Euro**: Die gesamten Kosten in Euro.
- **Typ**: Float
- **Haushaltsgeraet_wh_pro_stunde**: Ein Array von Floats, das den Energieverbrauch eines Haushaltsgeräts in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Kosten_Euro_pro_Stunde**: Ein Array von Floats, das die Kosten in Euro pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Netzbezug_Wh_pro_Stunde**: Ein Array von Floats, das den Netzbezug in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Netzeinspeisung_Wh_pro_Stunde**: Ein Array von Floats, das die Netzeinspeisung in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Verluste_Pro_Stunde**: Ein Array von Floats, das die Verluste pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **akku_soc_pro_stunde**: Ein Array von Floats, das den Ladezustand des Akkus in Prozent pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
### simulation_data
- **Beschreibung**: Ein Objekt, das die simulierten Daten enthält.
- **E-Auto_SoC_pro_Stunde**: Ein Array von Floats, das den simulierten Ladezustand des Elektroautos pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Eigenverbrauch_Wh_pro_Stunde**: Ein Array von Floats, das den simulierten Eigenverbrauch in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Einnahmen_Euro_pro_Stunde**: Ein Array von Floats, das die simulierten Einnahmen in Euro pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Gesamt_Verluste**: Die gesamten simulierten Verluste in Wattstunden.
- **Typ**: Float
- **Gesamtbilanz_Euro**: Die gesamte simulierte Bilanz in Euro.
- **Typ**: Float
- **Gesamteinnahmen_Euro**: Die gesamten simulierten Einnahmen in Euro.
- **Typ**: Float
- **Gesamtkosten_Euro**: Die gesamten simulierten Kosten in Euro.
- **Typ**: Float
- **Haushaltsgeraet_wh_pro_stunde**: Ein Array von Floats, das den simulierten Energieverbrauch eines Haushaltsgeräts in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Kosten_Euro_pro_Stunde**: Ein Array von Floats, das die simulierten Kosten in Euro pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Netzbezug_Wh_pro_Stunde**: Ein Array von Floats, das den simulierten Netzbezug in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Netzeinspeisung_Wh_pro_Stunde**: Ein Array von Floats, das die simulierte Netzeinspeisung in Wattstunden pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **Verluste_Pro_Stunde**: Ein Array von Floats, das die simulierten Verluste pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
- **akku_soc_pro_stunde**: Ein Array von Floats, das den simulierten Ladezustand des Akkus in Prozent pro Stunde darstellt.
- **Typ**: Array
- **Element-Typ**: Float
- **Länge**: 35
### spuelstart
- **Beschreibung**: Kann `null` sein oder ein Objekt enthalten, das den Spülstart darstellt (wenn vorhanden).
- **Typ**: null oder object
### start_solution
- **Beschreibung**: Ein Array von Binärwerten (0 oder 1), das eine mögliche Startlösung für die Simulation darstellt.
- **Typ**: Array
- **Element-Typ**: Integer (0 oder 1)
- **Länge**: 48
- **E-Auto_SoC_pro_Stunde**: The state of charge of the EV for each hour.
- **Eigenverbrauch_Wh_pro_Stunde**: The self-consumption of the system in watt-hours per hour.
- **Einnahmen_Euro_pro_Stunde**: The revenue from grid feed-in or other sources in euros per hour.
- **Gesamt_Verluste**: The total losses in watt-hours over the entire period.
- **Gesamtbilanz_Euro**: The total balance of revenues minus costs in euros.
- **Gesamteinnahmen_Euro**: The total revenues in euros.
- **Gesamtkosten_Euro**: The total costs in euros.
- **Haushaltsgeraet_wh_pro_stunde**: The energy consumption of a household appliance in watt-hours per hour.
- **Kosten_Euro_pro_Stunde**: The costs in euros per hour.
- **Netzbezug_Wh_pro_Stunde**: The grid energy drawn in watt-hours per hour.
- **Netzeinspeisung_Wh_pro_Stunde**: The energy fed into the grid in watt-hours per hour.
- **Verluste_Pro_Stunde**: The losses in watt-hours per hour.
- **akku_soc_pro_stunde**: The state of charge of the battery (not the EV) in percentage per hour.