Add bluelink vehicle range api (#632)

This commit is contained in:
andig 2021-02-01 09:51:52 +01:00 • committed by GitHub
parent 4a434767a4
commit 9247a3be79
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -81,6 +81,7 @@ type response struct {
Value, Unit int
}
}
DrvDistance []drvDistance
}
Vehicles []struct {
VehicleID string
@ -88,6 +89,14 @@ type response struct {
}
}
type drvDistance struct {
RangeByFuel struct {
EvModeRange struct {
Value int
}
}
}
// New creates a new BlueLink API
func New(log *util.Logger, user, password string, cache time.Duration, config Config) (*API, error) {
if err := mergo.Merge(&config, defaults); err != nil {
@ -336,7 +345,7 @@ func (v *API) statusAPI() (interface{}, error) {
return res, err
}
// ChargeState implements the Vehicle.ChargeState interface
// ChargeState implements the api.ChargeState interface
func (v *API) ChargeState() (float64, error) {
res, err := v.apiG()
@ -347,7 +356,7 @@ func (v *API) ChargeState() (float64, error) {
return 0, err
}
// FinishTime implements the Vehicle.ChargeFinishTimer interface
// FinishTime implements the api.ChargeFinishTimer interface
func (v *API) FinishTime() (time.Time, error) {
res, err := v.apiG()
@ -363,3 +372,18 @@ func (v *API) FinishTime() (time.Time, error) {
return time.Time{}, err
}
// Range implements the api.VehicleRange interface
func (v *API) Range() (int64, error) {
res, err := v.apiG()
if res, ok := res.(response); err == nil && ok {
if dist := res.ResMsg.EvStatus.DrvDistance; len(dist) == 1 {
return int64(dist[0].RangeByFuel.EvModeRange.Value), nil
}
return 0, api.ErrNotAvailable
}
return 0, err
}