From 52f5bc9927a7e3eafb453318072ceffb1c4a26b5 Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 31 May 2023 21:02:08 +0200 Subject: [PATCH] Porsche: handle invalid emobility responses (#8243) --- vehicle/porsche/provider.go | 16 ++++++++++++++-- vehicle/porsche/types.go | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/vehicle/porsche/provider.go b/vehicle/porsche/provider.go index 573ab38fb..c74d635a8 100644 --- a/vehicle/porsche/provider.go +++ b/vehicle/porsche/provider.go @@ -54,7 +54,7 @@ func (v *Provider) Soc() (float64, error) { } res3, err := v.emobilityG() - if err == nil { + if err == nil && res3.BatteryChargeStatus != nil { return float64(res3.BatteryChargeStatus.StateOfChargeInPercentage), nil } @@ -82,7 +82,7 @@ func (v *Provider) Range() (int64, error) { } res3, err := v.emobilityG() - if err == nil { + if err == nil && res3.BatteryChargeStatus != nil { return res3.BatteryChargeStatus.RemainingERange.ValueInKilometers, nil } @@ -118,6 +118,10 @@ func (v *Provider) FinishTime() (time.Time, error) { res2, err := v.emobilityG() if err == nil { + if res2.BatteryChargeStatus == nil { + return time.Time{}, api.ErrNotAvailable + } + return time.Now().Add(time.Duration(res2.BatteryChargeStatus.RemainingChargeTimeUntil100PercentInMinutes) * time.Minute), err } @@ -154,6 +158,10 @@ func (v *Provider) Status() (api.ChargeStatus, error) { res2, err := v.emobilityG() if err == nil { + if res2.BatteryChargeStatus == nil { + return api.StatusNone, api.ErrNotAvailable + } + switch res2.BatteryChargeStatus.PlugState { case "DISCONNECTED": return api.StatusA, nil @@ -195,6 +203,10 @@ func (v *Provider) Climater() (bool, error) { res2, err := v.emobilityG() if err == nil { + if res2.BatteryChargeStatus == nil { + return false, api.ErrNotAvailable + } + switch res2.DirectClimatisation.ClimatisationState { case "OFF": return false, nil diff --git a/vehicle/porsche/types.go b/vehicle/porsche/types.go index fd4e0cad3..b05adb31c 100644 --- a/vehicle/porsche/types.go +++ b/vehicle/porsche/types.go @@ -200,7 +200,7 @@ type CapabilitiesResponse struct { } type EmobilityResponse struct { - BatteryChargeStatus struct { + BatteryChargeStatus *struct { ChargeRate struct { Unit string Value float64