diff --git a/core/loadpoint.go b/core/loadpoint.go index 191374847..f198cb6da 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -494,6 +494,19 @@ func (lp *LoadPoint) resetGuard() { lp.guardUpdated = lp.clock.Now().Add(-2 * lp.GuardDuration) } +// syncSettings synchronizes charger settings to expected state +func (lp *LoadPoint) syncSettings() { + enabled, err := lp.charger.Enabled() + if err == nil && enabled != lp.enabled { + log.ERROR.Printf("%s sync enabled", lp.Name) + err = lp.charger.Enable(lp.enabled) + } + + if err != nil { + log.ERROR.Printf("%s charge controller error: %v", lp.Name, err) + } +} + // update is the main control function. It reevaluates meters and charger state func (lp *LoadPoint) update() { // read and publish meters first @@ -513,6 +526,11 @@ func (lp *LoadPoint) update() { lp.publish("connected", lp.connected()) lp.publish("charging", lp.charging) + // sync settings with charger + if lp.status != api.StatusA { + lp.syncSettings() + } + // check if car connected and ready for charging var err error diff --git a/core/loadpoint_test.go b/core/loadpoint_test.go index 3caec8600..d19be765f 100644 --- a/core/loadpoint_test.go +++ b/core/loadpoint_test.go @@ -185,6 +185,11 @@ func TestInitialUpdate(t *testing.T) { cm.EXPECT().CurrentPower().Return(minPower, nil) } + // syncSettings + if tc.status != api.StatusA { + wb.EXPECT().Enabled().Return(true, nil) + } + // disable if not connected if tc.mode == api.ModeOff { wb.EXPECT().Enable(false) @@ -262,6 +267,7 @@ func TestImmediateOnOff(t *testing.T) { wb.EXPECT().MaxCurrent(lpMaxCurrent) } + wb.EXPECT().Enabled().Return(true, nil) // syncSettings lp.update() // max current if connected & mode now @@ -294,6 +300,7 @@ func TestImmediateOnOff(t *testing.T) { wb.EXPECT().MaxCurrent(2 * lpMinCurrent) + wb.EXPECT().Enabled().Return(true, nil) // syncSettings lp.update() // -- round 3 @@ -310,6 +317,8 @@ func TestImmediateOnOff(t *testing.T) { wb.EXPECT().MaxCurrent(lpMinCurrent) lp.SetMode(api.ModeOff) + + wb.EXPECT().Enabled().Return(true, nil) // syncSettings lp.update() ctrl.Finish()