diff --git a/vehicle/embed.go b/vehicle/embed.go index deff59fbe..d203519bf 100644 --- a/vehicle/embed.go +++ b/vehicle/embed.go @@ -14,6 +14,16 @@ type embed struct { OnIdentify api.ActionConfig `mapstructure:"onIdentify"` } +// Title implements the api.Vehicle interface +func (v *embed) fromVehicle(title string, capacity float64) { + if v.Title_ == "" { + v.Title_ = title + } + if v.Capacity_ == 0 { + v.Capacity_ = capacity + } +} + // Title implements the api.Vehicle interface func (v *embed) Title() string { return v.Title_ diff --git a/vehicle/skoda-enyaq.go b/vehicle/skoda-enyaq.go index df427bd71..03d700d45 100644 --- a/vehicle/skoda-enyaq.go +++ b/vehicle/skoda-enyaq.go @@ -50,7 +50,7 @@ func NewEnyaqFromConfig(other map[string]interface{}) (api.Vehicle, error) { var err error log := util.NewLogger("enyaq").Redact(cc.User, cc.Password, cc.VIN) - // use Skoda credentials to resolve list of vehicles + // use Skoda api to resolve list of vehicles ts, err := service.TokenRefreshServiceTokenSource(log, skoda.TRSParams, skoda.AuthParams, cc.User, cc.Password) if err != nil { return nil, err @@ -66,11 +66,8 @@ func NewEnyaqFromConfig(other map[string]interface{}) (api.Vehicle, error) { }, ) - if v.Title_ == "" { - v.Title_ = vehicle.Name - } - if v.Capacity_ == 0 { - v.Capacity_ = float64(vehicle.Specification.Battery.CapacityInKWh) + if err == nil { + v.fromVehicle(vehicle.Name, float64(vehicle.Specification.Battery.CapacityInKWh)) } // use Connect credentials to build provider diff --git a/vehicle/skoda.go b/vehicle/skoda.go index c08410c98..ee0caa7a0 100644 --- a/vehicle/skoda.go +++ b/vehicle/skoda.go @@ -51,20 +51,38 @@ func NewSkodaFromConfig(other map[string]interface{}) (api.Vehicle, error) { log := util.NewLogger("skoda").Redact(cc.User, cc.Password, cc.VIN) - trs := tokenrefreshservice.New(log, skoda.TRSParams) - ts, err := service.MbbTokenSource(log, trs, skoda.AuthClientID, skoda.AuthParams, cc.User, cc.Password) + // use Skoda api to resolve list of vehicles + ts, err := service.TokenRefreshServiceTokenSource(log, skoda.TRSParams, skoda.AuthParams, cc.User, cc.Password) if err != nil { return nil, err } - api := vw.NewAPI(log, ts, skoda.Brand, skoda.Country) + api := skoda.NewAPI(log, ts) api.Client.Timeout = cc.Timeout - cc.VIN, err = ensureVehicle(cc.VIN, api.Vehicles) + vehicle, err := ensureVehicleEx( + cc.VIN, api.Vehicles, + func(v skoda.Vehicle) string { + return v.VIN + }, + ) if err == nil { - if err = api.HomeRegion(cc.VIN); err == nil { - v.Provider = vw.NewProvider(api, cc.VIN, cc.Cache) + v.fromVehicle(vehicle.Name, float64(vehicle.Specification.Battery.CapacityInKWh)) + } + + if err == nil { + trs := tokenrefreshservice.New(log, skoda.TRSParams) + ts, err := service.MbbTokenSource(log, trs, skoda.AuthClientID, skoda.AuthParams, cc.User, cc.Password) + if err != nil { + return nil, err + } + + api := vw.NewAPI(log, ts, skoda.Brand, skoda.Country) + api.Client.Timeout = cc.Timeout + + if err = api.HomeRegion(vehicle.VIN); err == nil { + v.Provider = vw.NewProvider(api, vehicle.VIN, cc.Cache) } }