some advanced settings

This commit is contained in:
Stefan Lange-Hegermann
2025-10-28 13:31:51 +01:00
parent 0989c68aa7
commit 46664625b4
13 changed files with 815 additions and 219 deletions

View File

@@ -301,45 +301,19 @@ struct SystemOverviewView: View {
} else {
ViewThatFits(in: .horizontal) {
HStack(spacing: 16) {
summaryMetric(
icon: "battery.100",
label: batteryCountLabel,
value: "\(batteries.count)",
tint: .blue
).frame(maxWidth: .infinity, alignment: .leading)
summaryMetric(
icon: "gauge.medium",
label: batteryCapacityLabel,
value: formattedValue(totalCapacity, unit: "Ah"),
tint: .orange
).frame(maxWidth: .infinity, alignment: .leading)
summaryMetric(
icon: "bolt.circle",
label: batteryEnergyLabel,
value: formattedValue(totalEnergy, unit: "Wh"),
tint: .green
).frame(maxWidth: .infinity, alignment: .leading)
batteryMetricsContent
}
LazyVGrid(
columns: Array(repeating: GridItem(.flexible(), spacing: 16), count: 2),
alignment: .leading,
spacing: 16
) {
batteryMetricsContent
}
VStack(alignment: .leading, spacing: 12) {
summaryMetric(
icon: "battery.100",
label: batteryCountLabel,
value: "\(batteries.count)",
tint: .blue
).frame(maxWidth: .infinity, alignment: .leading)
summaryMetric(
icon: "gauge.medium",
label: batteryCapacityLabel,
value: formattedValue(totalCapacity, unit: "Ah"),
tint: .orange
).frame(maxWidth: .infinity, alignment: .leading)
summaryMetric(
icon: "bolt.circle",
label: batteryEnergyLabel,
value: formattedValue(totalEnergy, unit: "Wh"),
tint: .green
).frame(maxWidth: .infinity, alignment: .leading)
batteryMetricsContent
}
}
}
@@ -355,6 +329,34 @@ struct SystemOverviewView: View {
.buttonStyle(.plain)
}
@ViewBuilder
private var batteryMetricsContent: some View {
summaryMetric(
icon: "battery.100",
label: batteryCountLabel,
value: "\(batteries.count)",
tint: .blue
)
summaryMetric(
icon: "gauge.medium",
label: batteryCapacityLabel,
value: formattedValue(totalCapacity, unit: "Ah"),
tint: .orange
)
summaryMetric(
icon: "battery.100.bolt",
label: batteryUsableCapacityLabel,
value: formattedValue(totalUsableCapacity, unit: "Ah"),
tint: .teal
)
summaryMetric(
icon: "bolt.circle",
label: batteryUsableEnergyLabel,
value: formattedValue(totalUsableEnergy, unit: "Wh"),
tint: .green
)
}
private var chargersCard: some View {
Button(action: onSelectChargers) {
VStack(alignment: .leading, spacing: 16) {
@@ -467,6 +469,18 @@ struct SystemOverviewView: View {
}
}
private var totalUsableCapacity: Double {
batteries.reduce(0) { result, battery in
result + battery.usableCapacityAmpHours
}
}
private var totalUsableEnergy: Double {
batteries.reduce(0) { result, battery in
result + battery.usableEnergyWattHours
}
}
private var totalChargerCurrent: Double {
chargers.reduce(0) { result, charger in
result + max(0, charger.maxCurrentAmps)
@@ -611,8 +625,8 @@ struct SystemOverviewView: View {
}
private var estimatedRuntimeHours: Double? {
guard totalPower > 0, totalEnergy > 0 else { return nil }
let hours = totalEnergy / totalPower
guard totalPower > 0, totalUsableEnergy > 0 else { return nil }
let hours = totalUsableEnergy / totalPower
return hours.isFinite && hours > 0 ? hours : nil
}
@@ -738,12 +752,21 @@ struct SystemOverviewView: View {
)
}
private var batteryEnergyLabel: String {
private var batteryUsableCapacityLabel: String {
NSLocalizedString(
"battery.bank.metric.energy",
"battery.bank.metric.usable_capacity",
bundle: .main,
value: "Energy",
comment: "Label for total energy metric"
value: "Usable Capacity",
comment: "Label for usable capacity metric"
)
}
private var batteryUsableEnergyLabel: String {
NSLocalizedString(
"battery.bank.metric.usable_energy",
bundle: .main,
value: "Usable Energy",
comment: "Label for usable energy metric"
)
}