From d4cfa052bd60b7bcd54adf185cd38bf319040aee Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 15 Jun 2023 12:19:19 +0200 Subject: [PATCH] Charger: add expection handling for status E (#8460) --- api/api.go | 9 +++++++++ charger/alfen.go | 2 +- charger/innogy.go | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/api/api.go b/api/api.go index bf0d11438..49a42a744 100644 --- a/api/api.go +++ b/api/api.go @@ -54,6 +54,15 @@ func ChargeStatusString(s string) (ChargeStatus, error) { } } +// ChargeStatusStringWithMapping converts a string to ChargeStatus. In case of error, mapping is applied. +func ChargeStatusStringWithMapping(s string, m map[ChargeStatus]ChargeStatus) (ChargeStatus, error) { + status, err := ChargeStatusString(s) + if mappedStatus, ok := m[status]; ok && err != nil { + return mappedStatus, nil + } + return status, err +} + // String implements Stringer func (c ChargeStatus) String() string { return string(c) diff --git a/charger/alfen.go b/charger/alfen.go index ba5c7f960..7d0412f80 100644 --- a/charger/alfen.go +++ b/charger/alfen.go @@ -129,7 +129,7 @@ func (wb *Alfen) Status() (api.ChargeStatus, error) { switch r := rune(b[0]); r { case 'A', 'B', 'D', 'E', 'F': - return api.ChargeStatusString(string(r)) + return api.ChargeStatusStringWithMapping(string(r), map[api.ChargeStatus]api.ChargeStatus{api.StatusE: api.StatusA}) case 'C': // C1 is "connected" if rune(b[1]) == '1' { diff --git a/charger/innogy.go b/charger/innogy.go index 7c67c011d..7d8c1fa1b 100644 --- a/charger/innogy.go +++ b/charger/innogy.go @@ -98,7 +98,7 @@ func (wb *Innogy) Status() (api.ChargeStatus, error) { switch r := rune(b[0]); r { case 'A', 'B', 'D', 'E', 'F': - return api.ChargeStatusString(string(r)) + return api.ChargeStatusStringWithMapping(string(r), map[api.ChargeStatus]api.ChargeStatus{api.StatusE: api.StatusA}) case 'C': // C1 is "connected" if rune(b[1]) == '1' {