Projekt

Allgemein

Profil

Fehler #130

Von Julius Haman vor 9 Tagen aktualisiert

Verliert ein Pulsmesser während des Trainings die Verbindung, wird das nicht erkannt und nicht gemeldet. Folgeticket zu #129 (Ergometer). 

 ### Befund (Code gelesen, nicht an Hardware geprüft) 
 * **BLE-Pulsmesser (`BlePulsmesser`):** Die Klasse kennt `IsAlive(maxAge)` und erkennt damit auch einen Pulsmesser, der einfach aufhört zu senden. Das Training wertet das aber nicht aus. Meldet Windows die Verbindung formal als getrennt, setzt `CloseConnection` den Puls auf null; dann gilt stillschweigend der Puls des Ergometers (`sourcePulse is null` in `DataSender_SendingData`), ohne Hinweis. Das Log zeigt vor dem Training ein Retry im Sekundentakt; ob ein Verlust mitten im Training neu verbunden wird, ist ungeprüft. 
 * **ANT+-Pulsmesser (HRM):** `antHrmPulse` wird bei jeder Telemetrie überschrieben, es gibt keinen Zeitstempel. Bleibt der Gurt weg, bleibt der letzte Wert stehen (eingefrorener Puls) - derselbe Fehlertyp wie bei BLE-Ergometer und ANT+ FE-C vor #129. 

 ### Auswirkung 
 Ein stehender oder stillschweigend ersetzter Puls fließt in Pulsanzeige, Pulsprofil-Regelung (die Leistung wird dann nach einem falschen Puls geregelt), Erholungspuls und die aufgezeichneten Trainingspunkte ein. 

 ### Lösungsansatz (noch nicht umgesetzt) 
 * Der Puls bekommt ein Alter (analog `IErgometer.DataAge` aus #129): Ist der letzte Wert älter als einige Sekunden, gilt der Pulsmesser als verloren. 
 * Im Verlustfall den Pulsmesser neu verbinden (BLE im Hintergrund wie `ErgometerReconnector`; ANT+ pairt der AntInterface-Prozess selbst). 
 * Anzeige: Pulskachel bei Verlust deutlich hervorgehoben (z.B. wie bei der Leistung roter Hintergrund, weiße Zahl und Einheit, Überschrift unverändert). 
 * Festlegen, was währenddessen aufgezeichnet wird (kein Puls bzw. 0 statt eingefrorenem Wert, kein stiller Rückfall auf den Ergometer-Puls ohne Hinweis) und wie sich die Pulsprofil-Regelung ohne Pulsmesser verhält (z.B. Leistung halten statt nachregeln). 

 ### Erholungspulsmessung 
 Auch die Erholungspulsmessung (Fitnessnote) muss prüfen, ob noch Werte ankommen. Heute liest der Dialog (`RecoveryPulseWindowViewModel`) bei jedem Tick `data.Pulse`; fällt die Pulsquelle weg, sieht er einen stehenden bzw. auf den Ergometer-Puls (meist 0) zurückgefallenen Wert und misst weiter, ohne dass es auffällt. Beobachtet an einem 30-Minuten-Training mit BLE-Pulsmesser (Garmin Instinct 2X Solar): Der Dialog erschien, zeigte aber offenbar keinen Puls, die Messung wurde nach etwa 43 s abgebrochen, es wurde kein Erholungspuls gespeichert. Die Ursache ist nicht belegt (der Puls kam bis zum letzten Trainingspunkt an, das Log enthält nichts dazu). 
 * Bleiben während der Messung die Pulswerte aus (gleiche Erkennung wie im Training: Alter des letzten Werts), wird der Pulswert im Dialog rot markiert (rote Fläche, weiße Schrift, Überschrift unverändert). 
 * Die Messuhr (60 s) stoppt, solange kein Puls ankommt, und läuft erst bei wiederkehrenden Werten weiter, damit keine Messung mit fehlenden bzw. falschen Werten abgeschlossen wird. 
 * Kein automatischer Abbruch, auch nicht bei sehr langem Ausfall: Der Dialog bleibt rot und die Uhr steht, bis wieder Werte kommen; abgebrochen wird nur über den Abbrechen-Button. 
 * Offen: Wird die Verbindung des Pulsmessers im Dialog ebenfalls neu aufgebaut? 
 * Zur Klärung künftiger Fälle: Das Log protokolliert jeden Wechsel der Pulsquelle (BLE-/ANT+-Pulsmesser zu Ergometer-Puls und zurück) mit Zeitpunkt. 

 ### Umsetzung 
 * Gilt nur für einen beim Start tatsächlich verbundenen externen Pulsmesser (BLE oder ANT+). Kommt der Puls vom Ergometer, gibt es weder Verlusterkennung noch Neuverbinden: die Verbindung zum Ergometer besteht ja. 
 * Verlust: keine Werte seit mehr als 5 s (BLE: `BlePulsmesser.DataAge`, ANT+: Zeitstempel des letzten Pulses). Dann ist `ErgometerData.PulseLost` gesetzt und der Puls 0, kein eingefrorener Wert und kein stiller Rückfall auf den Ergometer-Puls. Die Trainingspunkte erhalten Puls 0. 
 * BLE-Pulsmesser wird im Hintergrund neu verbunden (`EstablishConnectionWithRetryAsync`), frühestens alle 10 s erneut; der Versuch läuft auch während der Erholungspulsmessung, da er beim Training liegt. ANT+ pairt der AntInterface-Prozess selbst. Beim Schließen wird ein laufender Versuch abgebrochen. 
 * Pulsprofil: Bei verlorenem Puls wird nicht nachgeregelt, die zuletzt gesendete Leistung bleibt (auch im Simulator). 
 * Anzeige: Zahl und Einheit des Pulses mit rotem Hintergrund und weißer Schrift, Überschrift und Sollpuls unverändert. 
 * Erholungspulsmessung: Pulswert rot, die Messuhr (60 s) steht, solange keine Werte kommen, es wird nichts aufgezeichnet, kein automatischer Abbruch (nur per Button); bei wiederkehrenden Werten läuft sie weiter. 
 * Log: jeder Wechsel „Pulsmesser liefert keine Werte mehr“ und „liefert wieder Werte“ mit Zeitpunkt. 

 ### Offen 
 * Test nur mit echter Hardware sinnvoll (Brustgurt/Uhr abnehmen bzw. Bluetooth abschalten). 
 * Verhalten der Uhr-Broadcasts (Garmin Instinct), die nach einiger Zeit einschlafen, berücksichtigen (siehe Kommentar in `BlePulsmesser.IsAlive`). 

Zurück