Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions core/keys/site.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ const (
BufferSoc = "bufferSoc"
BufferStartSoc = "bufferStartSoc"

BatteryFeedInPriorityLimit = "batteryFeedInPriorityLimit"
BatteryFeedInPriorityActive = "batteryFeedInPriorityActive"

// battery status
Battery = "battery"
BatteryMode = "batteryMode"
Expand Down
6 changes: 5 additions & 1 deletion core/site.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ type Site struct {
batteryDischargeControl bool // prevent battery discharge for fast and planned charging
batteryGridChargeLimit *float64 // grid charging limit

batteryFeedInPriorityLimit *float64 // disable battery charge and prefer feed-in at this limit

loadpoints []*Loadpoint // Loadpoints
tariffs *tariff.Tariffs // Tariffs
coordinator *coordinator.Coordinator // Vehicles
Expand Down Expand Up @@ -1025,7 +1027,9 @@ func (site *Site) update(lp updater) {
// update battery after reading meters to ensure that (modbus) connection is open
batteryGridChargeActive := site.batteryGridChargeActive(rate)
site.publish(keys.BatteryGridChargeActive, batteryGridChargeActive)
site.updateBatteryMode(batteryGridChargeActive, rate)
batteryFeedInPriorityActive := site.batteryFeedInPriorityActive(rate)
site.publish(keys.BatteryFeedInPriorityActive, batteryFeedInPriorityActive)
site.updateBatteryMode(batteryGridChargeActive, batteryFeedInPriorityActive, rate)

site.stats.Update(site)
}
Expand Down
30 changes: 30 additions & 0 deletions core/site_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,36 @@ func (site *Site) SetBatteryGridChargeLimit(val *float64) error {

return nil
}
func (site *Site) GetBatteryFeedInPriorityLimit() *float64 {
site.RLock()
defer site.RUnlock()
return site.batteryFeedInPriorityLimit
}

func (site *Site) SetBatteryFeedInPriorityLimit(val *float64) error {
site.log.DEBUG.Println("set feed-in priority limit:", printPtr("%.1f", val))

if !site.hasBatteryControl() {
return ErrBatteryControlNotAvailable
}

site.Lock()
defer site.Unlock()

if !ptrValueEqual(site.batteryFeedInPriorityLimit, val) {
site.batteryFeedInPriorityLimit = val

if val == nil {
settings.SetString(keys.BatteryFeedInPriorityLimit, "")
site.publish(keys.BatteryFeedInPriorityLimit, nil)
} else {
settings.SetFloat(keys.BatteryFeedInPriorityLimit, *val)
site.publish(keys.BatteryFeedInPriorityLimit, *val)
}
}

return nil
}

// GetBatteryMode returns the battery mode
func (site *Site) GetBatteryMode() api.BatteryMode {
Expand Down
8 changes: 7 additions & 1 deletion core/site_battery.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ func (site *Site) SetBatteryMode(batMode api.BatteryMode) {
}
}

func (site *Site) updateBatteryMode(batteryGridChargeActive bool, rate api.Rate) {
// TODO implement batteryFeedInPriorityActive
func (site *Site) updateBatteryMode(batteryGridChargeActive, batteryFeedInPriorityActive bool, rate api.Rate) {
batteryMode := site.requiredBatteryMode(batteryGridChargeActive, rate)

// put battery into hold mode when charging is active and circuit dimmed
Expand Down Expand Up @@ -202,6 +203,11 @@ func (site *Site) batteryGridChargeActive(rate api.Rate) bool {
return limit != nil && !rate.IsZero() && rate.Value <= *limit
}

func (site *Site) batteryFeedInPriorityActive(rate api.Rate) bool {
limit := site.GetBatteryFeedInPriorityLimit()
return limit != nil && !rate.IsZero() && rate.Value <= *limit
}

func (site *Site) dischargeControlActive(rate api.Rate) bool {
if !site.GetBatteryDischargeControl() {
return false
Expand Down
Loading