Neigungsmesser: Einrichtung auf eine eigene Seite

Kalibrierung und Einbaulage standen direkt unter der Libelle. Wer im
Fahrzeug die Anzeige abliest und dabei scrollt, verstellt so leicht den
Nullpunkt - und merkt es nicht, weil die Anzeige danach schlicht null
zeigt. Beides liegt jetzt hinter "Neigungsmesser einrichten".

In der Geräteansicht bleibt, was im Betrieb gebraucht wird: die Libelle,
die Werte und der Ausrichtungs-Assistent. Die Einrichtungszeile nennt den
Stand, damit man nicht erst hineinschauen muss - fehlt der Nullpunkt,
steht das dort.

Die Namen sagen jetzt, was geschieht. "Auf aktuelle Lage kalibrieren"
klang nach einer Messung, gemeint ist das Festlegen des Nullpunkts: jetzt
"Aktuelle Lage als eben übernehmen", das Zurücksetzen entsprechend
"Nullpunkt verwerfen". Aus dem Hauptwort "Einbaulage" wird "Einbaulage
bestimmen".

Die beiden Schritte stehen in der Reihenfolge, in der sie gehören: erst
die Einbaulage, sonst legt der Nullpunkt sich auf die falsche Achse.
Beide Knöpfe bleiben stumm, solange keine Werte ankommen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
BiasF
2026-08-31 09:38:01 +02:00
co-authored by Claude Opus 5
parent 467c78f1f3
commit edf3f5b779
2 changed files with 138 additions and 50 deletions
+13 -50
View File
@@ -107,10 +107,8 @@ struct LevelControls: View {
@Environment(BluetoothManager.self) private var bluetooth
@Environment(DeviceStore.self) private var store
@State private var showResetConfirmation = false
@State private var showAssistant = false
@AppStorage("levelDisplayStyle") private var displayStyle: LevelDisplayStyle = .bubble
@State private var showSensorSetup = false
var body: some View {
Section {
@@ -165,65 +163,30 @@ struct LevelControls: View {
.disabled(!state.hasReading)
}
// Einbaulage und Nullpunkt liegen auf einer eigenen Seite. Direkt unter
// der Libelle verstellte ein Fehlgriff beim Ablesen den Nullpunkt.
Section {
Button {
showSensorSetup = true
NavigationLink {
LevelSetupView(device: device)
} label: {
LabeledContent {
Text(device.sensorOrientation.summary)
.font(.caption)
Text(setupSummary).font(.caption)
} label: {
Label("Einbaulage", systemImage: "arrow.triangle.2.circlepath")
Label("Neigungsmesser einrichten", systemImage: "slider.horizontal.3")
}
}
} header: {
Text("Sensor")
} footer: {
Text("Sitzt der Sensor quer oder verdreht, meldet er längs und quer "
+ "vertauscht. Der Assistent klärt das durch zweimaliges Kippen.")
}
Section {
Button("Auf aktuelle Lage kalibrieren", systemImage: "scope") {
bluetooth.calibrateLevel(for: device.id)
}
if !state.isKnownUncalibrated {
Button("Kalibrierung zurücksetzen", systemImage: "arrow.uturn.backward", role: .destructive) {
showResetConfirmation = true
}
}
} header: {
Text("Kalibrierung")
} footer: {
if state.isCalibrated, let pitchOffset = state.pitchOffset,
let rollOffset = state.rollOffset {
Text(String(format: "Nullpunkt liegt bei %.1f° längs und %.1f° quer. "
+ "Zum Kalibrieren das Fahrzeug eben stellen und dann tippen.",
pitchOffset, rollOffset))
} else if state.isKnownUncalibrated {
Text("Noch nicht kalibriert die Anzeige zeigt die Lage des Sensors, "
+ "nicht die des Fahrzeugs. Fahrzeug eben stellen und dann kalibrieren.")
} else {
// Ältere Firmware gibt die Offsets nicht heraus.
Text("Zum Kalibrieren das Fahrzeug eben stellen und dann tippen. "
+ "Ob bereits kalibriert wurde, meldet dieses Gerät nicht zurück.")
}
}
.sheet(isPresented: $showSensorSetup) {
SensorSetupView(device: device)
Text("Einbaulage des Sensors und Nullpunkt der Anzeige.")
}
.fullScreenCover(isPresented: $showAssistant) {
AlignmentAssistantView(device: device, profile: store.activeProfile)
}
.confirmationDialog("Kalibrierung zurücksetzen?",
isPresented: $showResetConfirmation,
titleVisibility: .visible) {
Button("Zurücksetzen", role: .destructive) {
bluetooth.resetLevelCalibration(for: device.id)
}
} message: {
Text("Die Anzeige zeigt danach wieder die Lage des Sensors.")
}
}
/// Was auf der Einrichtungsseite zu holen ist der Nullpunkt zuerst, denn
/// ohne ihn stimmt die Anzeige nicht.
private var setupSummary: String {
state.isKnownUncalibrated ? "Nullpunkt fehlt" : device.sensorOrientation.summary
}
private func reading(_ title: String, _ value: Double?) -> some View {