Feature #139
Von Julius Haman vor 5 Tagen aktualisiert
Geräteübersicht: Die Übersicht soll nicht mehr automatisch alle gespeicherten Geräte prüfen. Zur Wahl stehen: gar nicht mehr automatisch prüfen, sondern **nur nur das in der Liste ausgewählte Gerät** (Entscheidung 08.10.2026). Andere Geräte haben keinen Live-Status mehr. aktuell gewählte Gerät prüfen oder nur auf Knopfdruck prüfen. **Entscheidung steht aus**, ob und wann das Ticket umgesetzt wird. ### Hintergrund Die Geräteübersicht prüft alle gespeicherten Geräte auf Erreichbarkeit. Nicht erreichbare Geräte, zum Beispiel ein BLE-Pulsmesser, der gerade nicht sendet, werden dabei im Sekundentakt erneut versucht. Beim Test mit dem HRM200 und der nicht sendenden Instinct 2X Solar am 08.10.2026 zeigte das Log: * Mehrere BLE-Pulsmesser werden gleichzeitig angesprochen. Die Instinct (`FAD7BDDCB983`) war dauerhaft "nicht erreichbar" und wurde etwa alle 6 Sekunden neu versucht (jeweils 5 Sekunden Wartezeit auf ein Advertisement), auch noch nachdem der HRM200 (`EA10D2AFDBB8`) verbunden war. * BLE-Verbindungszeiten des HRM200: Advertisement nach 0,5 s bzw. 3,2 s, verbunden mit Notifications nach 3,8 s, ein Versuch mit "Heart-Rate-Service nicht gefunden (Unreachable)" nach 10,9 s mit Wiederholung. Die ANT+-Suche desselben Gurts findet ihn in etwa 0,1 s. * **Nicht belegt:** ob die parallele Prüfung der übrigen Geräte den Verbindungsaufbau des aktuellen Geräts bremst. Das Log erlaubt keine Aussage dazu. Messwert für einen Vergleich vorher/nachher wäre die Zeit bis "Verbunden" im Log. ### Optionen * **Nicht mehr automatisch prüfen.** Keine Parallelversuche. In der Übersicht ist nicht mehr zu sehen, ob ein Gerät in Reichweite ist. * **Nur das aktuell gewählte Gerät prüfen.** Eine Verbindung, Statusanzeige bleibt für das gewählte Gerät. Andere Geräte haben keinen Status. * **Prüfung nur auf Knopfdruck.** Der Nutzer entscheidet, ein Klick mehr. ### Analyse (Code, 08.10.2026) Offen * Die Welcher Programmteil die Prüfung läuft genau durchführt (Geräteübersicht in `DevicesViewModel.StartBleMonitors()` (Geräteübersicht): pro BLE-Pulsmesser-Zeile eine dauerhafte GATT-Verbindung mit Retry-Schleife (`RunBleMonitorAsync`) plus 1-s-Statustimer. * Beim Trainingsstart (`FreiesTrainingRunning`) und beim "Testen" werden alle Monitore gestoppt (ein Pulsmesser nimmt nur eine Central-Verbindung an). `StopBleMonitor` → `BlePulsmesser.CloseConnection()` führt pro Monitor `GC.Collect()` + `WaitForPendingFinalizers()` auf dem UI-Thread aus. * Das Stoppen den Einstellungen und/oder Geräteauswahl-Fenster), ist in diesem Ticket nicht graceful: `Cts.Cancel()` wartet nicht auf das Ende von `RunBleMonitorAsync`, und `EstablishConnectionAsync` prüft das Token nach den `await`s nicht. Steckt ein Monitor gerade im Verbindungsaufbau, kann er nach dem Stoppen noch eine Verbindung anlegen, die die Uhr belegt und Test/Training blockiert, bis untersucht. Vor der Finalizer sie abräumt. * Dass die Parallelprüfung den Verbindungsaufbau tatsächlich bremst, ist weiterhin nicht gemessen (siehe oben). ### Umsetzung klären. * Nur das ausgewählte Pulsmesser-Gerät dauerhaft verbinden (ein Monitor); bei Auswahlwechsel alten Monitor stoppen, neuen starten. * Stoppen sauber: Token-Prüfung nach jedem `await` im Verbindungsaufbau, vor dem Schließen auf das Ende des Monitors warten, `GC.Collect()` nicht mehr auf dem UI-Thread. * Betrifft BLE (Pulsmesser, Ergometer). Bei ANT+ ist die Geräteübersicht (`DevicesViewModel`). Das Geräteauswahl-Fenster (`DeviceFinderViewModel`) ist nicht Teil dieses Tickets. * Messwert vorher/nachher: Zeit bis "Verbunden" im Log. Suche billig (Broadcast) und braucht keine Änderung.