From d5ba6797d6835e7b15e9163bb1e33dd361adf173 Mon Sep 17 00:00:00 2001 From: Tobias Bayer Date: Thu, 15 Sep 2022 11:46:41 +0200 Subject: [PATCH] Bluelink: add soc limit (#4452) --- vehicle/bluelink/provider.go | 17 +++++++++++++++++ vehicle/bluelink/types.go | 14 +++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/vehicle/bluelink/provider.go b/vehicle/bluelink/provider.go index 58034e657..36fe501fc 100644 --- a/vehicle/bluelink/provider.go +++ b/vehicle/bluelink/provider.go @@ -168,3 +168,20 @@ func (v *Provider) Odometer() (float64, error) { res, err := v.statusLG() return res.ResMsg.VehicleStatusInfo.Odometer.Value, err } + +var _ api.SocLimiter = (*Provider)(nil) + +// TargetSoC implements the api.SocLimiter interface +func (v *Provider) TargetSoC() (float64, error) { + res, err := v.statusG() + + if err == nil { + for _, targetSOC := range res.EvStatus.ReservChargeInfos.TargetSocList { + if targetSOC.PlugType == plugTypeAC { + return float64(targetSOC.TargetSocLevel), nil + } + } + } + + return 0, err +} diff --git a/vehicle/bluelink/types.go b/vehicle/bluelink/types.go index 162b85d23..a5cbf7400 100644 --- a/vehicle/bluelink/types.go +++ b/vehicle/bluelink/types.go @@ -38,7 +38,8 @@ type VehicleStatus struct { Value, Unit int } } - DrvDistance []DrivingDistance + DrvDistance []DrivingDistance + ReservChargeInfos ReservChargeInfo } Vehicles []Vehicle } @@ -58,6 +59,8 @@ type Odometer struct { const ( timeFormat = "20060102150405 -0700" // Note: must add timeOffset timeOffset = " +0100" + + plugTypeAC = 1 ) func (d *VehicleStatus) Updated() (time.Time, error) { @@ -71,3 +74,12 @@ type DrivingDistance struct { } } } + +type ReservChargeInfo struct { + TargetSocList []TargetSoc +} + +type TargetSoc struct { + TargetSocLevel int + PlugType int +}