Projekt

Allgemein

Profil

Fehler #129

Von Julius Haman vor 9 Tagen aktualisiert

Wird das Ergometer während eines Trainings abgezogen, stürzt die App ab. 

 ### Befund (Protokoll ErControl3-20261004.log, Kettler seriell) 
 * Der Poll-Tick (`HandlePollTick`) ruft `Ergometer.SendAndReceive`/`Receive` auf dem UI-Thread auf. Nach dem Abziehen meldet der serielle Port „The port is closed“, `KettlerErgometer.ReadLine` wirft `ReceiveDataException`. 
 * Niemand fängt die Ausnahme: Sie läuft aus dem Dispatcher-Callback und wird als „Unbehandelte Ausnahme im UI-Thread“ (FTL) protokolliert, die App beendet sich. Eine Aufzeichnung wird nicht sauber abgeschlossen. 
 * Vermutlich kein neues Verhalten durch #127 (die Ausnahme entstand vorher genauso), aber erst durch den Test aufgefallen. 

 ### Gewünschtes Verhalten 
 * Ein Fehler beim Abfragen des Ergometers beendet die App nicht. Der Tick fängt ihn ab und protokolliert ihn (ohne Log-Flut bei jedem Tick). 
 * Solange keine Verbindung besteht, versucht die App in regelmäßigen Abständen (z.B. alle paar Sekunden) die Verbindung neu aufzubauen, ohne UI-Thread zu blockieren, und setzt das Training fort, sobald das Gerät wieder antwortet. 
 * Anzeige im Verbindungsverlust: statt eingefrorener Werte ein deutlich erkennbarer Hinweis, z.B. ein Momentanwert (etwa die Leistung) mit rotem Hintergrund und weißer Schrift. 
 * Währenddessen zählt die Trainingszeit nicht als Fahrzeit weiter bzw. es werden keine Trainingspunkte mit veralteten Werten aufgezeichnet (genaues Verhalten festlegen: Uhr pausieren wie im Stillstand). 

 ### Offen 
 * Gilt auch für BLE (FTMS) und ANT+ 
 Ein Kabel gibt es FE-C; dort nicht, der Verhalten bei Verbindungsverlust (Gerät aus, außer Reichweite, Dongle abgezogen) tritt aber genauso auf, nur ohne Absturz: Beide liefern die Daten per Push, `Receive()`/`SendAndReceive()` geben nach dem Abbruch still weiter den zuletzt empfangenen Wert zurück. Die Uhr liefe weiter, und es würden Trainingspunkte mit eingefrorenen Werten aufgezeichnet. Erkennung deshalb über die Zeit seit dem letzten empfangenen Wert (mehr als 5 s Stille gilt als Verlust). 

 ### Umsetzung prüfen. 
 * `IErgometer.DataAge` (Standard null): Zeit seit dem letzten empfangenen Wert. BLE (Indoor-Bike-Data-Notification) und ANT+ (FE-C-Telemetrie) setzen den Zeitstempel; das Die serielle Gerät braucht ihn nicht, dort meldet der Verlust eine `ReceiveDataException`. Verbindungslogik in `KettlerErgometer` bleibt unverändert. 
 * Poll-Tick fängt `ReceiveDataException` ab (kein Absturz) ist seit Jahren an echter Hardware eingestellt und wertet `DataAge` aus; beides setzt den Zustand „Verbindung verloren“ (`ErgometerConnectionLost`). 
 * `ErgometerReconnector` versucht im Hintergrund wiederholt (alle 2 s), die Verbindung aufzubauen, über die vorhandenen Schnittstellen: seriell `EstablishConnection` (Port des aktiven Geräts, 57600/9600 Baud), BLE `EstablishConnectionAsync` (bekannte Adresse bzw. Suche). ANT+ braucht keinen eigenen Aufbau, der AntInterface-Prozess pairt den Kanal selbst; der Wiederbezug zeigt sich an frischen Daten. Während des Wiederverbindens wird das Gerät soll nicht abgefragt. 
 * Solange die Verbindung fehlt, steht die Trainingsuhr, es wird nichts aufgezeichnet; die Ausfallzeit zählt weder als Fahrzeit noch für die Distanz (Uhr-Basis wird beim Wiederkehren neu gesetzt). verändert werden. Das Training läuft danach ohne Zeitsprung weiter. 
 * Anzeige: Die Leistungskachel (Momentanwert) erscheint mit rotem Hintergrund und weißer Schrift. 
 * Beim Schließen des Trainingsfensters wird ein laufendes Wiederverbinden zuerst abgebrochen. 

 ### Offen nutzt nur die vorhandene Schnittstelle (`CloseConnection` / Verbindungsaufbau) von außen, am besten hinter `IErgometer`. 
 * Test nur mit echter Hardware sinnvoll: Kabel sinnvoll (Gerät im Training ziehen abziehen und wieder anstecken (seriell), BLE-Gerät aus-/einschalten, ANT+-Dongle abziehen. 
 * Nicht geprüft: ob ein abgezogener ANT+-Dongle vom AntInterface-Prozess selbstständig wieder aufgenommen wird. Der Prozess wird nicht neu gestartet; bleibt er tot, bleibt die Anzeige rot, bis das Training beendet wird. 
 * Die serielle Verbindungslogik in `KettlerErgometer` ist seit Jahren an echter Hardware eingestellt und bleibt unverändert. anstecken). 

Zurück