From a3ad69c442dedd4c6054d55097139931a3611c84 Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Tue, 23 Jul 2024 19:05:20 +0200 Subject: [PATCH] Mercedes: add limit soc (#15006) --- vehicle/mercedes/api.go | 10 ++++++++++ vehicle/mercedes/provider.go | 8 ++++++++ vehicle/mercedes/types.go | 8 +++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/vehicle/mercedes/api.go b/vehicle/mercedes/api.go index bb348cab7..aa61e5bb3 100644 --- a/vehicle/mercedes/api.go +++ b/vehicle/mercedes/api.go @@ -97,5 +97,15 @@ 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()) + } else { + if val, ok := message.Attributes["maxSoc"]; ok { + res.EvInfo.Battery.SocLimit = int(val.GetIntValue()) + } + } + return res, err } diff --git a/vehicle/mercedes/provider.go b/vehicle/mercedes/provider.go index de2f5fc97..babbb57da 100644 --- a/vehicle/mercedes/provider.go +++ b/vehicle/mercedes/provider.go @@ -42,6 +42,14 @@ func (v *Provider) Odometer() (float64, error) { return float64(res.VehicleInfo.Odometer.Value), err } +var _ api.SocLimiter = (*Provider)(nil) + +// GetLimitSoc implements the api.SocLimiter interface +func (v *Provider) GetLimitSoc() (int64, error) { + res, err := v.dataG() + return int64(res.EvInfo.Battery.SocLimit), err +} + var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface diff --git a/vehicle/mercedes/types.go b/vehicle/mercedes/types.go index 01b033126..98278087c 100644 --- a/vehicle/mercedes/types.go +++ b/vehicle/mercedes/types.go @@ -60,9 +60,11 @@ type StatusResponse struct { Value int Unit string } - StateOfCharge float64 // 75 - EndOfChargeTime int // Minutes after midnight - TotalRange int // 17 + StateOfCharge float64 // 75 + EndOfChargeTime int // Minutes after midnight + TotalRange int // 17 + SocLimit int // 50-100 + SelectedChargeProgram int } Timestamp time.Time }