Bluetooth-Reiter in der Web UI

Ich finde den Web-Reiter vom Bluetooth nicht so schick. Deswegen habe ich ein bissel rumexperimentiert.
Bei mir schaut das jetzt so aus. Ich glaube ich muss das noch ein bissel aufräumen aber für meinen Geschmack ist das Vorzeigbar.

  • Es ist jetzt ein Toggle zwischen Aus ↔ Kopfhörer ↔ Lautsprecher (das läuft rein durch Änderungen der Management)
  • Eine Anzeige, mit welchem Gerät man verbunden ist und ob man verbunden ist (Da müssen mehr Dateien angepasst werden)

Gibt es da Einwände oder andere Vorstellungen? Aber wie gesagt, ich muss das noch mal aufräumen, bevor das zum PR taugt

Sieht auf jeden Fall ordentlich aus. Funktionell müssen das diejenigen bewerten, die BT nutzen :slight_smile:.

Okay…
ChatGPT hat dann im Codereview ziemlich freigedreht und 8 Dateien verändert. Besonders die Änderungen in der Bluetooth.cpp sind recht umfangreich. Das will keiner wahrscheinlich Reviewn - obwohl das läuft :frowning:

ich glaube ich ändere erst mal die UI ohne den Verbindungsstatus. Das wäre dann nur die management und die locales

Okay, ich habe jetzt aus dem ganzen ein PR erstellt. Jetzt sind da leider mehrere Dinge fürs Bluetooth drin.

BITTE testet das mal, damit ich das nachbessern kann bzw. wir das in den DEV übernehmen können

Improve Bluetooth status, scanning, reconnect handling and web UI by joker-mik · Pull Request #461 · biologist79/ESPuino

Bluetooth-Verwaltung und Verbindungsstatus überarbeitet

Ich habe die Bluetooth-Funktionen und die dazugehörige Weboberfläche etwas grundlegend überarbeitet. Ziel war vor allem, die Bedienung verständlicher zu machen und die Verbindungsverwaltung im Bluetooth-Source-Modus robuster zu gestalten.

Bisher war insbesondere beim Verbinden, Wechseln und Wiederverbinden von Bluetooth-Kopfhörern nicht immer eindeutig, was das Gerät gerade macht. Außerdem gab es einige Fälle, in denen Scan-, Retry- und Verbindungsstatus nicht sauber voneinander getrennt waren.

Weboberfläche

Der Bluetooth-Bereich im Webinterface wurde überarbeitet. Die verschiedenen Betriebsarten sind jetzt klarer voneinander getrennt:

  • Normalbetrieb
  • Bluetooth Source, z. B. für Bluetooth-Kopfhörer
  • Bluetooth Sink

Für den Source-Modus wird außerdem der aktuelle Verbindungsstatus angezeigt. So ist direkt im Webinterface erkennbar, ob gerade eine Verbindung besteht.

Die Geräteliste und die Scan-Bedienung wurden ebenfalls überarbeitet. Dabei wurde auch das Verhalten auf kleineren Displays bzw. Smartphones verbessert.

Die neuen Texte wurden für Deutsch, Englisch und Französisch ergänzt.

Bluetooth-Scan

Das Scannen nach Bluetooth-Geräten wurde robuster gemacht. Scan-Zustand und Callback-Verwaltung werden jetzt expliziter behandelt, damit sich ein manueller Scan aus dem Webinterface nicht mit der normalen A2DP-Verbindungslogik in die Quere kommt.

Nach einem manuellen Scan wird der ursprüngliche Bluetooth-Callback wiederhergestellt.

Verbinden und Gerätewechsel

Auch die Verbindungslogik wurde überarbeitet.

Beim Wechsel von einem bereits verbundenen Gerät zu einem anderen wird die bestehende Verbindung zunächst gezielt beendet und anschließend die neue Verbindung aufgebaut.

Wichtig war dabei, einen absichtlich ausgelösten Disconnect nicht fälschlicherweise als fehlgeschlagenen Verbindungsversuch zu zählen.

