Skip to content

Commit

Permalink
Loadpoint: make sure restoring settings publishes current values (evc…
Browse files Browse the repository at this point in the history
  • Loading branch information
andig authored Jan 13, 2024
1 parent 419aae3 commit 90c0f96
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 18 deletions.
28 changes: 14 additions & 14 deletions core/loadpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -260,9 +260,6 @@ func NewLoadpointFromConfig(log *util.Logger, settings *Settings, other map[stri
lp.mode = api.ModeOff
}

// restore settings
lp.restoreSettings()

return lp, nil
}

Expand Down Expand Up @@ -300,20 +297,20 @@ func NewLoadpoint(log *util.Logger, settings *Settings) *Loadpoint {

// restoreSettings restores loadpoint settings
func (lp *Loadpoint) restoreSettings() {
if v, err := lp.settings.String(keys.Mode); err == nil {
lp.mode = api.ChargeMode(v)
}
if v, err := lp.settings.Time(keys.PlanTime); err == nil {
lp.planTime = v
if v, err := lp.settings.String(keys.Mode); err == nil && v != "" {
lp.setMode(api.ChargeMode(v))
}
if v, err := lp.settings.Float(keys.PlanEnergy); err == nil {
lp.planEnergy = v
if v, err := lp.settings.Int(keys.LimitSoc); err == nil && v > 0 {
lp.setLimitSoc(int(v))
}
if v, err := lp.settings.Int(keys.LimitSoc); err == nil {
lp.limitSoc = int(v)
if v, err := lp.settings.Float(keys.LimitEnergy); err == nil && v > 0 {
lp.setLimitEnergy(v)
}
if v, err := lp.settings.Float(keys.LimitEnergy); err == nil {
lp.limitEnergy = v

t, err1 := lp.settings.Time(keys.PlanTime)
v, err2 := lp.settings.Float(keys.PlanEnergy)
if err1 == nil && err2 == nil {
lp.setPlanEnergy(t, v)
}
}

Expand Down Expand Up @@ -570,6 +567,9 @@ func (lp *Loadpoint) Prepare(uiChan chan<- util.Param, pushChan chan<- push.Even
_ = lp.bus.Subscribe(evChargeCurrent, lp.evChargeCurrentHandler)
_ = lp.bus.Subscribe(evVehicleSoc, lp.evVehicleSocProgressHandler)

// restore settings
lp.restoreSettings()

// publish initial values
lp.publish(keys.Title, lp.Title())
lp.publish(keys.Mode, lp.GetMode())
Expand Down
11 changes: 8 additions & 3 deletions core/loadpoint_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,13 @@ func (lp *Loadpoint) GetMode() api.ChargeMode {
return lp.mode
}

// setMode sets loadpoint charge mode (no mutex)
func (lp *Loadpoint) setMode(mode api.ChargeMode) {
lp.mode = mode
lp.publish(keys.Mode, mode)
lp.settings.SetString(keys.Mode, string(mode))
}

// SetMode sets loadpoint charge mode
func (lp *Loadpoint) SetMode(mode api.ChargeMode) {
lp.Lock()
Expand All @@ -48,9 +55,7 @@ func (lp *Loadpoint) SetMode(mode api.ChargeMode) {

// apply immediately
if lp.mode != mode {
lp.mode = mode
lp.publish(keys.Mode, mode)
lp.settings.SetString(keys.Mode, string(mode))
lp.setMode(mode)

// reset timers
switch mode {
Expand Down
5 changes: 4 additions & 1 deletion core/loadpoint_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,7 @@ func TestDisableAndEnableAtTargetSoc(t *testing.T) {
charger.EXPECT().Enabled().Return(lp.enabled, nil)
charger.EXPECT().MaxCurrent(int64(maxA)).Return(nil)
lp.Update(500, false, false, false, 0, nil, nil)
ctrl.Finish()

t.Log("charging above target - soc deactivates charger")
clock.Add(5 * time.Minute)
Expand All @@ -439,19 +440,22 @@ func TestDisableAndEnableAtTargetSoc(t *testing.T) {
charger.EXPECT().Enabled().Return(lp.enabled, nil)
charger.EXPECT().Enable(false).Return(nil)
lp.Update(500, false, false, false, 0, nil, nil)
ctrl.Finish()

t.Log("deactivated charger changes status to B")
clock.Add(5 * time.Minute)
vehicle.EXPECT().Soc().Return(95.0, nil)
charger.EXPECT().Status().Return(api.StatusB, nil)
charger.EXPECT().Enabled().Return(lp.enabled, nil)
lp.Update(-5000, false, false, false, 0, nil, nil)
ctrl.Finish()

t.Log("soc has fallen below target - soc update prevented by timer")
clock.Add(5 * time.Minute)
charger.EXPECT().Status().Return(api.StatusB, nil)
charger.EXPECT().Enabled().Return(lp.enabled, nil)
lp.Update(-5000, false, false, false, 0, nil, nil)
ctrl.Finish()

t.Log("soc has fallen below target - soc update timer expired")
clock.Add(pollInterval)
Expand All @@ -460,7 +464,6 @@ func TestDisableAndEnableAtTargetSoc(t *testing.T) {
charger.EXPECT().Enabled().Return(lp.enabled, nil)
charger.EXPECT().Enable(true).Return(nil)
lp.Update(-5000, false, false, false, 0, nil, nil)

ctrl.Finish()
}

Expand Down

0 comments on commit 90c0f96

Please sign in to comment.