forked from fritob/Camper-Monitor
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>