Loadpoint: make sure restoring settings publishes current values (#11637)

This commit is contained in:
andig 2024-01-13 10:37:29 +01:00 • committed by GitHub
parent 419aae3c2d
commit 90c0f96944
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 18 deletions

View file

@ -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
}
@ -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.String(keys.Mode); err == nil && v != "" {
lp.setMode(api.ChargeMode(v))
}
if v, err := lp.settings.Time(keys.PlanTime); err == nil {
lp.planTime = v
if v, err := lp.settings.Int(keys.LimitSoc); err == nil && v > 0 {
lp.setLimitSoc(int(v))
}
if v, err := lp.settings.Float(keys.PlanEnergy); err == nil {
lp.planEnergy = v
if v, err := lp.settings.Float(keys.LimitEnergy); err == nil && v > 0 {
lp.setLimitEnergy(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 {
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)
}
}
@ -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())

View file

@ -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()
@ -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 {

View file

@ -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)
@ -439,6 +440,7 @@ 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)
@ -446,12 +448,14 @@ func TestDisableAndEnableAtTargetSoc(t *testing.T) {
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)
@ -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()
}