forked from fritob/Camper-Monitor
Uhr: Neigungsmesser direkt, Fahrzeugansicht, kein Kalibrieren
Die Uhr funkt den Neigungsmesser jetzt selbst an, statt die Werte vom iPhone weiterreichen zu lassen. Bei diesem einen Gerät geht das, und nur bei ihm: Es bewirbt seinen Dienst, ist also ohne Einrichtung auffindbar, und es ist unverschlüsselt – es gibt keinen Schlüssel, der auf der Uhr ein zweites Mal lagern müsste. Damit steht die Nivellierung am Handgelenk ohne geöffnetes iPhone, und genau dafür hebt man beim Rangieren den Arm. Batterie, Solar und Kühlbox bleiben beim Weg über das iPhone: Sie lassen nur eine Verbindung zu, und die Victron-Schlüssel liegen in dessen Keychain. Die Einbaulage des Sensors reist einmal mit dem Datensatz herüber und bleibt auf der Uhr gespeichert – ohne sie stünden längs und quer je nach Einbau vertauscht. LevelSession und VanAlignProtocol wandern nach Shared/Bluetooth; beide sind reines CoreBluetooth und laufen auf watchOS unverändert. Die Fahrzeugansicht gibt es jetzt auch auf der Uhr, umschaltbar zur Libelle; Überhöhung und Farbregeln stehen in Shared/VehicleTilt.swift, damit iPhone und Uhr nicht auseinanderlaufen. Kalibrieren fällt auf der Uhr weg, samt Befehl. Das gehört einmalig ans iPhone mit ebenem Fahrzeug; ein Knopf dafür am Handgelenk wäre vor allem eine Gelegenheit, die Nullage aus Versehen zu verstellen. Zwei Fehler dabei behoben: * Beim Start meldete die Uhr dem iPhone nie, dass jemand hinschaut – onChange(of: scenePhase) feuert beim ersten Erscheinen nicht. Der schnelle Sendetakt blieb aus, bis die App einmal im Hintergrund war. * Ein einmal direkt gemessener Wert hatte für immer Vorrang. Blieb der Sensor stehen, ohne die Verbindung zu trennen, klebte die Anzeige daran. Jetzt gilt er drei Sekunden als frisch, danach übernimmt der Stand des iPhones – mit Alter und Grund daneben. Ausserdem WATCHOS_DEPLOYMENT_TARGET auf 10.0 (Xcode hatte 11.6 gesetzt) und die Bluetooth-Begründung für das Watch-Target. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,18 +2,22 @@ import Foundation
|
||||
|
||||
/// Was zwischen iPhone und Uhr hin- und hergeht.
|
||||
///
|
||||
/// Die Uhr funkt **nicht** selbst zu den Geräten im Fahrzeug, obwohl watchOS
|
||||
/// das könnte. Zwei Gründe sprechen dagegen, und beide sind hart:
|
||||
/// Die Aufteilung folgt dem, was jedes Gerät hergibt:
|
||||
///
|
||||
/// * BMS, Kühlbox und Neigungsmesser lassen jeweils nur **eine** Verbindung zu.
|
||||
/// Eine mitlesende Uhr würde dem iPhone die Verbindung wegnehmen, statt sie
|
||||
/// zu ergänzen.
|
||||
/// * Die Victron-Schlüssel liegen in der Keychain des iPhones. Die Uhr hat ihre
|
||||
/// eigene; die Schlüssel dorthin zu kopieren hiesse, sie ein zweites Mal
|
||||
/// aufzubewahren, ohne dass ein zweiter Aufbewahrungsort etwas brächte.
|
||||
/// * **Den Neigungsmesser funkt die Uhr selbst an** (`WatchLevelRadio`). Er
|
||||
/// bewirbt seinen Dienst, ist also ohne Einrichtung auffindbar, und er ist
|
||||
/// unverschlüsselt. Damit steht die Nivellierung am Handgelenk auch dann,
|
||||
/// wenn das iPhone in der Tasche schläft – und das ist der Fall, für den man
|
||||
/// die Uhr überhaupt anschaut.
|
||||
/// * **Alles andere kommt über das iPhone.** BMS und Kühlbox lassen nur eine
|
||||
/// Verbindung zu; eine mitlesende Uhr nähme dem iPhone die Verbindung weg,
|
||||
/// statt sie zu ergänzen. Und die Victron-Schlüssel liegen in der Keychain
|
||||
/// des iPhones – sie auf die Uhr zu kopieren hiesse, sie ein zweites Mal
|
||||
/// aufzubewahren, ohne dass der zweite Ort etwas brächte.
|
||||
///
|
||||
/// Das iPhone bleibt also das Funkgerät und schickt fertige Messwerte weiter,
|
||||
/// die Uhr ist Anzeige und Fernbedienung.
|
||||
/// Übertragen werden deshalb die Messwerte der übrigen Geräte, dazu Fahrzeug
|
||||
/// und Einbaulage des Sensors: Beides braucht die Uhr, um aus den Rohwinkeln
|
||||
/// des Neigungsmessers dasselbe zu machen wie das iPhone.
|
||||
enum WatchLink {
|
||||
|
||||
/// Schlüssel im WatchConnectivity-Wörterbuch. Übertragen wird jeweils ein
|
||||
@@ -84,6 +88,10 @@ struct WatchDevice: Codable, Equatable, Identifiable, Sendable {
|
||||
var snapshot: DeviceSnapshot?
|
||||
/// Nur beim Neigungsmesser belegt.
|
||||
var level: LevelState?
|
||||
/// Ebenfalls nur dort: wie der Sensor im Fahrzeug sitzt. Die Uhr funkt
|
||||
/// den Neigungsmesser selbst an und braucht die Zuordnung deshalb auch –
|
||||
/// eingestellt wird sie weiterhin nur am iPhone.
|
||||
var orientation: SensorOrientation?
|
||||
/// Nur bei der Kühlbox belegt.
|
||||
var fridge: WatchFridge?
|
||||
|
||||
@@ -125,7 +133,6 @@ enum WatchCommand: Codable, Equatable, Sendable {
|
||||
case fridgeEco(device: UUID, eco: Bool)
|
||||
case fridgeLock(device: UUID, locked: Bool)
|
||||
case fridgeTarget(device: UUID, zone: WatchFridgeZone, value: Int)
|
||||
case calibrateLevel(device: UUID)
|
||||
|
||||
/// Ob der Befehl den schnellen Sendetakt verlängert.
|
||||
var wantsLiveUpdates: Bool {
|
||||
|
||||
Reference in New Issue
Block a user