Files
Camper-Monitor/CamperMonitor
BiasFandClaude Opus 5 1ad476a963 Bluetooth auf eine eigene Queue legen
CoreBluetooth lief auf dem Hauptthread, also demselben, der die
Oberfläche zeichnet. Gescannt wird mit Duplikaten über alle Geräte in
Reichweite, weil Victron seine Werte im Advertisement mitschickt - jedes
einzelne davon kam als Rückruf dort an, samt Entschlüsselung und
Neuzeichnung. Das war die Ursache der trägen Bedienung.

CoreBluetooth arbeitet jetzt auf einer eigenen seriellen Queue. Daraus
folgt eine strikte Trennung:

* Verbindungen, Puffer und Zeitgeber werden ausschliesslich auf dieser
  Queue angefasst. Die Zeitgeber sind deshalb DispatchSourceTimer statt
  Timer, denn auf einer DispatchQueue gibt es keine RunLoop.
* Die veröffentlichten Werte werden ausschliesslich auf dem Hauptthread
  geschrieben, gebündelt über publish().
* Die Geräteliste wird nicht mehr aus der Funk-Queue heraus im Speicher
  nachgeschlagen. Stattdessen zieht refreshConfiguration auf dem
  Hauptthread eine Momentaufnahme - Kennung, Transportart, Zonenwahl und
  den bereits ausgelesenen Victron-Schlüssel - und reicht sie hinüber.
  Damit greift kein Hintergrundthread mehr auf den beobachteten Speicher
  zu.

Die Stellbefehle der Kühlbox bauen ihren Einstellungsblock ebenfalls auf
der Funk-Queue, weil der zugrundeliegende Zustand dort lebt.

Geprüft im Simulator: der Statuswechsel von CoreBluetooth kommt über die
Funk-Queue und erreicht die Anzeige korrekt, beide Startpfade laufen ohne
Absturz.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 14:39:43 +02:00
..
2026-08-30 10:36:52 +02:00