Batteries: track energy metrics (#29780)
This commit is contained in:
parent
db156fbf78
commit
37e5659936
1 changed files with 28 additions and 4 deletions
32
core/site.go
32
core/site.go
|
|
@ -88,6 +88,7 @@ type Site struct {
|
|||
pvEnergy map[string]*metrics.Accumulator
|
||||
|
||||
homeEnergy, gridEnergy *metrics.Collector
|
||||
batteryEnergy map[string]*metrics.Collector // per-battery, keyed by meter ref
|
||||
|
||||
// cached state
|
||||
gridPower float64 // Grid power
|
||||
|
|
@ -216,6 +217,12 @@ func (site *Site) Boot(log *util.Logger, loadpoints []*Loadpoint, tariffs *tarif
|
|||
return err
|
||||
}
|
||||
site.batteryMeters = append(site.batteryMeters, dev)
|
||||
|
||||
me, err := metrics.NewCollector(metrics.Battery, ref)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
site.batteryEnergy[ref] = me
|
||||
}
|
||||
|
||||
// meters used only for monitoring
|
||||
|
|
@ -251,10 +258,11 @@ func (site *Site) Boot(log *util.Logger, loadpoints []*Loadpoint, tariffs *tarif
|
|||
// NewSite creates a Site with sane defaults
|
||||
func NewSite() *Site {
|
||||
site := &Site{
|
||||
log: util.NewLogger("site"),
|
||||
Voltage: 230, // V
|
||||
pvEnergy: make(map[string]*metrics.Accumulator),
|
||||
fcstEnergy: metrics.NewAccumulator(),
|
||||
log: util.NewLogger("site"),
|
||||
Voltage: 230, // V
|
||||
pvEnergy: make(map[string]*metrics.Accumulator),
|
||||
batteryEnergy: make(map[string]*metrics.Collector),
|
||||
fcstEnergy: metrics.NewAccumulator(),
|
||||
}
|
||||
|
||||
return site
|
||||
|
|
@ -671,6 +679,22 @@ func (site *Site) updateBatteryMeters() {
|
|||
|
||||
site.battery.Devices = mm
|
||||
|
||||
// accumulate per-battery energy (charging = import, discharging = export — from battery POV toward grid root)
|
||||
for i, dev := range site.batteryMeters {
|
||||
ref := dev.Config().Name
|
||||
c, ok := site.batteryEnergy[ref]
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
var exportEnergy *float64
|
||||
if mm[i].Energy > 0 {
|
||||
exportEnergy = &mm[i].Energy
|
||||
}
|
||||
if err := c.AddEnergy(nil, exportEnergy, -mm[i].Power); err != nil {
|
||||
site.log.ERROR.Printf("persist battery %d energy: %v", i+1, err)
|
||||
}
|
||||
}
|
||||
|
||||
site.publish(keys.Battery, site.battery)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue