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 Festlegen: Was passiert bei sehr langem Ausfall: Der Dialog bleibt rot und die Uhr steht, bis wieder Werte kommen; abgebrochen wird nur über den Abbrechen-Button. * Offen: Ausfall (Abbruch mit Hinweis statt endlosem Warten)? 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. ### 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`).