From aa2964d36b0ef16ba84343df45e8aa0a96a73013 Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Sat, 27 Jul 2024 12:42:31 +0200 Subject: [PATCH] Mercedes: fix limit soc panic (#15039) --- vehicle/mercedes/api.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/vehicle/mercedes/api.go b/vehicle/mercedes/api.go index aa61e5bb3..1ba5546d5 100644 --- a/vehicle/mercedes/api.go +++ b/vehicle/mercedes/api.go @@ -97,15 +97,21 @@ func (v *API) Status(vin string) (StatusResponse, error) { res.EvInfo.Battery.ChargingStatus = 3 } - if val, ok := message.Attributes["selectedChargeProgram"]; ok { - res.EvInfo.Battery.SelectedChargeProgram = int(val.GetIntValue()) - val := message.Attributes["chargePrograms"].GetChargeProgramsValue() - res.EvInfo.Battery.SocLimit = int(val.ChargeProgramParameters[res.EvInfo.Battery.SelectedChargeProgram].GetMaxSoc()) + if val, ok := message.Attributes["selectedChargeProgram"]; ok && val != nil { + selectedChargeProgram := val.GetIntValue() + res.EvInfo.Battery.SelectedChargeProgram = int(selectedChargeProgram) + + if cps, ok := message.Attributes["chargePrograms"]; ok && cps != nil { + if cpVal := cps.GetChargeProgramsValue(); cpVal != nil && res.EvInfo.Battery.SelectedChargeProgram < len(cpVal.ChargeProgramParameters) { + if chargeProgramParam := cpVal.ChargeProgramParameters[res.EvInfo.Battery.SelectedChargeProgram]; chargeProgramParam != nil { + res.EvInfo.Battery.SocLimit = int(chargeProgramParam.GetMaxSoc()) + } + } + } } else { - if val, ok := message.Attributes["maxSoc"]; ok { + if val, ok := message.Attributes["maxSoc"]; ok && val != nil { res.EvInfo.Battery.SocLimit = int(val.GetIntValue()) } } - return res, err }