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 isManagingProfiles = false
@State private var isShowingSettings = false
private let columns = [GridItem(.adaptive(minimum: 300), spacing: 16)]
@@ -55,6 +56,9 @@ struct DashboardView: View {
.sheet(isPresented: $isManagingProfiles) {
ProfilesView()
}
.sheet(isPresented: $isShowingSettings) {
SettingsView()
}
}
}
@@ -74,9 +78,12 @@ struct DashboardView: View {
}
}
Divider()
Button("Fahrzeuge verwalten…", systemImage: "gearshape") {
Button("Fahrzeuge verwalten…", systemImage: "car.2") {
isManagingProfiles = true
}
Button("Einstellungen…", systemImage: "gearshape") {
isShowingSettings = true
}
} label: {
Label(store.activeProfile?.name ?? "Fahrzeug",
systemImage: store.activeProfile?.symbol ?? "box.truck")
+16 -2
View File
@@ -11,6 +11,20 @@ struct DeviceDetailView: View {
@State private var editedName = ""
@State private var keyInput = ""
@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
/// Momentaufnahme beim Öffnen und veraltet nach jeder Änderung.
@@ -88,8 +102,8 @@ struct DeviceDetailView: View {
if currentDevice.role.transport == .advertisement {
keySection
diagnosticsSection
} else {
if showsTechnicalDetails { diagnosticsSection }
} else if showsTechnicalDetails {
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"
}