From 0dc8e25d2f9252693f66078f4e810d730960d02d Mon Sep 17 00:00:00 2001 From: andig Date: Tue, 27 Apr 2021 20:42:11 +0200 Subject: [PATCH] Skoda: respect home region (#933) --- internal/vehicle/audi.go | 6 ++++-- internal/vehicle/skoda.go | 23 +++++++++++++++-------- internal/vehicle/vw/api.go | 9 +++++++++ 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/internal/vehicle/audi.go b/internal/vehicle/audi.go index 489a628b9..19b810ce8 100644 --- a/internal/vehicle/audi.go +++ b/internal/vehicle/audi.go @@ -69,8 +69,10 @@ func NewAudiFromConfig(other map[string]interface{}) (api.Vehicle, error) { } } - if err = api.HomeRegion(strings.ToUpper(cc.VIN)); err == nil { - v.Provider = vw.NewProvider(api, strings.ToUpper(cc.VIN), cc.Cache) + if err == nil { + if err = api.HomeRegion(strings.ToUpper(cc.VIN)); err == nil { + v.Provider = vw.NewProvider(api, strings.ToUpper(cc.VIN), cc.Cache) + } } return v, err diff --git a/internal/vehicle/skoda.go b/internal/vehicle/skoda.go index 83b5a7a2b..915582794 100644 --- a/internal/vehicle/skoda.go +++ b/internal/vehicle/skoda.go @@ -1,6 +1,7 @@ package vehicle import ( + "fmt" "net/url" "strings" "time" @@ -53,17 +54,23 @@ func NewSkodaFromConfig(other map[string]interface{}) (api.Vehicle, error) { }) err := identity.Login(query, cc.User, cc.Password) - if err == nil { - api := vw.NewAPI(log, identity, "VW", "CZ") + if err != nil { + return v, fmt.Errorf("login failed: %w", err) + } - if cc.VIN == "" { - cc.VIN, err = findVehicle(api.Vehicles()) - if err == nil { - log.DEBUG.Printf("found vehicle: %v", cc.VIN) - } + api := vw.NewAPI(log, identity, "VW", "CZ") + + if cc.VIN == "" { + cc.VIN, err = findVehicle(api.Vehicles()) + if err == nil { + log.DEBUG.Printf("found vehicle: %v", cc.VIN) } + } - v.Provider = vw.NewProvider(api, strings.ToUpper(cc.VIN), cc.Cache) + if err == nil { + if err = api.HomeRegion(strings.ToUpper(cc.VIN)); err == nil { + v.Provider = vw.NewProvider(api, strings.ToUpper(cc.VIN), cc.Cache) + } } return v, err diff --git a/internal/vehicle/vw/api.go b/internal/vehicle/vw/api.go index a6dc57f7e..c22efdc47 100644 --- a/internal/vehicle/vw/api.go +++ b/internal/vehicle/vw/api.go @@ -1,6 +1,7 @@ package vw import ( + "encoding/json" "fmt" "net/http" "strings" @@ -93,6 +94,14 @@ func (v *API) HomeRegion(vin string) error { return err } +// RolesRights updates the home region for the given vehicle +func (v *API) RolesRights(vin string) (string, error) { + var res json.RawMessage + uri := fmt.Sprintf("%s/rolesrights/operationlist/v3/vehicles/%s", RegionAPI, vin) + err := v.getJSON(uri, &res) + return string(res), err +} + // ChargerResponse is the /bs/batterycharge/v1/%s/%s/vehicles/%s/charger api type ChargerResponse struct { Charger struct {