forked from fritob/Camper-Monitor
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 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")
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
ⓘ 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
|
||||
|
||||
Oben links im Dashboard sitzt der Fahrzeugwechsel. Jedes Profil hat seinen
|
||||
@@ -249,6 +261,7 @@ CamperMonitor/
|
||||
├── LevelView.swift Libelle und Kalibrierung
|
||||
├── AlignmentAssistantView.swift Ausrichtungs-Assistent fürs Rangieren
|
||||
├── VehicleTiltView.swift Neigung am Fahrzeug dargestellt
|
||||
├── SettingsView.swift App-Einstellungen
|
||||
└── AddDeviceView.swift Scannen und Einrichten
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user