From fb22e09e8668f1d9fe75c2cdfb04ee7533b83a75 Mon Sep 17 00:00:00 2001 From: andig Date: Tue, 29 Oct 2024 21:00:45 +0100 Subject: [PATCH] Cupra: always use electric engine (#16963) --- vehicle/seat/cupra/provider.go | 23 +++++++++++++++++++++-- vehicle/seat/cupra/types.go | 2 ++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/vehicle/seat/cupra/provider.go b/vehicle/seat/cupra/provider.go index ee06d70e6..9bdf5ea9f 100644 --- a/vehicle/seat/cupra/provider.go +++ b/vehicle/seat/cupra/provider.go @@ -37,10 +37,24 @@ func NewProvider(api *API, userID, vin string, cache time.Duration) *Provider { var _ api.Battery = (*Provider)(nil) +func (v *Provider) engine(s Status, typ string) (Engine, error) { + for _, e := range []Engine{s.Engines.Primary, s.Engines.Secondary} { + if e.FuelType == typ { + return e, nil + } + } + return Engine{}, api.ErrNotAvailable +} + // Soc implements the api.Vehicle interface func (v *Provider) Soc() (float64, error) { res, err := v.statusG() - return res.Engines.Primary.LevelPct, err + if err != nil { + return 0, err + } + + engine, err := v.engine(res, FuelTypeElectric) + return engine.LevelPct, err } var _ api.ChargeState = (*Provider)(nil) @@ -89,7 +103,12 @@ var _ api.VehicleRange = (*Provider)(nil) // Range implements the api.VehicleRange interface func (v *Provider) Range() (int64, error) { res, err := v.statusG() - return int64(res.Engines.Primary.RangeKm), err + if err != nil { + return 0, err + } + + engine, err := v.engine(res, FuelTypeElectric) + return int64(engine.RangeKm), err } var _ api.VehicleOdometer = (*Provider)(nil) diff --git a/vehicle/seat/cupra/types.go b/vehicle/seat/cupra/types.go index 2177da672..9fe8e5a5f 100644 --- a/vehicle/seat/cupra/types.go +++ b/vehicle/seat/cupra/types.go @@ -1,5 +1,7 @@ package cupra +const FuelTypeElectric = "electric" + type Vehicle struct { VIN string EnrollmentStatus string