BMS: Warten auf die Notify-Bestätigung nicht mehr endlos
Die Suche nach dem richtigen Verbindungsweg blieb auf dem ersten Kandidaten stehen: gesendet wurde erst, nachdem iOS das Abonnieren der Notify-Charakteristik bestätigt hat. Bestätigt ein Modul das nie – bei der WattCycle-Batterie auf FFF1 der Fall –, wurde weder je eine Anfrage geschickt noch zum nächsten Kandidaten gewechselt. Die Diagnose zeigte dauerhaft "1 von 16" und "0 Anfragen / 0 Byte". Die Aktivierung eines Kandidaten hat jetzt ein Zeitlimit von vier Sekunden. Läuft es ab, geht es zum nächsten; ist es der einzige Weg, wird trotzdem gesendet – manche Module antworten auch ohne bestätigtes Abonnement. Ein Token verhindert, dass verspätete Rückmeldungen eines bereits verworfenen Kandidaten den aktuellen durcheinanderbringen. Damit sich Fortschritt überhaupt beobachten lässt, wird die Diagnose jetzt bei jeder gesendeten Anfrage aktualisiert statt nur am Ende einer Runde, und zeigt zusätzlich Verbindungszustand, ob der Empfang abonniert ist, und wann zuletzt gesendet wurde. Die Suche ist enger getaktet, damit alle Wege in gut zwei Minuten durch sind. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -252,8 +252,24 @@ struct DeviceDetailView: View {
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
LabeledContent("Verbunden") {
|
||||
Label(info.isConnected ? "ja" : "nein",
|
||||
systemImage: info.isConnected ? "checkmark.circle" : "xmark.circle")
|
||||
.foregroundStyle(info.isConnected ? .green : .red)
|
||||
}
|
||||
LabeledContent("Empfang abonniert") {
|
||||
Label(info.isNotifyActive ? "ja" : "nein",
|
||||
systemImage: info.isNotifyActive ? "checkmark.circle" : "xmark.circle")
|
||||
.foregroundStyle(info.isNotifyActive ? .green : .orange)
|
||||
}
|
||||
LabeledContent("Gesendet / empfangen",
|
||||
value: "\(info.sentFrames) Anfragen / \(info.receivedBytes) Byte")
|
||||
if let lastSendAt = info.lastSendAt {
|
||||
LabeledContent("Zuletzt gesendet vor") {
|
||||
Text(lastSendAt, style: .relative)
|
||||
}
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
if let hex = info.lastResponseHex {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text("Letzte Antwort")
|
||||
@@ -268,8 +284,10 @@ struct DeviceDetailView: View {
|
||||
} footer: {
|
||||
Text("Die App probiert alle Schreib-/Empfangs-Kombinationen des Geräts "
|
||||
+ "durch und fragt auf jeder Daly (klassisch und Modbus) sowie "
|
||||
+ "JBD/Xiaoxiang an. Bleibt „empfangen“ bei 0 Byte, nimmt das BMS "
|
||||
+ "die Kommandos nicht an.")
|
||||
+ "JBD/Xiaoxiang an. Der „Verbindungsweg“ zählt dabei hoch. "
|
||||
+ "Bleibt „empfangen“ am Ende bei 0 Byte, nimmt das BMS auf keinem "
|
||||
+ "Weg Kommandos an; kommen Bytes an, ohne dass ein Protokoll "
|
||||
+ "erkannt wird, spricht es ein noch unbekanntes.")
|
||||
}
|
||||
|
||||
if !info.gattSummary.isEmpty {
|
||||
|
||||
Reference in New Issue
Block a user