From 8424fc010c340d5d8b01d6fd86d65f4530f37621 Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 30 Dec 2022 16:40:30 +0100 Subject: [PATCH] Smart: fix status detection --- vehicle/smart/provider.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/vehicle/smart/provider.go b/vehicle/smart/provider.go index dd9cb010f..2b29fcacf 100644 --- a/vehicle/smart/provider.go +++ b/vehicle/smart/provider.go @@ -55,20 +55,31 @@ var _ api.ChargeState = (*Provider)(nil) // Range implements the api.VehicleRange interface func (v *Provider) Status() (api.ChargeStatus, error) { res, err := v.statusG() + if err != nil { + return api.StatusNone, err + } - switch v := res.PreCond.Data.ChargingStatus.Status; v { + cs := res.PreCond.Data.ChargingStatus + if cs.Status != 0 { + return api.StatusNone, fmt.Errorf("unknown status/value: %d/%d", cs.Status, cs.Value) + } + + // confirmed status/value/active combinations + // 0/0/active: charging + // 0/2/*: connected + // 0/3/*: disconnected + switch cs.Value { case 0: if res.PreCond.Data.ChargingActive.Value { - return api.StatusC, err + return api.StatusC, nil } - return api.StatusB, err + return api.StatusB, nil + case 1, 2: + return api.StatusB, nil case 3: - return api.StatusA, err + return api.StatusA, nil default: - if err == nil { - err = fmt.Errorf("unknown status: %d", v) - } - return api.StatusNone, err + return api.StatusNone, fmt.Errorf("unknown status/value: %d/%d", cs.Status, cs.Value) } }