From a3af19a023dee6a92a15077afcb644ebf9075b5c Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 21 Sep 2025 12:34:57 +0200 Subject: [PATCH] chore: add charger disable wrapper (#23735) --- charger/helper.go | 22 ++++++++++++++++++++++ charger/mennekes-compact.go | 16 ++++------------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/charger/helper.go b/charger/helper.go index ac60e70e1..214ad8194 100644 --- a/charger/helper.go +++ b/charger/helper.go @@ -81,3 +81,25 @@ func verifyEnabled(c api.Charger, enabled bool) (bool, error) { // always treat charging as enabled return status == api.StatusC, err } + +// whenDisabled disables charger before executing fun() +func whenDisabled(wb api.Charger, fun func() error) error { + enabled, err := wb.Enabled() + if err != nil { + return err + } + + if !enabled { + return fun() + } + + if err := wb.Enable(false); err != nil { + return err + } + + if err := fun(); err != nil { + return err + } + + return wb.Enable(true) +} diff --git a/charger/mennekes-compact.go b/charger/mennekes-compact.go index 94636c190..f0aa0b9d7 100644 --- a/charger/mennekes-compact.go +++ b/charger/mennekes-compact.go @@ -286,18 +286,10 @@ func (wb *MennekesCompact) phases1p3p(phases int) error { u = 1 } - // temporarily disable charger during phase switching - if en, err := wb.Enabled(); err == nil && en { - if err := wb.Enable(false); err != nil { - return err - } - - defer wb.Enable(true) - } - - _, err := wb.conn.WriteSingleRegister(mennekesRegRequestedPhases, u) - - return err + return whenDisabled(wb, func() error { + _, err := wb.conn.WriteSingleRegister(mennekesRegRequestedPhases, u) + return err + }) } var _ api.Diagnosis = (*MennekesCompact)(nil)