Kühlbox: weniger Piepen, Diagnose zum Weitergeben

Dein Befund grenzt es ein: die Solltemperatur lässt sich stellen, also
kommen Schreibvorgänge an. Es scheitert nur am Einstellungsblock.

Das mehrfache Piepen war meine Schuld. Beantwortet die Box die Anmeldung
nicht, habe ich sie vor jedem Stellbefehl erneut angemeldet - und die Box
quittiert jede Anmeldung mit einem Ton. Jetzt geschieht das höchstens
einmal je Verbindung.

Weiter komme ich nicht ohne die Antwort deiner Box. Ihre Länge entscheidet
darüber, wie lang der Stellbefehl sein muss, und sie steht jetzt als
"Statusdaten der Box" in der Diagnose. Dazu ein Knopf, der alles zusammen
in die Zwischenablage legt - Merkmalsbaum, Weg, Schreibart, letzten Befehl
und letzte Antwort. Das abzutippen wäre zuviel verlangt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
BiasF
2026-08-31 09:08:43 +02:00
co-authored by Claude Opus 5
parent 8b1e2ac39d
commit 8f8edb137b
3 changed files with 60 additions and 3 deletions
+12 -3
View File
@@ -95,6 +95,9 @@ final class BMSSession: NSObject {
/// teils auch unangemeldet an, Stellbefehle nicht deshalb wird vor
/// einem Befehl notfalls noch einmal angemeldet.
private(set) var bindAcknowledged = false
/// Ob vor einem Stellbefehl schon einmal nachgemeldet wurde. Jedes Mal
/// anzumelden lässt die Box bei jedem Tastendruck erneut piepen.
private var didRebindForControl = false
private var buffer: [UInt8] = []
private var pollTimer: DispatchSourceTimer?
private var lastResponse: Data?
@@ -257,6 +260,7 @@ final class BMSSession: NSObject {
didUnlock = false
didBind = false
bindAcknowledged = false
didRebindForControl = false
buffer.removeAll()
activationToken += 1
let token = activationToken
@@ -486,9 +490,12 @@ final class BMSSession: NSObject {
return
}
// Hat die Box die Anmeldung nie beantwortet, wird sie hier nachgeholt.
// Ein Stellbefehl an eine unangemeldete Box wird sonst verworfen.
guard bindAcknowledged else {
// Hat die Box die Anmeldung nie beantwortet, wird sie einmal je
// Verbindung nachgeholt. Ein Stellbefehl an eine unangemeldete Box
// wird sonst womöglich verworfen - jedes Mal anzumelden lässt die Box
// aber bei jedem Tastendruck zusätzlich piepen.
guard bindAcknowledged || didRebindForControl else {
didRebindForControl = true
send(AlpicoolProtocol.packet(.bind))
queue.asyncAfter(deadline: .now() + 0.4) { [weak self] in
self?.deliverControl(packet, attempt: 0)
@@ -671,6 +678,8 @@ final class BMSSession: NSObject {
isBound: dialect == .alpicool ? bindAcknowledged : nil,
confirmedWrites: confirmedWrites,
lastWriteError: lastWriteError,
fridgePayloadHex: alpicoolState.lastPayload.isEmpty ? nil
: alpicoolState.lastPayload.map { String(format: "%02X", $0) }.joined(separator: " "),
gattSummary: gattSummary,
sentFrames: sentFrameCount,
receivedBytes: receivedByteCount,