From 4881aaa0950c8aaf665b93e2cd2811313dc4026a Mon Sep 17 00:00:00 2001 From: andig Date: Sat, 8 Oct 2022 14:14:09 +0200 Subject: [PATCH] Audi etron: get nickname from vehicle (#4756) --- vehicle/audi-etron.go | 21 +++++++++++++++------ vehicle/audi/etron/api.go | 17 +++-------------- vehicle/audi/etron/types.go | 5 +++++ 3 files changed, 23 insertions(+), 20 deletions(-) create mode 100644 vehicle/audi/etron/types.go diff --git a/vehicle/audi-etron.go b/vehicle/audi-etron.go index 3b16e3dbc..0ddc4eef4 100644 --- a/vehicle/audi-etron.go +++ b/vehicle/audi-etron.go @@ -65,17 +65,26 @@ func NewEtronFromConfig(other map[string]interface{}) (api.Vehicle, error) { // use the etron API for list of vehicles api := etron.NewAPI(log, ats) - cc.VIN, err = ensureVehicle(cc.VIN, func() ([]string, error) { - ctx, cancel := context.WithTimeout(context.Background(), cc.Timeout) - defer cancel() - return api.Vehicles(ctx) - }) + vehicle, err := ensureVehicleEx( + cc.VIN, func() ([]etron.Vehicle, error) { + ctx, cancel := context.WithTimeout(context.Background(), cc.Timeout) + defer cancel() + return api.Vehicles(ctx) + }, + func(v etron.Vehicle) string { + return v.VIN + }, + ) if err == nil { + if v.Title_ == "" { + v.Title_ = vehicle.Nickname + } + api := id.NewAPI(log, its) api.Client.Timeout = cc.Timeout - v.Provider = id.NewProvider(api, cc.VIN, cc.Cache) + v.Provider = id.NewProvider(api, vehicle.VIN, cc.Cache) } return v, err diff --git a/vehicle/audi/etron/api.go b/vehicle/audi/etron/api.go index 2f27af1ef..0b2dc0722 100644 --- a/vehicle/audi/etron/api.go +++ b/vehicle/audi/etron/api.go @@ -5,7 +5,6 @@ import ( "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/request" - "github.com/samber/lo" "github.com/shurcooL/graphql" "golang.org/x/oauth2" ) @@ -33,22 +32,12 @@ func NewAPI(log *util.Logger, ts oauth2.TokenSource) *API { } // Vehicles implements the /vehicles response -func (v *API) Vehicles(ctx context.Context) ([]string, error) { - type vehicle struct { - VIN, Type, Nickname string - } - +func (v *API) Vehicles(ctx context.Context) ([]Vehicle, error) { var res struct { - UserVehicles []vehicle `json:"userVehicles"` + UserVehicles []Vehicle } - var vins []string err := v.client.Query(ctx, &res, nil) - if err == nil { - vins = lo.Map(res.UserVehicles, func(v vehicle, _ int) string { - return v.VIN - }) - } - return vins, err + return res.UserVehicles, err } diff --git a/vehicle/audi/etron/types.go b/vehicle/audi/etron/types.go new file mode 100644 index 000000000..562418124 --- /dev/null +++ b/vehicle/audi/etron/types.go @@ -0,0 +1,5 @@ +package etron + +type Vehicle struct { + VIN, Type, Nickname string +}