From 1263a60cc5838cf0a2cdee708da9757a804448bf Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 6 May 2020 21:04:05 +0200 Subject: [PATCH] Clarify code structure (#109) --- core/loadpoint.go | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/core/loadpoint.go b/core/loadpoint.go index 7d8d497b6..3cef4af21 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -293,14 +293,14 @@ func (lp *LoadPoint) connected() bool { // chargingCycle detects charge cycle start and stop events and manages the // charge energy counter and charge timer. It guards against duplicate invocation. -func (lp *LoadPoint) chargingCycle(enable bool) { - if enable == lp.charging { +func (lp *LoadPoint) chargingCycle(start bool) { + if start == lp.charging { return } - lp.charging = enable + lp.charging = start - if enable { + if start { log.INFO.Printf("%s start charging ->", lp.Name) lp.bus.Publish(evStartCharge) } else { @@ -309,14 +309,13 @@ func (lp *LoadPoint) chargingCycle(enable bool) { } } -// updateChargeStatus updates car status and stops charging if car disconnected -func (lp *LoadPoint) updateChargeStatus() api.ChargeStatus { - // abort if no vehicle connected +// updateChargeStatus updates car status and detects car connected/disconnected events +func (lp *LoadPoint) updateChargeStatus() error { status, err := lp.charger.Status() if err != nil { - log.ERROR.Printf("%s charger error: %v", lp.Name, err) - return api.StatusNone + return err } + log.DEBUG.Printf("%s charger status: %s", lp.Name, status) if prevStatus := lp.status; status != prevStatus { @@ -342,7 +341,7 @@ func (lp *LoadPoint) updateChargeStatus() api.ChargeStatus { lp.chargingCycle(status == api.StatusC) } - return status + return nil } func (lp *LoadPoint) maxCurrent(mode api.ChargeMode) int64 { @@ -432,7 +431,10 @@ func (lp *LoadPoint) updateMeters() (err error) { // update is the main control function. It reevaluates meters and charger state func (lp *LoadPoint) update() { - lp.updateChargeStatus() + if err := retry.Do(lp.updateChargeStatus, retry.Attempts(3)); err != nil { + log.ERROR.Printf("%s charger error: %v", lp.Name, err) + return + } lp.publish("mode", string(lp.GetMode())) lp.publish("connected", lp.connected())