Skip to content

Commit 0d780f2

Browse files
committed
wip
1 parent 60e1e38 commit 0d780f2

File tree

2 files changed

+25
-30
lines changed

2 files changed

+25
-30
lines changed

vehicle/carwings.go

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ type CarWings struct {
2626
*embed
2727
user, password string
2828
session *carwings.Session
29-
statusG func() (interface{}, error)
30-
climateG func() (interface{}, error)
29+
statusG func() (carwings.BatteryStatus, error)
30+
climateG func() (carwings.ClimateStatus, error)
3131
refreshKey string
3232
refreshTime time.Time
3333
}
@@ -91,13 +91,8 @@ func NewCarWingsFromConfig(other map[string]interface{}) (api.Vehicle, error) {
9191
return nil, fmt.Errorf("login failed: %w", err)
9292
}
9393

94-
v.statusG = provider.Cached[](func() (interface{}, error) {
95-
return v.status()
96-
}, cc.Cache)
97-
98-
v.climateG = provider.Cached[](func() (interface{}, error) {
99-
return v.session.ClimateControlStatus()
100-
}, cc.Cache)
94+
v.statusG = provider.Cached[carwings.BatteryStatus](v.status, cc.Cache)
95+
v.climateG = provider.Cached[carwings.ClimateStatus](v.session.ClimateControlStatus, cc.Cache)
10196

10297
return v, nil
10398
}
@@ -112,11 +107,11 @@ func (v *CarWings) connectIfRequired(err error) error {
112107
return err
113108
}
114109

