Diagnose ausblenden, bis sie gebraucht wird
Die Geräteansichten zeigten dauerhaft die technischen Angaben: erkanntes Protokoll, Bluetooth-Merkmale samt vollständigem Merkmalsbaum, gesendete Befehle und die Rohdaten der letzten Antwort. Das war zum Einrichten der Geräte nötig - für den Alltag ist es nur Ballast zwischen den Messwerten. Sie sind jetzt ausgeblendet und über Einstellungen → Diagnose anzeigen wieder einzublenden. Die Einstellungen sind neu und sitzen im Fahrzeugmenü des Dashboards. Eine Ausnahme: Meldet ein Gerät einen Fehler oder fehlt ein Victron-Schlüssel, erscheinen die Angaben unabhängig von der Einstellung. Genau dann sind sie das Einzige, was weiterhilft - und niemand denkt in dem Moment daran, sie erst irgendwo einzuschalten. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,7 @@ struct DashboardView: View {
|
|||||||
|
|
||||||
@State private var isAddingDevice = false
|
@State private var isAddingDevice = false
|
||||||
@State private var isManagingProfiles = false
|
@State private var isManagingProfiles = false
|
||||||
|
@State private var isShowingSettings = false
|
||||||
|
|
||||||
private let columns = [GridItem(.adaptive(minimum: 300), spacing: 16)]
|
private let columns = [GridItem(.adaptive(minimum: 300), spacing: 16)]
|
||||||
|
|
||||||
@@ -55,6 +56,9 @@ struct DashboardView: View {
|
|||||||
.sheet(isPresented: $isManagingProfiles) {
|
.sheet(isPresented: $isManagingProfiles) {
|
||||||
ProfilesView()
|
ProfilesView()
|
||||||
}
|
}
|
||||||
|
.sheet(isPresented: $isShowingSettings) {
|
||||||
|
SettingsView()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,9 +78,12 @@ struct DashboardView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Divider()
|
Divider()
|
||||||
Button("Fahrzeuge verwalten…", systemImage: "gearshape") {
|
Button("Fahrzeuge verwalten…", systemImage: "car.2") {
|
||||||
isManagingProfiles = true
|
isManagingProfiles = true
|
||||||
}
|
}
|
||||||
|
Button("Einstellungen…", systemImage: "gearshape") {
|
||||||
|
isShowingSettings = true
|
||||||
|
}
|
||||||
} label: {
|
} label: {
|
||||||
Label(store.activeProfile?.name ?? "Fahrzeug",
|
Label(store.activeProfile?.name ?? "Fahrzeug",
|
||||||
systemImage: store.activeProfile?.symbol ?? "box.truck")
|
systemImage: store.activeProfile?.symbol ?? "box.truck")
|
||||||
|
|||||||
@@ -11,6 +11,20 @@ struct DeviceDetailView: View {
|
|||||||
@State private var editedName = ""
|
@State private var editedName = ""
|
||||||
@State private var keyInput = ""
|
@State private var keyInput = ""
|
||||||
@State private var showDeleteConfirmation = false
|
@State private var showDeleteConfirmation = false
|
||||||
|
@AppStorage(AppSettings.showDiagnosticsKey) private var showDiagnostics = false
|
||||||
|
|
||||||
|
/// Ob die technischen Angaben eingeblendet werden.
|
||||||
|
///
|
||||||
|
/// Im Alltag stören sie nur. Meldet ein Gerät aber einen Fehler oder fehlt
|
||||||
|
/// der Schlüssel, sind sie genau das, was weiterhilft – dann werden sie
|
||||||
|
/// unabhängig von der Einstellung gezeigt.
|
||||||
|
private var showsTechnicalDetails: Bool {
|
||||||
|
if showDiagnostics { return true }
|
||||||
|
switch linkState {
|
||||||
|
case .failed, .needsKey: return true
|
||||||
|
default: return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Immer der aktuelle Stand aus dem Speicher – `device` ist die
|
/// Immer der aktuelle Stand aus dem Speicher – `device` ist die
|
||||||
/// Momentaufnahme beim Öffnen und veraltet nach jeder Änderung.
|
/// Momentaufnahme beim Öffnen und veraltet nach jeder Änderung.
|
||||||
@@ -88,8 +102,8 @@ struct DeviceDetailView: View {
|
|||||||
|
|
||||||
if currentDevice.role.transport == .advertisement {
|
if currentDevice.role.transport == .advertisement {
|
||||||
keySection
|
keySection
|
||||||
diagnosticsSection
|
if showsTechnicalDetails { diagnosticsSection }
|
||||||
} else {
|
} else if showsTechnicalDetails {
|
||||||
bmsDiagnosticsSection
|
bmsDiagnosticsSection
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
/// App-weite Einstellungen. Bewusst knapp gehalten – was ein einzelnes Gerät
|
||||||
|
/// betrifft, steht bei diesem Gerät.
|
||||||
|
struct SettingsView: View {
|
||||||
|
@AppStorage(AppSettings.showDiagnosticsKey) private var showDiagnostics = false
|
||||||
|
@Environment(\.dismiss) private var dismiss
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
NavigationStack {
|
||||||
|
List {
|
||||||
|
Section {
|
||||||
|
Toggle("Diagnose anzeigen", isOn: $showDiagnostics)
|
||||||
|
} header: {
|
||||||
|
Text("Fehlersuche")
|
||||||
|
} footer: {
|
||||||
|
Text("Zeigt bei jedem Gerät die technischen Angaben: erkanntes "
|
||||||
|
+ "Protokoll, Bluetooth-Merkmale, gesendete Befehle und die "
|
||||||
|
+ "Rohdaten der letzten Antwort. Für den Alltag nicht nötig – "
|
||||||
|
+ "hilfreich, wenn ein Gerät sich nicht wie erwartet verhält.\n\n"
|
||||||
|
+ "Meldet ein Gerät einen Fehler, werden die Angaben ohnehin "
|
||||||
|
+ "eingeblendet, auch wenn das hier ausgeschaltet ist.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.navigationTitle("Einstellungen")
|
||||||
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
|
.toolbar {
|
||||||
|
ToolbarItem(placement: .confirmationAction) {
|
||||||
|
Button("Fertig") { dismiss() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum AppSettings {
|
||||||
|
static let showDiagnosticsKey = "showDiagnostics"
|
||||||
|
}
|
||||||
@@ -185,6 +185,18 @@ damit exakt: 2,0° Querneigung bei 2,00 m Spurweite ergeben 7,0 cm unter die
|
|||||||
tieferstehende Seite. Die Maße stehen im Fahrzeugprofil, erreichbar über das
|
tieferstehende Seite. Die Maße stehen im Fahrzeugprofil, erreichbar über das
|
||||||
ⓘ in der Fahrzeugliste.
|
ⓘ in der Fahrzeugliste.
|
||||||
|
|
||||||
|
## Diagnose
|
||||||
|
|
||||||
|
Im Alltag zeigt die App nur Messwerte und Bedienelemente. Die technischen
|
||||||
|
Angaben – erkanntes Protokoll, Bluetooth-Merkmale, gesendete Befehle, Rohdaten
|
||||||
|
der letzten Antwort – sind ausgeblendet und lassen sich unter *Einstellungen →
|
||||||
|
Diagnose anzeigen* einschalten. Die Einstellungen sitzen im Fahrzeugmenü oben
|
||||||
|
links im Dashboard.
|
||||||
|
|
||||||
|
Meldet ein Gerät einen Fehler oder fehlt ein Victron-Schlüssel, werden die
|
||||||
|
Angaben unabhängig davon eingeblendet – dann sind sie genau das, was
|
||||||
|
weiterhilft.
|
||||||
|
|
||||||
## Mehrere Fahrzeuge
|
## Mehrere Fahrzeuge
|
||||||
|
|
||||||
Oben links im Dashboard sitzt der Fahrzeugwechsel. Jedes Profil hat seinen
|
Oben links im Dashboard sitzt der Fahrzeugwechsel. Jedes Profil hat seinen
|
||||||
@@ -249,6 +261,7 @@ CamperMonitor/
|
|||||||
├── LevelView.swift Libelle und Kalibrierung
|
├── LevelView.swift Libelle und Kalibrierung
|
||||||
├── AlignmentAssistantView.swift Ausrichtungs-Assistent fürs Rangieren
|
├── AlignmentAssistantView.swift Ausrichtungs-Assistent fürs Rangieren
|
||||||
├── VehicleTiltView.swift Neigung am Fahrzeug dargestellt
|
├── VehicleTiltView.swift Neigung am Fahrzeug dargestellt
|
||||||
|
├── SettingsView.swift App-Einstellungen
|
||||||
└── AddDeviceView.swift Scannen und Einrichten
|
└── AddDeviceView.swift Scannen und Einrichten
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user