Synchronize enabled state with charger if state doesn't match (#172)
This commit is contained in:
parent
044eb8732e
commit
c02802faa1
2 changed files with 27 additions and 0 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue