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:
BiasF
2026-08-30 23:24:32 +02:00
co-authored by Claude Opus 5
parent 49138312ea
commit d67b10d4e0
4 changed files with 75 additions and 3 deletions
+8 -1
View File
@@ -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")
+16 -2
View File
@@ -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
} }
+38
View File
@@ -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"
}
+13
View File
@@ -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
``` ```