Retry-Verhalten

Die Retry-Zählung wurde korrigiert.

Ein Retry wird jetzt nur dann gezählt, wenn tatsächlich ein neuer Verbindungsversuch gestartet wird. Doppelte oder verspätete DISCONNECTED-Events verbrauchen damit nicht mehr versehentlich zusätzliche Retry-Versuche.

Der Ablauf ist jetzt sinngemäß:

erster Verbindungsversuch
→ Retry 1/3
→ Retry 2/3
→ Retry 3/3
→ Abbruch

Die zugehörigen Zustände werden nach erfolgreicher Verbindung oder nach endgültigem Abbruch wieder sauber zurückgesetzt.

Fix für Auto-Reconnect und laufende Bluetooth-Discovery

Bei den Tests ist noch ein weiteres Problem aufgefallen.

Wenn ein bereits gekoppelter Bluetooth-Kopfhörer ausgeschaltet und später wieder eingeschaltet wurde, konnte sich ESPuino automatisch wieder verbinden. Im Log waren nach dem erfolgreichen Reconnect aber weiterhin über längere Zeit Meldungen wie

Bluetooth source => Device found: ...

zu sehen. Und die Wiedergabe ruckelte.

Die Ursache war, dass die A2DP-Bibliothek während des Auto-Reconnects eine eigene GAP-Discovery starten kann. Diese Discovery wurde von unserem bisherigen scanInProgress-Status nicht erfasst, weil dieser nur den manuellen Scan aus dem Webinterface abbildet.

Dadurch konnte die Discovery auch dann weiterlaufen, wenn die A2DP-Verbindung bereits wieder hergestellt war und die Audiowiedergabe schon begonnen hatte.

Das wurde geändert: Sobald eine Bluetooth-Source-Verbindung erfolgreich hergestellt wurde, wird eine eventuell noch laufende GAP-Discovery beendet.

Der manuelle Web-Scan benutzt weiterhin den bisherigen vollständigen Cleanup-Pfad, damit UI-Zustand und Callbacks korrekt zurückgesetzt werden.

Test

Getestet wurde unter anderem folgender Ablauf:

Bluetooth-Kopfhörer verbinden
→ Kopfhörer ausschalten
→ Disconnect abwarten
→ Kopfhörer wieder einschalten
→ automatischer Reconnect
→ Wiedergabe fortsetzen

Vor der Änderung lief die Bluetooth-Discovery nach dem Reconnect teilweise noch weiter.

Nach dem Fix wird sie mit erfolgreicher Verbindung beendet. In meinem Test lief der Reconnect damit sauber und die vorher beobachteten Device found-Meldungen nach erfolgreicher Verbindung traten nicht mehr auf.

Sonstiges

Zusätzlich wurden die REST-API-Dokumentation und die Übersetzungen angepasst.

Der Bluetooth-Verbindungsstatus wird im Webinterface nur abgefragt, wenn sich das Gerät im Bluetooth-Source-Modus befindet und der Bluetooth-Tab geöffnet ist. Dadurch entsteht im normalen Betrieb kein permanentes zusätzliches Polling.

Puh, ganz schön viel, sieht aber erstmal brauchbar aus. Werde versuchen die nächsten Tage mal dazu zu kommen, kann aber vor dem Wochenende nichts versprechen…

Ich weiß, das ist der fluch, wenn man was baut und dann die KI zum check ansetzt.
bla bla bla aber da sehe ich noch bedarf und da und da…und dann ist an so vielen Stellen was geändert.

Bei mir läuft das bisher ohne Probleme.
Außer M4a-Dateien, da stürzt der kleine ab aber das passiert auch mit dem alten Stand, da ist der Speicher einfach am Ende

Jetzt mit dem Lautstärke fix scheint es zu passen. Ist auf jeden Fall ein guter Schritt in die richtige Richtung :slight_smile: .
Von mir her ist es approved…