From 4c6105faa76cf95cc06c045c037e6e08c23db8d8 Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 31 Aug 2023 18:11:21 +0200 Subject: [PATCH] OpenWB: fix enabled state detection (#9651) --- charger/helper.go | 14 ++++++++++++++ charger/openwb.go | 7 ++++++- charger/twc3.go | 16 ++++------------ 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/charger/helper.go b/charger/helper.go index c176cb26b..69a7cfad0 100644 --- a/charger/helper.go +++ b/charger/helper.go @@ -4,6 +4,8 @@ import ( "bytes" "fmt" "strings" + + "github.com/evcc-io/evcc/api" ) // ensureCharger extracts VIN from list of VINs returned from `list` function @@ -52,3 +54,15 @@ func ensureChargerWithFeature[Charger, Feature any]( func bytesAsString(b []byte) string { return strings.TrimSpace(string(bytes.TrimLeft(b, "\x00"))) } + +// verifyEnabled validates the enabled state against the charger status +func verifyEnabled(c api.Charger, enabled bool) (bool, error) { + if enabled { + return true, nil + } + + status, err := c.Status() + + // always treat charging as enabled + return status == api.StatusC, err +} diff --git a/charger/openwb.go b/charger/openwb.go index 49256438d..4b0d765d4 100644 --- a/charger/openwb.go +++ b/charger/openwb.go @@ -177,7 +177,12 @@ func (m *OpenWB) Enable(enable bool) error { } func (m *OpenWB) Enabled() (bool, error) { - return m.enabled, nil + enabled, err := verifyEnabled(m, m.enabled) + if err == nil { + m.enabled = enabled + } + + return enabled, err } func (m *OpenWB) Status() (api.ChargeStatus, error) { diff --git a/charger/twc3.go b/charger/twc3.go index 17e34b7f6..c086ca9b0 100644 --- a/charger/twc3.go +++ b/charger/twc3.go @@ -91,20 +91,12 @@ func NewTwc3FromConfig(other map[string]interface{}) (api.Charger, error) { // Enabled implements the api.Charger interface func (c *Twc3) Enabled() (bool, error) { - if c.enabled { - return c.enabled, nil + enabled, err := verifyEnabled(c, c.enabled) + if err == nil { + c.enabled = enabled } - status, err := c.Status() - if err != nil { - return c.enabled, err - } - - if status == api.StatusC { - c.enabled = true - } - - return c.enabled, nil + return enabled, err } // Enable implements the api.Charger interface