Skip to content

Commit

Permalink
Merge pull request #1064 from benderl/wording
Browse files Browse the repository at this point in the history
Wording
  • Loading branch information
LKuemmel authored Aug 2, 2023
2 parents 9fc4802 + b1c6d6b commit 4b3ec21
Show file tree
Hide file tree
Showing 22 changed files with 78 additions and 72 deletions.
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.
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.
4 changes: 2 additions & 2 deletions docs/Neues Soc-Modul programmieren.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
Um die Programmierung neuer SoC-Module zu erleichtern, findet Ihr unter [docs/samples](https://github.com/openWB/core/tree/master/docs/samples?v30-12-2022) ein Muster _sample_vehicle_.

Die Muster sind nur als einheitlicher Ausgangspunkt zu verstehen! Es kann durchaus notwendig sein, weitere Einstellungs-Parameter hinzuzufügen oder bei einem Http-Request eine Authentifizierung durchzuführen. Beim Aufruf der _updater_-Funktion wird die Variable _soc_update_data_ übergeben. Darin sind aktuelle Daten aus der Regelung, wie zB Steckerstatus oder die geladene Energie seit Anstecken, enthalten, um Besonderheiten wie zB das Aufwecken des Fahrzeugs oder eine manuelle Berechnung während des Ladevorgangs umsetzen zu können.
Die Muster sind nur als einheitlicher Ausgangspunkt zu verstehen! Es kann durchaus notwendig sein, weitere Einstellungs-Parameter hinzuzufügen oder bei einem Http-Request eine Authentifizierung durchzuführen. Beim Aufruf der _updater_-Funktion wird die Variable _soc_update_data_ übergeben. Darin sind aktuelle Daten aus der Regelung, wie zB Stecker-Status oder die geladene Energie seit Anstecken, enthalten, um Besonderheiten wie zB das Aufwecken des Fahrzeugs oder eine manuelle Berechnung während des Ladevorgangs umsetzen zu können.

Das Muster kopiert Ihr in den _packages/modules/vehicles/\*Name\*_-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.

Das Speichern, Runden, Loggen und eine Plausibilitätsprüfung der Werte sowie die Prüfung, ob das Intervall zu SoC-Abfrage abgelaufen ist, erfolgt zentral und muss daher nicht in jedem Modul implementiert werden.

Wenn keine Einstellungsseite in vue für das SoC-Modul hinterlegt ist, sind die Einstellungen als json-Objekt editierbar.

_Bei Fragen programmiert Ihr das SoC-Modul erstmal, wie Ihr es versteht, und erstellt einen (Draft-)PR. Wir unterstützen Euch gerne per Review._
_Bei Fragen programmiert Ihr das SoC-Modul vorerst, wie Ihr es versteht, und erstellt einen (Draft-)PR. Wir unterstützen Euch gerne per Review.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Zunächst einen neuen Ordner erstellen/auswählen, in den die Sicherungen hochgeladen werden sollen.

1. Freigabe erstellen
2. Hochladen erlauben (oder file drop only)
3. Link kopieren

<img src="Nextcloud.png" width="900">
![NextCloud Ordner freigeben](NextCloud.png)
File renamed without changes
4 changes: 2 additions & 2 deletions docs/_Sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
* [Neues SoC-Modul programmieren](https://github.com/openWB/core/wiki/Neues-Soc-Modul-programmieren)
* Konfiguration
* [Cloud-Sicherung](https://github.com/openWB/core/wiki/Cloud-Sicherung)
* [Nextcloud](https://github.com/openWB/core/wiki/Nextcloud-als-Sicherungs-Cloud-einrichten)
* [Hierarchie mit Hausverbrauchs-Zähler](https://github.com/openWB/core/wiki/Hausverbrauchs-Zähler)
* [NextCloud](https://github.com/openWB/core/wiki/NextCloud-als-Sicherungs-Cloud-einrichten)
* [Hierarchie mit Hausverbrauchs-Zähler](https://github.com/openWB/core/wiki/Hausverbrauchs-Zähler)
Loading

0 comments on commit 4b3ec21

Please sign in to comment.