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:
@@ -14,8 +14,9 @@ Ein Victron SmartShunt/BMV wird ebenfalls unterstützt, falls später einer dazu
|
||||
|
||||
Dazu gehört eine **Apple-Watch-App**: Übersicht, Nivellierung samt
|
||||
Ausrichtungs-Assistent mit Vibration und die Steuerung der Kühlbox am
|
||||
Handgelenk. Sie funkt nicht selbst, sondern hängt am iPhone – warum, steht
|
||||
unter [Apple Watch](#apple-watch).
|
||||
Handgelenk. Den Neigungsmesser funkt die Uhr selbst an, alles Übrige kommt
|
||||
über das iPhone – warum diese Aufteilung, steht unter
|
||||
[Apple Watch](#apple-watch).
|
||||
|
||||
Die Firmware des Neigungsmessers liegt mit im Projekt, siehe
|
||||
[firmware/vanalign](firmware/vanalign/README.md).
|
||||
@@ -216,8 +217,12 @@ den Arm hebt:
|
||||
|
||||
* **Übersicht** – je Gerät der Hauptwert und ein Punkt für den Zustand der
|
||||
Verbindung. Ganz unten steht, wie alt der Stand ist.
|
||||
* **Nivellierung** – Libelle, beide Winkel, was zu tun ist, und die nötige
|
||||
Keilhöhe, falls im Fahrzeugprofil Spurweite und Radstand stehen.
|
||||
* **Nivellierung** – wahlweise als Fahrzeugansicht wie am iPhone (Seiten- und
|
||||
Heckansicht, dreifach überhöht) oder als Libelle; umschaltbar und über Starts
|
||||
hinweg gemerkt. Dazu, was zu tun ist, und die nötige Keilhöhe, falls im
|
||||
Fahrzeugprofil Spurweite und Radstand stehen. Kalibriert wird nur am iPhone:
|
||||
Das gehört einmalig auf ebenen Boden, und ein Knopf dafür an der Uhr wäre vor
|
||||
allem eine Gelegenheit, die Nullage aus Versehen zu verstellen.
|
||||
* **Ausrichten** – derselbe Assistent wie am iPhone: Tendenz, Rat und der
|
||||
Hinweis auf den flachsten Punkt der letzten anderthalb Minuten. **Steht das
|
||||
Fahrzeug in der Toleranz, vibriert die Uhr.** Das ist der eigentliche Gewinn
|
||||
@@ -226,30 +231,42 @@ den Arm hebt:
|
||||
* **Kühlbox** – ein/aus, Eco oder Max und die Solltemperatur, über die Krone
|
||||
gestellt.
|
||||
|
||||
### Warum die Uhr nicht selbst funkt
|
||||
### Wer mit wem funkt
|
||||
|
||||
watchOS könnte Bluetooth, und trotzdem geht alles über das iPhone. Zwei Gründe,
|
||||
beide 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.
|
||||
**Den Neigungsmesser funkt die Uhr selbst an.** Er bewirbt seinen Dienst, ist
|
||||
also ohne jede Einrichtung auffindbar, und er 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 iPhone**: kein geöffnetes Telefon, keine
|
||||
Reichweite dorthin. Genau dafür hebt man beim Rangieren den Arm.
|
||||
|
||||
Die Einbaulage des Sensors reist einmal vom iPhone herüber und bleibt auf der
|
||||
Uhr gespeichert. Ohne sie stünden längs und quer je nach Einbau vertauscht oder
|
||||
mit falschem Vorzeichen – eingestellt wird sie weiterhin nur am iPhone, im
|
||||
Assistenten dort.
|
||||
|
||||
**Alles Übrige kommt über das iPhone.** Zwei Gründe, beide hart:
|
||||
|
||||
* BMS und Kühlbox lassen jeweils nur **eine** Verbindung zu. Eine mitlesende
|
||||
Uhr nähme dem iPhone die Verbindung weg, statt sie zu ergänzen.
|
||||
* 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
|
||||
irgendetwas brächte.
|
||||
|
||||
Das iPhone bleibt also das Funkgerät und reicht fertige Messwerte weiter. Was
|
||||
die Uhr stellt, stellt in Wahrheit das iPhone – und angezeigt wird auch dort
|
||||
nur, was das Gerät zurückmeldet, nicht der Tastendruck.
|
||||
Was die Uhr stellt, stellt also in Wahrheit das iPhone – und angezeigt wird
|
||||
auch dort nur, was das Gerät zurückmeldet, nicht der Tastendruck.
|
||||
|
||||
### Was das für den Betrieb heisst
|
||||
|
||||
Auf dem iPhone muss Camper Monitor laufen. Solange die Uhr meldet, dass jemand
|
||||
hinschaut, hält die App das Funkgerät auch im Hintergrund am Leben – sonst wäre
|
||||
die Anzeige am Handgelenk beim Rangieren tot, denn dann liegt das iPhone mit
|
||||
dunklem Bildschirm in der Halterung. Die verbundenen Geräte liefern dabei
|
||||
weiter; die Victron-Werbedaten nicht, weil iOS im Hintergrund kein ungefiltertes
|
||||
Suchen erlaubt.
|
||||
Für Batterie, Solar und Kühlbox muss Camper Monitor auf dem iPhone laufen.
|
||||
Solange die Uhr meldet, dass jemand hinschaut, hält die App das Funkgerät auch
|
||||
im Hintergrund am Leben; die Victron-Werbedaten stehen dabei still, weil iOS im
|
||||
Hintergrund kein ungefiltertes Suchen erlaubt.
|
||||
|
||||
Für die Nivellierung gilt das alles nicht – die läuft an der Uhr allein.
|
||||
Gefunkt wird dort nur im Vordergrund: watchOS lässt eine App im Hintergrund
|
||||
ohnehin kaum scannen, und beim Ausrichten schaut man auf die Uhr.
|
||||
|
||||
Gesendet wird in zwei Takten: ein halber Sekundentakt, solange die Watch-App im
|
||||
Vordergrund ist, sonst alle zwei Sekunden und nur bei Änderungen. Der schnelle
|
||||
@@ -317,6 +334,10 @@ Shared/ In iPhone- und Watch-App übersetzt
|
||||
│ ├── DeviceSnapshot.swift Messwerte in Anzeigeform
|
||||
│ ├── LevelState.swift Neigung, Toleranz und Klartext dazu
|
||||
│ └── VictronCodes.swift Klartexte für Zustands-/Fehlercodes
|
||||
├── Bluetooth/
|
||||
│ ├── VanAlignProtocol.swift Neigungsmesser: Winkel und Kalibrierung
|
||||
│ └── LevelSession.swift Verbindung zum Neigungsmesser (iPhone und Uhr)
|
||||
├── VehicleTilt.swift Überhöhung und Farben der Fahrzeugansicht
|
||||
└── WatchLink/
|
||||
└── WatchLink.swift Datensatz und Befehle zwischen iPhone und Uhr
|
||||
|
||||
@@ -331,8 +352,6 @@ CamperMonitor/
|
||||
│ ├── JBDProtocol.swift JBD/Xiaoxiang, Rahmen und Auswertung
|
||||
│ ├── WattCycleProtocol.swift WattCycle, Freischaltung und Auswertung
|
||||
│ ├── AlpicoolProtocol.swift Kühlboxen: Auswertung und Stellbefehle
|
||||
│ ├── VanAlignProtocol.swift Neigungsmesser: Winkel und Kalibrierung
|
||||
│ ├── LevelSession.swift Verbindung zum Neigungsmesser
|
||||
│ └── BMSSession.swift GATT-Verbindung, Protokollerkennung, Abfrage
|
||||
├── Store/
|
||||
│ ├── DeviceStore.swift Geräteliste, Persistenz
|
||||
@@ -355,11 +374,13 @@ CamperMonitor/
|
||||
CamperMonitorWatch/ watchOS-App
|
||||
├── CamperWatchApp.swift Einstieg, meldet dem iPhone das Hinschauen
|
||||
├── PhoneLink.swift Gegenstelle zum iPhone
|
||||
├── WatchLevelRadio.swift Eigene Bluetooth-Verbindung zum Neigungsmesser
|
||||
├── WatchDemo.swift Erfundene Werte für den Simulator
|
||||
└── Views/
|
||||
├── WatchRootView.swift Übersicht und Altersangabe
|
||||
├── WatchBubble.swift Libelle für den kleinen Bildschirm
|
||||
├── WatchLevelView.swift Neigung, Keilhöhe, Kalibrierung
|
||||
├── WatchVehicleView.swift Fahrzeugansicht auf Uhrgrösse
|
||||
├── WatchLevelView.swift Neigung, Keilhöhe, Herkunft der Werte
|
||||
├── WatchAlignView.swift Ausrichten mit Vibration
|
||||
├── WatchDeviceDetailView.swift Alle Werte eines Geräts
|
||||
└── WatchFridgeControls.swift Kühlbox stellen
|
||||
@@ -376,9 +397,15 @@ Config/
|
||||
laufen weiter, aber nur solange die Uhr meldet, dass jemand hinschaut. Ohne
|
||||
Uhr pausiert die App im Hintergrund vollständig und nimmt beim Zurückkommen
|
||||
wieder auf.
|
||||
* **Die Uhr braucht das iPhone.** Sie zeigt nur, was von dort kommt. Steckt das
|
||||
iPhone ausser Reichweite, steht auf der Uhr, wie alt der letzte Stand ist –
|
||||
aber kein neuer.
|
||||
* **Die Uhr braucht das iPhone – ausser für die Nivellierung.** Batterie, Solar
|
||||
und Kühlbox zeigt sie nur, was von dort kommt; ist das iPhone ausser
|
||||
Reichweite, steht dort, wie alt der letzte Stand ist. Den Neigungsmesser
|
||||
erreicht sie selbst.
|
||||
* **Neigungsmesser und Uhr:** Der ESP32 nimmt mehrere Verbindungen an, iPhone
|
||||
und Uhr können also gleichzeitig mitlesen. Weist er die zweite ab, hilft es,
|
||||
die iPhone-App zu schliessen – dann gehört der Sensor der Uhr.
|
||||
* **Auf der Uhr muss beim ersten Start Bluetooth erlaubt werden**, sonst bleibt
|
||||
die Nivellierung dort leer.
|
||||
* **Das Modbus-Registerlayout des neuen Daly-Protokolls variiert zwischen
|
||||
Firmwareständen.** Das klassische `A5`-Protokoll und das JBD-Protokoll sind
|
||||
gut dokumentiert; falls dein BMS Modbus spricht und Werte unplausibel
|
||||
|
||||
Reference in New Issue
Block a user