From aa72d39da0495eef1318e72da9e2979d5d703b04 Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Mon, 15 Aug 2022 15:24:08 +0200 Subject: [PATCH 1/6] Heidelberg: Unlock on restart Should fix #3596 --- charger/heidelberg-ec.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/charger/heidelberg-ec.go b/charger/heidelberg-ec.go index 5be8b92d67..6cdd49a84e 100644 --- a/charger/heidelberg-ec.go +++ b/charger/heidelberg-ec.go @@ -93,6 +93,9 @@ func NewHeidelbergEC(uri, device, comset string, baudrate int, proto modbus.Prot // disable standby to prevent comm loss err = wb.set(hecRegStandbyConfig, hecStandbyDisabled) + + // unlock + err = wb.set(hecRegRemoteLock, 1) return wb, err } From 2ea5091f1beee7026666d8f1f86165fa7f81b913 Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Mon, 15 Aug 2022 15:29:53 +0200 Subject: [PATCH 2/6] wip --- charger/heidelberg-ec.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charger/heidelberg-ec.go b/charger/heidelberg-ec.go index 6cdd49a84e..1915f67c8d 100644 --- a/charger/heidelberg-ec.go +++ b/charger/heidelberg-ec.go @@ -92,7 +92,7 @@ func NewHeidelbergEC(uri, device, comset string, baudrate int, proto modbus.Prot } // disable standby to prevent comm loss - err = wb.set(hecRegStandbyConfig, hecStandbyDisabled) + _ = wb.set(hecRegStandbyConfig, hecStandbyDisabled) // unlock err = wb.set(hecRegRemoteLock, 1) From cf6933aff2152278680054901101f26a00c60455 Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Mon, 15 Aug 2022 15:34:05 +0200 Subject: [PATCH 3/6] wip --- charger/heidelberg-ec.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charger/heidelberg-ec.go b/charger/heidelberg-ec.go index 1915f67c8d..0bb14900c6 100644 --- a/charger/heidelberg-ec.go +++ b/charger/heidelberg-ec.go @@ -93,7 +93,7 @@ func NewHeidelbergEC(uri, device, comset string, baudrate int, proto modbus.Prot // disable standby to prevent comm loss _ = wb.set(hecRegStandbyConfig, hecStandbyDisabled) - + // unlock err = wb.set(hecRegRemoteLock, 1) From 3e3adb3679a648ac544a4fdfed40a7c003cbf9d4 Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Mon, 15 Aug 2022 17:32:44 +0200 Subject: [PATCH 4/6] handle error --- charger/heidelberg-ec.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/charger/heidelberg-ec.go b/charger/heidelberg-ec.go index 0bb14900c6..e360a8723a 100644 --- a/charger/heidelberg-ec.go +++ b/charger/heidelberg-ec.go @@ -92,7 +92,10 @@ func NewHeidelbergEC(uri, device, comset string, baudrate int, proto modbus.Prot } // disable standby to prevent comm loss - _ = wb.set(hecRegStandbyConfig, hecStandbyDisabled) + err = wb.set(hecRegStandbyConfig, hecStandbyDisabled) + if err != nil { + return nil, err + } // unlock err = wb.set(hecRegRemoteLock, 1) From d0cd056d6f4c2cf77d0d508e937cefe2ca369745 Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Mon, 15 Aug 2022 18:13:18 +0200 Subject: [PATCH 5/6] Always unlock after locking --- charger/heidelberg-ec.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/charger/heidelberg-ec.go b/charger/heidelberg-ec.go index e360a8723a..7839d26a50 100644 --- a/charger/heidelberg-ec.go +++ b/charger/heidelberg-ec.go @@ -279,13 +279,14 @@ var _ api.Resurrector = (*HeidelbergEC)(nil) // WakeUp implements the api.Resurrector interface func (wb *HeidelbergEC) WakeUp() error { // force status F by locking - err := wb.set(hecRegRemoteLock, 0) - if err == nil { - // Always takes at least ~10 sec to return to normal operation + if wb.set(hecRegRemoteLock, 0) == nil { + // Takes at least ~10 sec to return to normal operation // after locking even if unlocking immediately. wb.wakeup = true - // return to normal operation by unlocking after ~10 sec - err = wb.set(hecRegRemoteLock, 1) } + + // return to normal operation by unlocking after ~10 sec + err := wb.set(hecRegRemoteLock, 1) + return err } From 34cbb81c1d5163f1b503d1b1d764210672a4b98a Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Tue, 16 Aug 2022 10:40:16 +0200 Subject: [PATCH 6/6] check RemoteLock in Status() --- charger/heidelberg-ec.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/charger/heidelberg-ec.go b/charger/heidelberg-ec.go index 7839d26a50..7acebf30a3 100644 --- a/charger/heidelberg-ec.go +++ b/charger/heidelberg-ec.go @@ -93,12 +93,6 @@ func NewHeidelbergEC(uri, device, comset string, baudrate int, proto modbus.Prot // disable standby to prevent comm loss err = wb.set(hecRegStandbyConfig, hecStandbyDisabled) - if err != nil { - return nil, err - } - - // unlock - err = wb.set(hecRegRemoteLock, 1) return wb, err } @@ -137,6 +131,19 @@ func (wb *HeidelbergEC) Status() (api.ChargeStatus, error) { case 9: return api.StatusE, nil case 10: + // ensure RemoteLock is disabled after wake-up + l, err := wb.conn.ReadInputRegisters(hecRegRemoteLock, 1) + if err != nil { + return api.StatusNone, err + } + if binary.BigEndian.Uint16(l) != 1 { + // unlock + err = wb.set(hecRegRemoteLock, 1) + if err != nil { + return api.StatusNone, err + } + } + if wb.wakeup { // keep status B2 during wakeup return api.StatusB, nil