115-
func (v *CarWings) status() (interface{}, error) {
110+
func (v *CarWings) status() (carwings.BatteryStatus, error) {
116111
// api result is stale
117112
if v.refreshKey != "" {
118113
if err := v.refreshResult(); err != nil {
119-
return nil, err
114+
return *new(carwings.BatteryStatus), err
120115
}
121116
}
122117

@@ -125,7 +120,7 @@ func (v *CarWings) status() (interface{}, error) {
125120
if err == nil {
126121
if elapsed := time.Since(bs.Timestamp); elapsed > carwingsStatusExpiry {
127122
if err = v.refreshRequest(); err != nil {
128-
return nil, err
123+
return *new(carwings.BatteryStatus), err
129124
}
130125

131126
err = api.ErrMustRetry
@@ -182,7 +177,7 @@ func (v *CarWings) refreshRequest() (err error) {
182177
// SoC implements the api.Vehicle interface
183178
func (v *CarWings) SoC() (float64, error) {
184179
res, err := v.statusG()
185-
if res, ok := res.(carwings.BatteryStatus); err == nil && ok {
180+
if err == nil {
186181
return float64(res.StateOfCharge), nil
187182
}
188183

@@ -196,7 +191,7 @@ func (v *CarWings) Status() (api.ChargeStatus, error) {
196191
status := api.StatusA // disconnected
197192

198193
res, err := v.statusG()
199-
if res, ok := res.(carwings.BatteryStatus); err == nil && ok {
194+
if err == nil {
200195
if res.PluginState == carwings.Connected {
201196
status = api.StatusB // connected, not charging
202197
}
@@ -213,7 +208,7 @@ var _ api.VehicleRange = (*CarWings)(nil)
213208
// Range implements the api.VehicleRange interface
214209
func (v *CarWings) Range() (int64, error) {
215210
res, err := v.statusG()
216-
if res, ok := res.(carwings.BatteryStatus); err == nil && ok {
211+
if err == nil {
217212
return int64(res.CruisingRangeACOn) / 1000, nil
218213
}
219214

@@ -226,7 +221,7 @@ var _ api.VehicleClimater = (*CarWings)(nil)
226221
func (v *CarWings) Climater() (active bool, outsideTemp float64, targetTemp float64, err error) {
227222
res, err := v.climateG()
228223

229-
if res, ok := res.(carwings.ClimateStatus); err == nil && ok {
224+
if err == nil {
230225
active = res.Running
231226
targetTemp = float64(res.Temperature)
232227
outsideTemp = targetTemp

vehicle/renault.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@ type Renault struct {
105105
gigya, kamereon configServer
106106
gigyaJwtToken string
107107
accountID string
108-
batteryG func() (interface{}, error)
109-
cockpitG func() (interface{}, error)
110-
hvacG func() (interface{}, error)
108+
batteryG func() (kamereonResponse, error)
109+
cockpitG func() (kamereonResponse, error)
110+
hvacG func() (kamereonResponse, error)
111111
}
112112

113113
func init() {
@@ -150,9 +150,9 @@ func NewRenaultFromConfig(other map[string]interface{}) (api.Vehicle, error) {
150150
})
151151
}
152152

153-
v.batteryG = provider.Cached[](v.batteryAPI, cc.Cache)
154-
v.cockpitG = provider.Cached[](v.cockpitAPI, cc.Cache)
155-
v.hvacG = provider.Cached[](v.hvacAPI, cc.Cache)
153+
v.batteryG = provider.Cached[kamereonResponse](v.batteryAPI, cc.Cache)
154+
v.cockpitG = provider.Cached[kamereonResponse](v.cockpitAPI, cc.Cache)
155+
v.hvacG = provider.Cached[kamereonResponse](v.hvacAPI, cc.Cache)
156156

157157
return v, err
158158
}
@@ -312,7 +312,7 @@ func (v *Renault) kamereonVehicles(accountID string) ([]string, error) {
312312
}
313313

314314
// batteryAPI provides battery-status api response
315-
func (v *Renault) batteryAPI() (interface{}, error) {
315+
func (v *Renault) batteryAPI() (kamereonResponse, error) {
316316
uri := fmt.Sprintf("%s/commerce/v1/accounts/%s/kamereon/kca/car-adapter/v2/cars/%s/battery-status", v.kamereon.Target, v.accountID, v.vin)
317317
res, err := v.kamereonRequest(uri)
318318

@@ -327,7 +327,7 @@ func (v *Renault) batteryAPI() (interface{}, error) {
327327
}
328328

329329
// hvacAPI provides hvac-status api response
330-
func (v *Renault) hvacAPI() (interface{}, error) {
330+
func (v *Renault) hvacAPI() (kamereonResponse, error) {
331331
uri := fmt.Sprintf("%s/commerce/v1/accounts/%s/kamereon/kca/car-adapter/v1/cars/%s/hvac-status", v.kamereon.Target, v.accountID, v.vin)
332332
res, err := v.kamereonRequest(uri)
333333

@@ -360,7 +360,7 @@ func (v *Renault) cockpitAPI() (interface{}, error) {
360360
func (v *Renault) SoC() (float64, error) {
361361
res, err := v.batteryG()
362362

363-
if res, ok := res.(kamereonResponse); err == nil && ok {
363+
if err == nil {
364364
return float64(res.Data.Attributes.BatteryLevel), nil
365365
}
366366

@@ -374,7 +374,7 @@ func (v *Renault) Status() (api.ChargeStatus, error) {
374374
status := api.StatusA // disconnected
375375

376376
res, err := v.batteryG()
377-
if res, ok := res.(kamereonResponse); err == nil && ok {
377+
if err == nil {
378378
if res.Data.Attributes.PlugStatus > 0 {
379379
status = api.StatusB
380380
}
@@ -392,7 +392,7 @@ var _ api.VehicleRange = (*Renault)(nil)
392392
func (v *Renault) Range() (int64, error) {
393393
res, err := v.batteryG()
394394

395-
if res, ok := res.(kamereonResponse); err == nil && ok {
395+
if err == nil {
396396
return int64(res.Data.Attributes.BatteryAutonomy), nil
397397
}
398398

@@ -405,7 +405,7 @@ var _ api.VehicleOdometer = (*Renault)(nil)
405405
func (v *Renault) Odometer() (float64, error) {
406406
res, err := v.cockpitG()
407407

408-
if res, ok := res.(kamereonResponse); err == nil && ok {
408+
if err == nil {
409409
return res.Data.Attributes.TotalMileage, nil
410410
}
411411

@@ -418,7 +418,7 @@ var _ api.VehicleFinishTimer = (*Renault)(nil)
418418
func (v *Renault) FinishTime() (time.Time, error) {
419419
res, err := v.batteryG()
420420

421-
if res, ok := res.(kamereonResponse); err == nil && ok {
421+
if err == nil {
422422
timestamp, err := time.Parse(time.RFC3339, res.Data.Attributes.Timestamp)
423423

424424
if res.Data.Attributes.RemainingTime == nil {
@@ -442,7 +442,7 @@ func (v *Renault) Climater() (active bool, outsideTemp float64, targetTemp float
442442
return false, 0, 0, api.ErrNotAvailable
443443
}
444444

445-
if res, ok := res.(kamereonResponse); err == nil && ok {
445+
if err == nil {
446446
state := strings.ToLower(res.Data.Attributes.HvacStatus)
447447

448448
if state == "" {

0 commit comments

Comments
 (0)