import Foundation /// Der zuletzt bekannte Stand einer Kühlbox – ohne Messwerte. /// /// Die Box wird nur noch verbunden, während man ihre Ansicht offen hat: Jede /// Verbindung meldet sich an ihrem Display an und stört, wer sie gerade /// bedient. Auf der Übersicht steht deshalb, was zuletzt **eingestellt** war. /// /// Messwerte gehören bewusst nicht dazu. Eine Innentemperatur von vorgestern /// sähe aus wie eine von jetzt, und man würde ihr glauben – eine Solltemperatur /// dagegen ändert sich nur, wenn jemand sie ändert. struct FridgeSettings: Codable, Equatable, Sendable { var isPoweredOn: Bool var isEco: Bool var isLocked: Bool var isDualZone: Bool var usesFahrenheit: Bool var leftTarget: Int? var rightTarget: Int? /// Wann dieser Stand von der Box kam. var updated: Date var unitSymbol: String { usesFahrenheit ? "°F" : "°C" } /// In Worten, wie es auf der Kachel steht. var stateText: String { guard isPoweredOn else { return "Aus" } return isEco ? "Eco" : "Max" } /// Was die Übersicht zeigt: die Sollwerte, sonst nichts. func snapshot(deviceID: UUID) -> DeviceSnapshot { var snapshot = DeviceSnapshot(deviceID: deviceID, timestamp: updated, rssi: nil) var metrics = [ Metric("target_left", isDualZone ? "Soll links" : "Solltemperatur", leftTarget.map(Double.init), unit: unitSymbol, precision: 0, primary: true), ] if isDualZone { metrics.append(Metric("target_right", "Soll rechts", rightTarget.map(Double.init), unit: unitSymbol, precision: 0)) } snapshot.metrics = metrics snapshot.state = stateText if isLocked { snapshot.offReasons = ["Bedienfeld gesperrt"] } return snapshot } }