Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge master into Release #1069

Merged
merged 99 commits into from
Aug 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
a14984e
Update set-current.sh
hhoefling Jul 3, 2023
77078fc
[Kia/Hyundai] - Hotfix App changes
Flock82 Jul 4, 2023
a1a14c0
[BMW] - Hotfix App changes
Flock82 Jul 4, 2023
22e0faa
Merge pull request #2755 from Flock82/soc_bmw
benderl Jul 4, 2023
2c27544
Merge pull request #2754 from Flock82/soc_kia
benderl Jul 4, 2023
f945869
Merge pull request #2753 from hhoefling/patch-10
benderl Jul 4, 2023
52e3b7a
Umschalten auf automatisch um 23:59
okaegi Jul 11, 2023
6eb4c3c
Bump semver from 5.7.1 to 5.7.2 in /web/display/yourcharge
dependabot[bot] Jul 12, 2023
2606173
Merge pull request #2756 from okaegi/smart190
LKuemmel Jul 14, 2023
7ec48a9
Merge pull request #2757 from snaptec/dependabot/npm_and_yarn/web/dis…
benderl Jul 14, 2023
135cb48
Update version
benderl Jul 17, 2023
9b36cf9
fix b23
LKuemmel Jul 17, 2023
b2e292c
boot done after python start sequence
LKuemmel Jul 18, 2023
86a4732
Merge pull request #1035 from LKuemmel/boot_done
LKuemmel Jul 19, 2023
fc63edb
Merge pull request #1033 from LKuemmel/fix_b23
LKuemmel Jul 19, 2023
bac6734
evu position powerdog
LKuemmel Jul 19, 2023
cc472eb
QCells
LKuemmel Jul 19, 2023
6806372
Build UI
LKuemmel Jul 19, 2023
1191f45
Merge pull request #1038 from LKuemmel/web
LKuemmel Jul 19, 2023
3d1ee21
Merge pull request #1037 from LKuemmel/qcells
LKuemmel Jul 19, 2023
53f8f95
fix qcells
LKuemmel Jul 20, 2023
a9a56ff
Merge pull request #1039 from LKuemmel/qcells
LKuemmel Jul 20, 2023
e1a78bf
fix qcells
LKuemmel Jul 20, 2023
4f09709
Merge pull request #1040 from LKuemmel/qcells
LKuemmel Jul 20, 2023
efb6585
Huawei smartlogger (#841)
sreinhold95 Jul 24, 2023
3d66433
fix rct device connection
Jul 24, 2023
7e56768
pub bridge data
LKuemmel Jul 24, 2023
db0fc57
improve text
LKuemmel Jul 24, 2023
23e85ab
text
LKuemmel Jul 24, 2023
a06c956
Merge pull request #1042 from LKuemmel/web
LKuemmel Jul 24, 2023
8258d14
Merge pull request #1041 from LKuemmel/fix-cloud
LKuemmel Jul 24, 2023
6411d70
build UI
LKuemmel Jul 24, 2023
628eb1f
Merge pull request #1043 from LKuemmel/web
LKuemmel Jul 24, 2023
e6f3b6c
Merge pull request #1036 from LKuemmel/powerdog
LKuemmel Jul 24, 2023
e5d43ce
Merge pull request #2759 from benderl/bugfix
LKuemmel Jul 25, 2023
26f4acf
Merge remote-tracking branch 'openWB/master' into changes_snaptec_repo
LKuemmel Jul 25, 2023
e5df545
unique name for bridges
LKuemmel Jul 25, 2023
dcbad66
Merge pull request #1045 from LKuemmel/changes_snaptec_repo
LKuemmel Jul 25, 2023
dff5d13
Update packages/helpermodules/command.py
LKuemmel Jul 25, 2023
994468d
Merge pull request #1046 from LKuemmel/fix-cloud
LKuemmel Jul 25, 2023
1c64221
fix powerdog
LKuemmel Jul 25, 2023
583bf6a
Merge pull request #1048 from LKuemmel/powerdog
LKuemmel Jul 25, 2023
8ea574d
Update counter.py
andlem74 Jul 26, 2023
71ccf37
draft
LKuemmel Jul 5, 2023
133dfbc
draft
LKuemmel Jul 6, 2023
70efb33
draft
LKuemmel Jul 7, 2023
b4b48bb
snn cloud
LKuemmel Jul 11, 2023
3600775
data migration
LKuemmel Jul 18, 2023
2f7b3b8
fix upload dir permissions
benderl Jul 19, 2023
695b251
minor fixes
benderl Jul 19, 2023
84a68ab
improve merge, pv values
LKuemmel Jul 19, 2023
0f522ec
fixes
LKuemmel Jul 20, 2023
e7563ec
SN
LKuemmel Jul 20, 2023
4ad66c8
fixes
LKuemmel Jul 20, 2023
e318b6e
minor fixes
benderl Jul 24, 2023
cbec993
use threads
LKuemmel Jul 24, 2023
0870b64
split threads
LKuemmel Jul 24, 2023
2265d61
fixes
benderl Jul 25, 2023
c72d8ef
remove duplicate file handling
benderl Jul 25, 2023
697fce4
fixes chargelog
LKuemmel Jul 25, 2023
4e4c9c4
typos and charge log fix
benderl Jul 25, 2023
218314d
map evs in charge log
LKuemmel Jul 25, 2023
838a116
fix handling corrupt import data
benderl Jul 25, 2023
f3f7771
Merge pull request #1052 from openWB/feature_data_migration
benderl Jul 26, 2023
8c911ee
fix naming
benderl Jul 12, 2023
4d72e35
modify import for better readability
benderl Jul 12, 2023
6c3a491
add one more line to log data
benderl Jul 12, 2023
d1eaa64
removed not used file
benderl Jul 12, 2023
36352e2
add python-dateutil togithub action
benderl Jul 12, 2023
7f0f9a2
revert import change
benderl Jul 13, 2023
3a3082d
add one dataset to yearly log data
benderl Jul 13, 2023
6ccfc0f
build settings UI
benderl Jul 26, 2023
0d9781c
Merge pull request #1030 from benderl/measurement-log
benderl Jul 26, 2023
98cc873
fix requirements file
benderl Jul 26, 2023
4d05709
Merge pull request #1053 from benderl/bugfix
benderl Jul 26, 2023
f61429c
Merge pull request #1050 from andlem74/andlem74-patch-1
LKuemmel Jul 26, 2023
3f44072
fix display standby
LKuemmel Jul 26, 2023
65d893c
Merge pull request #1054 from LKuemmel/web
LKuemmel Jul 26, 2023
fc03ad6
build settings ui
benderl Jul 28, 2023
bb4893c
Merge pull request #1056 from benderl/web
benderl Jul 28, 2023
73690c7
fix chart link
LKuemmel Jul 28, 2023
90b038a
Merge pull request #1057 from LKuemmel/web
LKuemmel Jul 28, 2023
702d832
setup network
benderl Jul 31, 2023
a090d50
Merge pull request #1060 from benderl/web
benderl Jul 31, 2023
5826d46
Wiki Haudsverbrauchszähler
LKuemmel Jul 31, 2023
9f69082
Merge pull request #1062 from LKuemmel/wiki
benderl Jul 31, 2023
a44eebf
rename wiki pngs
LKuemmel Jul 31, 2023
3c52657
Merge pull request #1063 from LKuemmel/wiki
LKuemmel Jul 31, 2023
44dba2e
fix wiki pages
benderl Jul 31, 2023
b1c6d6b
fix code
benderl Jul 31, 2023
189cc32
fix wiki picture
LKuemmel Jul 31, 2023
891eff2
Merge pull request #1065 from LKuemmel/wiki
LKuemmel Jul 31, 2023
526c6bc
build UI
LKuemmel Aug 2, 2023
9fc4802
Merge pull request #1067 from LKuemmel/web
LKuemmel Aug 2, 2023
47e93ae
fix boot done
LKuemmel Aug 2, 2023
4b3ec21
Merge pull request #1064 from benderl/wording
LKuemmel Aug 2, 2023
6a3421c
fix test
LKuemmel Aug 2, 2023
587e4d8
Merge pull request #1068 from LKuemmel/boot_done
LKuemmel Aug 2, 2023
413557f
Update version
LKuemmel Aug 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/github-actions-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest paho-mqtt requests-mock jq pyjwt==2.6.0 bs4 pkce typing_extensions
pip install flake8 pytest paho-mqtt requests-mock jq pyjwt==2.6.0 bs4 pkce typing_extensions python-dateutil==2.8.2
- name: Flake8 with annotations in packages folder
uses: TrueBrain/actions-flake8@v2.1
with:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ data/daily_log/*
data/monthly_log/*
data/backup/*.tar.gz
data/restore/*.tar.gz
data/data_migration/*.tar.gz
ramdisk/*
web/lastcommit
!.gitignore
Empty file.
2 changes: 1 addition & 1 deletion docs/Cloud-Sicherung.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ _Einstellungen -> System -> System -> Sicherung/Wiederherstellung_

In den Sicherungseinstellungen kann ein Cloud-Dienst für automatische Sicherungen hinterlegt werden. Die Konfiguration des Cloud-Dienstes wird in diesem Wiki-Beitrag beschrieben. Folgende Anbieter werden unterstützt:

* [Nextcloud](https://github.com/openWB/core/wiki/Nextcloud-als-Sicherungs-Cloud-einrichten)
* [NextCloud](https://github.com/openWB/core/wiki/NextCloud-als-Sicherungs-Cloud-einrichten)
16 changes: 8 additions & 8 deletions docs/Entwicklungsumgebung.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
**Wie kann man die eigene Entwicklungsumgebung konfigurieren um bestmöglich mitwirken zu können?**

Bewährt hat sich VSCode <https://code.visualstudio.com/>, hinzu kommen noch ein paar Plugins. Am einfachsten direkt nach der Installation von VSCode in den Erweiterungen danach suchen und installieren:
Bewährt hat sich VSCode [https://code.visualstudio.com/](https://code.visualstudio.com/), hinzu kommen noch ein paar Plugins. Am einfachsten direkt nach der Installation von VSCode in den Erweiterungen danach suchen und installieren:

* GitHub - für die Codeverwaltung, erstellen von PRs & co
* Flake8 (ich musste aus dem DropDown explizit das prerelease auswählen) - Überprüft die Code-Formatierung von Python direkt im Editor. Ist optional, wird beim Erstellen eines PRs aber im Repo überprüft und der PR geht im Zweifel zurück an euch.
Expand All @@ -11,7 +11,7 @@ Bewährt hat sich VSCode <https://code.visualstudio.com/>, hinzu kommen noch ein
Genereller Ablauf, um eigene Änderungen beisteuern zu können:

* Eigenen GitHub Account erstellen
* openWB core Repository in den eigenen Account kopieren ("forken"), um eine editierbare Version zu erhalten: <https://github.com/openWB/core/fork>
* openWB core Repository in den eigenen Account kopieren ("forken"), um eine editierbare Version zu erhalten: [https://github.com/openWB/core/fork](https://github.com/openWB/core/fork)
* Gegen diese eigene Kopie kann nun gearbeitet werden. Hierzu in VSCode in der Kommandozeile oben git clone starten, auf die URL des eigenen Repo zeigen. Diese URL endet auf .git und findet sich in GitHub hinter dem Button Code.
* Es empfiehlt sich unbedingt für Änderungen stets einen separaten Branch zu öffnen, um das nächste Mal nicht wieder die ganzen alten Änderungen mitzuschleifen. Links unten in VSCode auf den Namen des Branch (master) klicken und einen neuen erstellen.
* Die Änderungen durchführen und testen.
Expand All @@ -23,7 +23,7 @@ Hört sich jetzt schlimmer an als es ist, wenn man den Prozess einmal durch hat,

Einrichtung Remote Development:

Hier gibt es eine kurze Übersicht: <https://www.raspberrypi.com/news/coding-on-raspberry-pi-remotely-with-visual-studio-code/>
Hier gibt es eine kurze Übersicht: [https://www.raspberrypi.com/news/coding-on-raspberry-pi-remotely-with-visual-studio-code/](https://www.raspberrypi.com/news/coding-on-raspberry-pi-remotely-with-visual-studio-code/)

*hier braucht es noch mehr Details, ggf. ein Screenshot?*

Expand All @@ -38,19 +38,19 @@ Um nun zu vermeiden, dass man dies unnötig häufig macht, empfiehlt es sich, un

Fehler und Warnungen findet man im Tray von VSCode:

<img src="VSCode-Tray-Flake8.png" width="80">
![VSCode Tray Flake8](VSCode-Tray-Flake8.png)

In der Ausgabe im Reiter Probleme:

<img src="VSCode-Problems-Flake8.png" width="400">
![VSCode Fehler Flake8](VSCode-Problems-Flake8.png)

Und auch inline direkt im Editor:

<img src="VSCode-Inline-Flake8.png" width="600">
![VSCode inline Fehler Flake8](VSCode-Inline-Flake8.png)

## Bezeichnungen für eigene Variablen, Funktionen

Bitte an die allgemeinen Namenskonventionen für Python halten: <https://realpython.com/python-pep8/#naming-conventions>
Bitte an die allgemeinen Namenskonventionen für Python halten: [https://realpython.com/python-pep8/#naming-conventions](https://realpython.com/python-pep8/#naming-conventions)

Die vorgeschlagene Erweiterung "Code Spell Checker" kann mit fast allen Varianten umgehen. Lediglich die empfohlenen Bezeichnung für eigene Pakete (packages) kann nicht geprüft werden, da nur Kleinbuchstaben genutzt und die zusammengesetzten Wörter nicht von einem Tippfehler unterschieden werden können.

Expand All @@ -61,4 +61,4 @@ Zu finden sind die Tests links im Navigationsbaum von VSCode. Bei der ersten Nut

Um sich das Leben einfach zu machen, sollte man spätestens hier die Variante 'Remote-Development' wählen. Das stellt sicher, dass die notwendigen Module allesamt vorhanden sind.

<img src="VSCode-PyTest.png" width="400">
![VSCode PyTest](VSCode-PyTest.png)
2 changes: 1 addition & 1 deletion docs/Fahrzeuge.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ _Einstellungen -> Konfiguration -> Fahrzeuge_

Die Einstellungen für die Fahrzeuge sind untergliedert in Fahrzeug-spezifische Einstellungen, Fahrzeug- und Ladeprofile. Im Fahrzeugprofil wird u.a. die Akkugröße und die maximale Anzahl der Phasen vorgegeben. Im Ladeprofil z.B. der Lademodus und die Stromstärke.

Neben dem Standardprofil muss für jedes physische Fahrzeug ein Fahrzeug hinzugefügt werden. Wenn mehrere Fahrzeuge des gleichen Modells vorhanden sind, kann immer dieselbe Fahrzeugvorlage zugeordnet werden. Wenn alle Fahrzeuge nach dem gleichen Schema geladen werden sollen, weise allen Fahrzeugen dasselbe Ladeprofil zu. Andernfalls nach Bedarf ein neues Ladeprofil hinzufügen und zuweisen.
Neben dem Standardprofil muss für jedes physische Fahrzeug ein Fahrzeug hinzugefügt werden. Wenn mehrere Fahrzeuge des gleichen Modells vorhanden sind, kann immer dasselbe Fahrzeug-Profil zugeordnet werden. Wenn alle Fahrzeuge nach dem gleichen Schema geladen werden sollen, weise allen Fahrzeugen dasselbe Lade-Profil zu. Andernfalls nach Bedarf ein neues Lade-Profil hinzufügen und zuweisen.
Binary file added docs/Hausverbrauchs-Zaehler.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/Hausverbrauchs-Zaehler_Hybrid.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions docs/Hausverbrauchs-Zähler.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Einige Zähler, wie zB Solar-Log und Kostal Plenticore, werden im Hausverbrauchs-Zweig und nicht am EVU-Punkt installiert. Die für die Reglung erforderlichen Werte des EVU-Punkts werden mit einem virtuellen Zähler ermittelt. Dazu ein Virtuelles Gerät mit einem virtuellen Zähler anlegen. Die Komponenten müssen in der Hierarchie wie in der Abbildung angeordnet werden:

<img src="Hausverbrauchs-Zaehler.png" width="500">

Ist ein Hybrid-Wechselrichter vorhanden, ergibt sich folgende Struktur:

<img src="Hausverbrauchs-Zaehler_Hybrid.png" width="500">
8 changes: 4 additions & 4 deletions docs/Hybrid System aus Wechselrichter und Speicher.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ Wenn die PV-Leistung um die Ladeleistung des Speichers zu niedrig ist, liegt ein

Das Verrechnen von Hybrid-Systemen erfolgt automatisch und muss nicht im Wechselrichter-Modul implementiert werden. Wenn ein Hybrid-System vorhanden ist und die Speicher-Leistung aus der Wechselrichter-Leistung herausgerechnet werden muss, ordne den Speicher in der Hierarchie unter dem Wechselrichter an.

Bei einem Hybrid-System wird der Speicher in der Hierarchie hinter dem Wechselrichter angeordnet:
<img src="hybrid.png" width="500">
Bei einem Hybrid-System wird der Speicher in der Hierarchie hinter dem Wechselrichter angeordnet:
![Hybrid-System](hybrid.png)

Im Vergleich dazu die Standard-Konfiguration:
<img src="standard.png" width="500">
Im Vergleich dazu die Standard-Konfiguration:
![Standard-System](standard.png)
4 changes: 2 additions & 2 deletions docs/Ladepunkte.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
_Einstellungen -> Konfiguration -> Ladepunkte_

Die Einstellungen für Ladepunkte unterteilen sich in die spezifischen Einstellungen je Ladepunkt und Ladepunkt-Vorlagen.
Die Einstellungen für Ladepunkte unterteilen sich in die spezifischen Einstellungen je Ladepunkt und Ladepunkt-Profile.

Beim Hinzufügen eines Ladepunkts muss zunächst dessen Typ ausgewählt werden. Danach wird Ladepunkt-spezifisches, wie z.B. die Anzahl angeschlossener Phasen oder eine verbaute Phasenumschaltung, konfiguriert.

In der Ladepunkte-Vorlage sind die Einstellungen zum automatischen Sperren (Autolock) und für RFID von Ladepunkten enthalten. Eine Ladepunkt-Vorlage kann vom Benutzer mehreren Ladepunkte zugewiesen werden, sodass die Einstellungen für jeden Ladepunkte einzeln oder für eine Gruppe zugewiesen werden können.
In dem Ladepunkt-Profil sind die Einstellungen zum automatischen Sperren (Autolock) und für RFID von Ladepunkten enthalten. Ein Ladepunkt-Profil kann vom Benutzer mehreren Ladepunkte zugewiesen werden, sodass die Einstellungen für jeden Ladepunkte einzeln oder für eine Gruppe zugewiesen werden können.

Das Vorhalten eines RFID-Tags (verbauter RFID-Leser erforderlich) oder die Pin-Eingabe (Display erforderlich, Eingabefeld muss im Steuerungsmodus 'secondary' aktiviert werden) werden gleich verarbeitet.
2 changes: 1 addition & 1 deletion docs/Ladung nur nach Freischaltung.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ Wenn die Freischaltung mittels RFID oder Pin erfolgen soll:

* _Einstellungen -> Optional_: RFID aktivieren
* im Fahrzeug: Tag zuweisen
* in der Ladepunkt-Vorlage: Freischaltung mit RFID aktivieren und die gültigen Tags eintragen
* in dem Ladepunkt-Profil: Freischaltung mit RFID aktivieren und die gültigen Tags eintragen
15 changes: 9 additions & 6 deletions docs/Lastmanagement und kaskadierte Zähler.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
Das Lastmanagement steuert die Freigabe des Ladestroms, wenn nicht alle Ladepunkte mit voller Leistung laden könnnen. Begrenzende Faktoren könnnen der Hausanschluss, Sicherungen oder Zuleitungen sein.

Die Priorisierung der Ladepunkte beschreibt der Hilfetext unter _Einstellungen -> Konfiguration -> Fahrzeuge -> Ladeprofil-Vorlage -> \*beliebige Vorlage\* -> Aktiver Lademodus_.
Die Priorisierung der Ladepunkte beschreibt der Hilfetext unter _Einstellungen -> Konfiguration -> Fahrzeuge -> Lade-Profile -> \*beliebiges Profil\* -> Aktiver Lademodus_.
Das Lastmanagement funktioniert dreistufig (ab Version 1.99.101.1):

1. Zuteilung des Fahrzeug-Mindeststroms unter Berücksichtigung des Lastmanagements: Der Ladepunkt mit der höchsten Priorisierung erhält zuerst eine Stromzuteilung.
2. Zuteilung des Lademodus-Sollstroms unter Berücksichtigung des Lastmanagements: Der verfügbare Strom wird unter allen Ladepunkten mit der gleichen Priorisierung aufgeteilt.
3. Zuteilung des Überschusses (falls vorhanden und Lademodus PV oder Zielladen) unter Berücksichtigung des Lastmanagements: Der verfügbare Strom wird unter allen Ladepunkten mit der gleichen Priorisierung aufgeteilt.

### Lastmanagement mit kaskadierten Zählern
<img src="kaskadierte_zaehler.png" width="500">

_Einstellungen -> Konfiguration -> Geräte und Komponenten_
Unter _Geräte und Komponenten_ müssen zunächst alle Zähler in der Anlage kofniguriert werden (bitte den Hilfetext in der Benutzeroberfläche zum Anlegen von Geräten und Komponenten beachten). Wenn an einer Zuleitung nur Ladepunkte oder Verbraucher mit einer festen Leistung angeschlossen sind und kein physischer Zähler verbaut ist, kann auch ein virtueller Zähler angelegt werden (Loadsharing). Ob ein Zähler als EVU-Zähler oder Zwischenzähler arbeitet, ergibt sich durch die Anordnung in der Struktur.
![Kaskadierte Zähler](kaskadierte_zaehler.png)

_Einstellungen -> Konfiguration -> Geräte und Komponenten_
Unter _Geräte und Komponenten_ müssen zunächst alle Zähler in der Anlage konfiguriert werden (bitte den Hilfetext in der Benutzeroberfläche zum Anlegen von Geräten und Komponenten beachten). Wenn an einer Zuleitung nur Ladepunkte oder Verbraucher mit einer festen Leistung angeschlossen sind und kein physischer Zähler verbaut ist, kann auch ein virtueller Zähler angelegt werden (Loadsharing). Ob ein Zähler als EVU-Zähler oder Zwischenzähler arbeitet, ergibt sich durch die Anordnung in der Struktur.

_Einstellungen -> Konfiguration -> Lastmamangement -> Struktur_
_Einstellungen -> Konfiguration -> Lastmanagement -> Struktur_
Bei der Konfiguration in der Abbildung sorgt das Lastmanagement dafür, dass Ladepunkt 2 und 3 gemeinsam nicht die maximale Stromstärke des Zwischenzählers "Virtueller Zähler" überschreiten. Außerdem berechnet das Lastmanagement die Ladeströme so, dass der virtuelle Zähler, Ladepunkt 1 und die am EVU-Zähler gemessene Stromstärke und Leistung die vorgegebene maximale Leistung und Stromstärke des EVU-Zählers einhalten.

### Virtuelle Zähler
Ein virtueller Zähler addiert alle Komponenten, die in der Hierachie unterhalb dessen angeordnet sind, und die Leistung, die in den Einstellungen unter _zusätzlicher Verbrauch_ angegeben ist. Wenn sich mehrere Ladepunkte eine Zuleitung teilen (Loadsharing), muss ein virtueller Zähler konfgiuriert werden und in der Hierachie über den beiden Ladepunkten angeordnet werden. In der Abbildung sind das Ladepunkt 2 und 3.

Ein virtueller Zähler addiert alle Komponenten, die in der Hierarchie unterhalb dessen angeordnet sind, und die Leistung, die in den Einstellungen unter _zusätzlicher Verbrauch_ angegeben ist. Wenn sich mehrere Ladepunkte eine Zuleitung teilen (Loadsharing), muss ein virtueller Zähler konfiguriert werden und in der Hierarchie über den beiden Ladepunkten angeordnet werden. In der Abbildung sind das Ladepunkt 2 und 3.
10 changes: 6 additions & 4 deletions docs/Neues Gerät programmieren.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
Um die Programmierung neuer Geräte zu erleichtern, findet Ihr unter [docs/samples](https://github.com/openWB/core/tree/master/docs/samples?v30-12-2022) drei Muster:

1. sample_modbus: Für Geräte, die per Modbus abgefragt werden. Dazu wird im Gerät ein Modbus-Client instanziiert, der dann an die Komponenten übergeben wird.
2. sample_request_per_component: Für Geräte, die per Http-Request abgefragt werden (lokal oder übers Internet) und bei denen jede Komponente eine eigene URL hat.
3. sample_request_per_device: Für Geräte, die per Http-Request abgefragt werden (lokal oder übers Internet) und bei denen alle Daten über eine URL abgefragt und dann je Komponente aus der Antwort geparst werden müssen.
Expand All @@ -7,15 +8,16 @@ Die Muster sind nur als einheitlicher Ausgangspunkt zu verstehen! Es kann durcha

Nachdem Ihr das Muster, das am besten zu Eurem Gerät passt, ausgewählt habt, kopiert Ihr dieses in den _packages/modules/devies/\*Gerätename\*_-Ordner. Ordnername und Typ in config.py->Sample->type müssen identisch sein, damit das Gerät in der automatisch generierten Auswahlliste im UI angezeigt wird.
Wenn das Gerät nicht alle Komponenten unterstützt, löscht Ihr die nicht unterstützten Komponenten und die Referenzen darauf in config.py und device.py.
Wenn von der Komponente die Zählerstände für Import und Export gelesen werden können, können die Zeilen für simcount entfernt werden.
Wenn von der Komponente die Zählerstände für Import und Export gelesen werden können, können die Zeilen für simcount entfernt werden.

Bei Hybrid-Systemen erfolgt die Verrechnung von Speicher-und PV-Leistung automatisiert, wenn Speicher und Wechselrichter in der Hierachie wie [hier](https://github.com/openWB/core/wiki/Hybrid-System-aus-Wechselrichter-und-Speicher) beschrieben angeordnet sind. Wenn noch weitere spezifische Berechnungen erforderlich sind, müsst Ihr die Komponenten wie unter sample_request_per_device abfragen. Die update-Methode der Komponenten wird dann in eine get- und set-Methode aufgeteilt. Die get-Methode liefert den Component-State zurück, dieser wird in der update_components-Methode des Geräts verrechnet und dann die set-Methode der Komponente aufgerufen, die die store-Methode der Komponente aufruft.
Bei Hybrid-Systemen erfolgt die Verrechnung von Speicher-und PV-Leistung automatisiert, wenn Speicher und Wechselrichter in der Hierarchie wie [hier](https://github.com/openWB/core/wiki/Hybrid-System-aus-Wechselrichter-und-Speicher) beschrieben angeordnet sind. Wenn noch weitere spezifische Berechnungen erforderlich sind, müsst Ihr die Komponenten wie unter sample_request_per_device abfragen. Die update-Methode der Komponenten wird dann in eine get- und set-Methode aufgeteilt. Die get-Methode liefert den Component-State zurück, dieser wird in der update_components-Methode des Geräts verrechnet und dann die set-Methode der Komponente aufgerufen, die die store-Methode der Komponente aufruft.

Das Speichern, Runden, Loggen und eine Plausibilitätsprüfung der Werte erfolgt zentral und muss daher nicht in jedem Modul implementiert werden.

Wenn keine Einstellungsseiten in vue hinterlegt sind, sind die Einstellungen als json-Objekt editierbar.

### Kompatibilität mit 1.9
Damit das Modul auch unter 1.9 lauffähig ist, müssen -wie bisher- die unter [docs/legacy](https://github.com/openWB/core/tree/master/docs/samples/legacy?v30-12-2022) angegebenen Ordner erstellt werden und das Modul im UI hinzugefügt werden. Aufßerdem muss in der device.py die read_legacy-Funktion so implementiert werden, dass anhand des übergebenen Komponenten-Typs das Update der entsprechenden Komponente getriggert wird. Beim zentralen Speichern der ausgelesenen Werte wird automatisch erkannt, ob diese in die ramdisk (1.9) oder in den Broker (2.x) geschrieben werden müssen.

_Bei Fragen programmiert Ihr das Gerät erstmal, wie Ihr es versteht, und erstellt einen (Draft-)PR. Wir unterstützen Euch gerne per Review._
Damit das Modul auch unter 1.9 lauffähig ist, müssen -wie bisher- die unter [docs/legacy](https://github.com/openWB/core/tree/master/docs/samples/legacy?v30-12-2022) angegebenen Ordner erstellt werden und das Modul im UI hinzugefügt werden. Außerdem muss in der device.py die read_legacy-Funktion so implementiert werden, dass anhand des übergebenen Komponenten-Typs das Update der entsprechenden Komponente getriggert wird. Beim zentralen Speichern der ausgelesenen Werte wird automatisch erkannt, ob diese in die ramdisk (1.9) oder in den Broker (2.x) geschrieben werden müssen.

_Bei Fragen programmiert Ihr das Gerät vorerst, wie Ihr es versteht, und erstellt einen (Draft-)PR. Wir unterstützen Euch gerne per Review.
Loading