From 5bd484f5214e2af121b704393c67227c67dc8ed4 Mon Sep 17 00:00:00 2001 From: andig Date: Wed, 3 Jan 2024 10:06:37 +0100 Subject: [PATCH] Fix battery control not persisted (#11439) --- core/site.go | 6 ++++-- core/site_api.go | 2 +- core/site_battery.go | 4 ++++ meter/meter.go | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/site.go b/core/site.go index a76807bd6..5d234ea94 100644 --- a/core/site.go +++ b/core/site.go @@ -205,7 +205,7 @@ func NewSiteFromConfig( // revert battery mode on shutdown shutdown.Register(func() { - if mode := site.GetBatteryMode(); mode != api.BatteryUnknown && mode != api.BatteryNormal { + if mode := site.GetBatteryMode(); batteryModeModified(mode) { if err := site.updateBatteryMode(api.BatteryNormal); err != nil { site.log.ERROR.Println("battery mode:", err) } @@ -249,7 +249,9 @@ func (site *Site) restoreSettings() error { } } if v, err := settings.Bool(keys.BatteryDischargeControl); err == nil { - site.batteryDischargeControl = v + if err := site.SetBatteryDischargeControl(v); err != nil { + return err + } } return nil } diff --git a/core/site_api.go b/core/site_api.go index d95e6fcfd..915a8edbd 100644 --- a/core/site_api.go +++ b/core/site_api.go @@ -225,7 +225,7 @@ func (site *Site) SetBatteryDischargeControl(val bool) error { if site.GetBatteryDischargeControl() != val { // reset to normal when disabling - if mode := site.GetBatteryMode(); mode != api.BatteryNormal { + if mode := site.GetBatteryMode(); !val && batteryModeModified(mode) { if err := site.updateBatteryMode(api.BatteryNormal); err != nil { return err } diff --git a/core/site_battery.go b/core/site_battery.go index 0492fdff5..fc26bb412 100644 --- a/core/site_battery.go +++ b/core/site_battery.go @@ -6,6 +6,10 @@ import ( "github.com/evcc-io/evcc/core/loadpoint" ) +func batteryModeModified(mode api.BatteryMode) bool { + return mode != api.BatteryUnknown && mode != api.BatteryNormal +} + // GetBatteryMode returns the battery mode func (site *Site) GetBatteryMode() api.BatteryMode { site.RLock() diff --git a/meter/meter.go b/meter/meter.go index 3a2743473..f7893ae86 100644 --- a/meter/meter.go +++ b/meter/meter.go @@ -96,7 +96,7 @@ func NewConfigurableFromConfig(other map[string]interface{}) (api.Meter, error) batModeS = cc.battery.LimitController(socG, limitSocS) case cc.BatteryMode != nil: - modeS, err := provider.NewIntSetterFromConfig("mode", *cc.BatteryMode) + modeS, err := provider.NewIntSetterFromConfig("batteryMode", *cc.BatteryMode) if err != nil { return nil, fmt.Errorf("battery mode: %w", err) }