forked from fritob/Camper-Monitor
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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user