From 38a5dfd9da96bc0353dcdab28c290956a79dc8e0 Mon Sep 17 00:00:00 2001 From: StefanSchoof <4662023+StefanSchoof@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:48:51 +0200 Subject: [PATCH] dsg: add soc via battery_state_report.soc key (#31340) --- vehicle/vw/eudataact/eudataact_test.go | 19 +++++++++++++++++++ vehicle/vw/eudataact/provider.go | 2 +- vehicle/vw/eudataact/types.go | 9 +++++---- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/vehicle/vw/eudataact/eudataact_test.go b/vehicle/vw/eudataact/eudataact_test.go index c03e6d3eb..ba98df148 100644 --- a/vehicle/vw/eudataact/eudataact_test.go +++ b/vehicle/vw/eudataact/eudataact_test.go @@ -204,6 +204,25 @@ func TestSocFreshestField(t *testing.T) { assert.Equal(t, 61.0, soc, "the still-updating field wins over the stale higher-priority field") } +func TestSocBatteryStateReportField(t *testing.T) { + data := []point{{Key: KeyBatteryStateReportSoc, Name: "battery_state_report.soc", Value: "36"}} + + soc, err := testProvider(data).Soc() + require.NoError(t, err) + assert.Equal(t, 36.0, soc) +} + +func TestSocBatteryStateReportOnlyFallbackField(t *testing.T) { + data := []point{ + {Key: KeyBatteryStateReportSoc, Name: "battery_state_report.soc", Value: "36"}, + {Name: FieldHvBatteryLevelValue, Value: "40"}, + } + + soc, err := testProvider(data).Soc() + require.NoError(t, err) + assert.Equal(t, 40.0, soc) +} + // TestPoints guards that a data point with a generic field name ("value") is // stored once yet found by both its unique key and its name. func TestPoints(t *testing.T) { diff --git a/vehicle/vw/eudataact/provider.go b/vehicle/vw/eudataact/provider.go index 36d9f8583..3022eca84 100644 --- a/vehicle/vw/eudataact/provider.go +++ b/vehicle/vw/eudataact/provider.go @@ -81,7 +81,7 @@ func (v *Provider) Soc() (float64, error) { return 0, err } - if p := lookup(data, FieldHvBatteryLevelValue, FieldSoc, FieldHvSoc); p != nil { + if p := lookup(data, FieldHvBatteryLevelValue, FieldSoc, FieldHvSoc, KeyBatteryStateReportSoc); p != nil { return strconv.ParseFloat(p.Value, 64) } diff --git a/vehicle/vw/eudataact/types.go b/vehicle/vw/eudataact/types.go index b9f56ee24..7920322b7 100644 --- a/vehicle/vw/eudataact/types.go +++ b/vehicle/vw/eudataact/types.go @@ -127,10 +127,11 @@ const ( FieldTargetSoc = "settings.target_soc" // range - FieldRangeCombined = "cruising_range_combined" - FieldRangePrimary = "cruising_range_primary_engine" - FieldRangeSecondary = "cruising_range_secondary_engine" - KeyRangeID3 = "0ca40e18-0564-3eda-bcc0-7aee9ef44f04" // VW ID.3 cruising range, delivered as "value" + FieldRangeCombined = "cruising_range_combined" + FieldRangePrimary = "cruising_range_primary_engine" + FieldRangeSecondary = "cruising_range_secondary_engine" + KeyRangeID3 = "0ca40e18-0564-3eda-bcc0-7aee9ef44f04" // VW ID.3 range + KeyBatteryStateReportSoc = "506cb83e-f99f-3af3-bbeb-0429b69a78d9" // VW ID.3 soc // odo FieldOdometer = "mileage"