From 3477ad31fd7ff4381815607797535e5e8727cfe2 Mon Sep 17 00:00:00 2001 From: andig Date: Tue, 30 Nov 2021 21:07:45 +0100 Subject: [PATCH] Fiat: handle evInfo empty for some vehicles (#1960) --- vehicle/fiat/provider.go | 12 ++++++++++++ vehicle/fiat/types.go | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/vehicle/fiat/provider.go b/vehicle/fiat/provider.go index c67f4887e..f32dcfd2c 100644 --- a/vehicle/fiat/provider.go +++ b/vehicle/fiat/provider.go @@ -85,6 +85,10 @@ func (v *Provider) status(statusG func() (StatusResponse, error)) (StatusRespons func (v *Provider) SoC() (float64, error) { res, err := v.statusG() if res, ok := res.(StatusResponse); err == nil && ok { + if res.EvInfo == nil { + return 0, api.ErrNotAvailable + } + return res.EvInfo.Battery.StateOfCharge, nil } @@ -97,6 +101,10 @@ var _ api.VehicleRange = (*Provider)(nil) func (v *Provider) Range() (int64, error) { res, err := v.statusG() if res, ok := res.(StatusResponse); err == nil && ok { + if res.EvInfo == nil { + return 0, api.ErrNotAvailable + } + return int64(res.EvInfo.Battery.DistanceToEmpty.Value), nil } @@ -123,6 +131,10 @@ func (v *Provider) Status() (api.ChargeStatus, error) { res, err := v.statusG() if res, ok := res.(StatusResponse); err == nil && ok { + if res.EvInfo == nil { + return api.StatusNone, api.ErrNotAvailable + } + if res.EvInfo.Battery.PlugInStatus { status = api.StatusB // connected, not charging } diff --git a/vehicle/fiat/types.go b/vehicle/fiat/types.go index a88da991b..a1632975c 100644 --- a/vehicle/fiat/types.go +++ b/vehicle/fiat/types.go @@ -23,7 +23,7 @@ type StatusResponse struct { } Timestamp TimeMillis } - EvInfo struct { + EvInfo *struct { Battery struct { ChargingLevel string // LEVEL_2 ChargingStatus string // CHARGING @@ -38,7 +38,7 @@ type StatusResponse struct { TotalRange int // 17 } Timestamp TimeMillis - } + } `json:",omitempty"` Timestamp TimeMillis }