Projekt

Allgemein

Profil

Feature #44

Von Julius Haman vor 15 Tagen aktualisiert

### Problem 

 Der Sollwert eines Profils landet aktuell für drei unterschiedliche Größen in derselben Spalte `ProfileHeight`: 

 | Profiltyp | Was `ProfileHeight` heute enthält | 
 |---|---| 
 | topographisch | Höhe in m | 
 | Leistungsprofil | Soll-Leistung in W | 
 | Pulsprofil | Sollpuls in bpm | 

 Solleistung hat mit `Power` zwar schon ein eigenes Feld, Sollpuls dagegen nicht - der steckt nur indirekt in `ProfileHeight`. 

 ### Vorschlag: TrainingPoint-Spalten umbenennen/ergänzen 

 | Alt | Neu | Bedeutung | 
 |---|---|---| 
 | `Frequency` | `Cadence` | Ist-Trittfrequenz | 
 | `Pulse` | `ActualPulse` | Ist-Puls | 
 | `Power` | `TargetPower` | Soll-Leistung (ans Ergometer gesendet) | 
 | `PowerActual` | `ActualPower` | Ist-Leistung | 
 | `Position` | `Distance` | Ist-Distanz in m | 
 | `ProfileHeight` | aufgeteilt in `Elevation` (nur topographisch, m) und `TargetPulse` (nur Pulsprofil, bpm) | siehe oben | 
 | `ProfilePosition` | entfällt bzw. wird `ProfileMinutes` (nur Puls-/Leistungsprofil) - bei topographisch identisch mit `Distance`, daher dort redundant | | 
 | `ProfileFinished` | bleibt | | 
 | *(neu)* | `Speed` | Ist-Geschwindigkeit in m/s | 
 | *(neu)* | `Latitude` / `Longitude` | GPS, nullable | 

 Mit `TargetPower`/`ActualPower` und `TargetPulse`/`ActualPulse` ergibt sich ein konsistentes Namensschema statt der bisherigen Mischung aus `Power`/`PowerActual`/`ProfileHeight`. 

 `ProfilePosition` speichert je nach Profiltyp etwas anderes, und bei einer der beiden Varianten ist der Wert schlicht eine Doppelung von `Distance`. 

 Stelle, an der der Wert gesetzt wird (`FreiesTrainingWindowViewModel.cs:1108`): 

 ```csharp 
 profilePosition = Profile.ProfileType == ProfileType.Topographic 
     ? distanceMeters 
     : ergoRunningElapsedCounter / 60m; 
 ``` 

 - **Topographisches Profil:** `ProfilePosition` = `distanceMeters` - also exakt derselbe Wert, der im selben Trainingspunkt auch in `Position` (künftig `Distance`) landet. Zwei Spalten, ein Wert. Beispiel: bei 500 m gefahrener Strecke stehen sowohl in `Position` als auch in `ProfilePosition` 500. 
 - **Leistungs-/Pulsprofil:** `ProfilePosition` = verstrichene **Minuten** seit Trainingsstart (`ergoRunningElapsedCounter / 60m`). Das ist eine völlig andere Einheit (Zeit statt Strecke) und wird gebraucht, weil `Profile.GivenPowerAt(minuten)`/`GivenPulseAt(minuten)` die X-Achse des Profils in Minuten erwartet, nicht in Metern. 

 Vorschlag: 
 - Bei topographisch: Feld **weglassen**, da redundant zu `Distance`. 
 - Bei Leistungs-/Pulsprofil: Feld **behalten, aber umbenennen** in `ProfileMinutes`, weil dort tatsächlich ein eigenständiger, sinnvoller Wert drinsteht (die Zeitposition auf der Profilkurve, unabhängig von der gefahrenen Strecke). 

 Damit gibt es eine Spalte, die nur noch in dem einen Fall existiert, wo sie wirklich eine eigene Bedeutung hat, statt einer Spalte, die mal Meter, mal Minuten bedeutet.

Zurück