forked from fritob/Camper-Monitor
Kühlbox: Stellbefehl passend zur Zonenzahl, Schalter ohne Rückfrage
Ausschalten blieb wirkungslos. Zwei Ursachen, beide behoben. Die Länge des Einstellungsblocks hing an der Länge des empfangenen Datensatzes statt an der Zonenzahl. Einzonen-Boxen, die den langen Datensatz trotzdem senden, bekamen so einen 25-Byte-Block für zwei Zonen und nahmen ihn offenbar nicht an. Jetzt entscheidet die erkannte Zonenzahl: eine Zone ergibt 20 Byte und passt damit ohne Aufteilen in einen Schreibvorgang. Der Bestätigungsdialog beim Ausschalten hing an einer Section, und dort zeigt SwiftUI ihn nicht zuverlässig an - der Schalter tat dann gar nichts. Ein und Aus laufen jetzt beide direkt über denselben Weg, ohne Rückfrage. Die Diagnose zeigt zusätzlich den zuletzt abgeschickten Stellbefehl mit Zeitstempel, damit sich unterscheiden lässt, ob ein Befehl das Gerät nicht erreicht oder von ihm verworfen wird. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -530,6 +530,12 @@ checkEqual("leerer zweiter Block gilt nicht als zweite Zone", padded.isDualZone,
|
||||
// 20 Byte noch in einen Schreibvorgang, aus dem langen nicht mehr. Ohne
|
||||
// Aufteilen verwirft die Box ihn wortlos – genau das war der Fehler.
|
||||
checkEqual("Stellbefehl aus dem kurzen Datensatz", offBytes.count, 20)
|
||||
// Eine als einzonig erkannte Box bekommt auch nur den kurzen Befehl,
|
||||
// obwohl sie den langen Datensatz sendet.
|
||||
checkEqual("kurzer Stellbefehl bei einzoniger Box",
|
||||
padded.settingsCommand(poweredOn: false)?.count, 20)
|
||||
|
||||
padded.zoneMode = .dual
|
||||
guard let longPacket = padded.settingsCommand(poweredOn: true) else {
|
||||
check("Stellbefehl aus dem langen Datensatz wird gebaut", false); exit(1)
|
||||
}
|
||||
@@ -543,6 +549,7 @@ checkEqual("zusammengesetzt ergibt sich das Original",
|
||||
checkEqual("kurze Pakete bleiben ungeteilt",
|
||||
AlpicoolProtocol.chunks(AlpicoolProtocol.packet(.query), limit: 20).count, 1)
|
||||
checkEqual("Einschaltbyte im langen Befehl", [UInt8](longPacket)[5], 0x01)
|
||||
padded.zoneMode = .automatic
|
||||
checkEqual("Hauptwert heisst dann schlicht Temperatur",
|
||||
padded.snapshot(deviceID: UUID(), rssi: nil)
|
||||
.metrics.first { $0.key == "temp_left" }?.label, "Temperatur")
|
||||
|
||||
Reference in New Issue
Block a user