forked from fritob/Camper-Monitor
DeviceRole-Fälle für Victron- und Votronic-Solar eindeutig benennen
.solarCharger und .solar sahen im Code zu ähnlich aus, um auf einen Blick zu erkennen, welches der Victron-Solarladeregler (passives BLE-Advertisement) und welches der Votronic-Solarladeregler (aktive GATT-Verbindung über die ESP32-Bridge) ist. Jetzt .victronSolarCharger und .votronicSolar, samt allen abgeleiteten Bezeichnern in DemoData, WatchDemo und Tests. Die rawValues bleiben "solarCharger"/"solar", damit bereits gespeicherte Geräte beim Decodieren nicht auf einen unbekannten Rollen-Wert treffen. VictronAdvertisement.RecordType.solarCharger (das rohe Protokollfeld) bleibt unverändert – schon durch den Typnamen eindeutig, und passend zur offiziellen Victron-Bezeichnung des Datensatztyps. run-tests.sh fehlten VehicleGraphicStyle.swift und VehicleTilt.swift, seit ConfiguredDevice sie referenziert – ergänzt, Testlauf grün. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
e9b9c5bcd5
commit
83ea85f3b8
+10
-10
@@ -76,22 +76,22 @@ var advertisement: [UInt8] = [0xE1, 0x02, 0x10, 0x00, 0x4C, 0xA0, 0x01,
|
||||
UInt8(nonce & 0xFF), UInt8(nonce >> 8), deviceKey[0]]
|
||||
advertisement += encrypted
|
||||
|
||||
let solar = try? VictronAdvertisement.decode(manufacturerData: Data(advertisement),
|
||||
let victronSolar = try? VictronAdvertisement.decode(manufacturerData: Data(advertisement),
|
||||
key: deviceKey,
|
||||
deviceID: UUID(),
|
||||
rssi: -55)
|
||||
func value(_ snapshot: DeviceSnapshot?, _ key: String) -> Double? {
|
||||
snapshot?.metrics.first { $0.key == key }?.value
|
||||
}
|
||||
check("Advertisement wird dekodiert", solar != nil)
|
||||
checkEqual("Zustand als Klartext", solar?.state, "Konstantstrom (Bulk)")
|
||||
checkEqual("kein Fehler gemeldet", solar?.fault, nil)
|
||||
checkEqual("Batteriespannung", value(solar, "battery_voltage").map(round2), 13.45)
|
||||
checkEqual("Ladestrom", value(solar, "battery_current").map { ($0 * 10).rounded() / 10 }, 15.2)
|
||||
checkEqual("Tagesertrag", value(solar, "yield_today"), 2.34)
|
||||
checkEqual("PV-Leistung", value(solar, "pv_power"), 210)
|
||||
checkEqual("Laststrom bleibt leer (NA)", value(solar, "load_current"), nil)
|
||||
checkEqual("PV-Leistung ist der Hauptwert", solar?.primaryMetric?.key, "pv_power")
|
||||
check("Advertisement wird dekodiert", victronSolar != nil)
|
||||
checkEqual("Zustand als Klartext", victronSolar?.state, "Konstantstrom (Bulk)")
|
||||
checkEqual("kein Fehler gemeldet", victronSolar?.fault, nil)
|
||||
checkEqual("Batteriespannung", value(victronSolar, "battery_voltage").map(round2), 13.45)
|
||||
checkEqual("Ladestrom", value(victronSolar, "battery_current").map { ($0 * 10).rounded() / 10 }, 15.2)
|
||||
checkEqual("Tagesertrag", value(victronSolar, "yield_today"), 2.34)
|
||||
checkEqual("PV-Leistung", value(victronSolar, "pv_power"), 210)
|
||||
checkEqual("Laststrom bleibt leer (NA)", value(victronSolar, "load_current"), nil)
|
||||
checkEqual("PV-Leistung ist der Hauptwert", victronSolar?.primaryMetric?.key, "pv_power")
|
||||
|
||||
var wrongKey = deviceKey; wrongKey[0] = 0x00
|
||||
do {
|
||||
|
||||
Reference in New Issue
Block a user