Align grid measurements structure with pv and battery (BC) (#18063)
This commit is contained in:
parent
c8c1220ad1
commit
9dcb1fa0a7
3 changed files with 27 additions and 20 deletions
|
|
@ -67,7 +67,7 @@ export default {
|
|||
|
||||
// details
|
||||
gridConfigured: Boolean,
|
||||
gridPower: Number,
|
||||
grid: Object,
|
||||
homePower: Number,
|
||||
pvPower: Number,
|
||||
pv: Array,
|
||||
|
|
@ -113,6 +113,9 @@ export default {
|
|||
pvConfigured: function () {
|
||||
return this.pv?.length > 0;
|
||||
},
|
||||
gridPower: function () {
|
||||
return this.grid?.power || 0;
|
||||
},
|
||||
energyflow: function () {
|
||||
return this.collectProps(Energyflow);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -9,10 +9,7 @@ const (
|
|||
GreenShareHome = "greenShareHome"
|
||||
GreenShareLoadpoints = "greenShareLoadpoints"
|
||||
GridConfigured = "gridConfigured"
|
||||
GridCurrents = "gridCurrents"
|
||||
GridEnergy = "gridEnergy"
|
||||
GridPower = "gridPower"
|
||||
GridPowers = "gridPowers"
|
||||
Grid = "grid"
|
||||
HomePower = "homePower"
|
||||
PrioritySoc = "prioritySoc"
|
||||
Pv = "pv"
|
||||
|
|
|
|||
37
core/site.go
37
core/site.go
|
|
@ -44,12 +44,14 @@ type updater interface {
|
|||
|
||||
// measurement is used as slice element for publishing structured data
|
||||
type measurement struct {
|
||||
Power float64 `json:"power"`
|
||||
Energy float64 `json:"energy,omitempty"`
|
||||
ExcessDCPower float64 `json:"excessdcpower,omitempty"`
|
||||
Capacity *float64 `json:"capacity,omitempty"`
|
||||
Soc *float64 `json:"soc,omitempty"`
|
||||
Controllable *bool `json:"controllable,omitempty"`
|
||||
Power float64 `json:"power"`
|
||||
Energy float64 `json:"energy,omitempty"`
|
||||
Powers []float64 `json:"powers,omitempty"`
|
||||
Currents []float64 `json:"currents,omitempty"`
|
||||
ExcessDCPower float64 `json:"excessdcpower,omitempty"`
|
||||
Capacity *float64 `json:"capacity,omitempty"`
|
||||
Soc *float64 `json:"soc,omitempty"`
|
||||
Controllable *bool `json:"controllable,omitempty"`
|
||||
}
|
||||
|
||||
var _ site.API = (*Site)(nil)
|
||||
|
|
@ -619,10 +621,12 @@ func (site *Site) updateGridMeter() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
var mm measurement
|
||||
|
||||
if res, err := backoff.RetryWithData(site.gridMeter.CurrentPower, bo()); err == nil {
|
||||
mm.Power = res
|
||||
site.gridPower = res
|
||||
site.log.DEBUG.Printf("grid power: %.0fW", res)
|
||||
site.publish(keys.GridPower, res)
|
||||
} else {
|
||||
return fmt.Errorf("grid power: %v", err)
|
||||
}
|
||||
|
|
@ -634,18 +638,16 @@ func (site *Site) updateGridMeter() error {
|
|||
if phaseMeter, ok := site.gridMeter.(api.PhasePowers); ok {
|
||||
var err error // phases needed for signed currents
|
||||
if p1, p2, p3, err = phaseMeter.Powers(); err == nil {
|
||||
phases := []float64{p1, p2, p3}
|
||||
site.log.DEBUG.Printf("grid powers: %.0fW", phases)
|
||||
site.publish(keys.GridPowers, phases)
|
||||
mm.Powers = []float64{p1, p2, p3}
|
||||
site.log.DEBUG.Printf("grid powers: %.0fW", mm.Powers)
|
||||
} else {
|
||||
site.log.ERROR.Printf("grid powers: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if i1, i2, i3, err := phaseMeter.Currents(); err == nil {
|
||||
phases := []float64{util.SignFromPower(i1, p1), util.SignFromPower(i2, p2), util.SignFromPower(i3, p3)}
|
||||
site.log.DEBUG.Printf("grid currents: %.3gA", phases)
|
||||
site.publish(keys.GridCurrents, phases)
|
||||
mm.Currents = []float64{util.SignFromPower(i1, p1), util.SignFromPower(i2, p2), util.SignFromPower(i3, p3)}
|
||||
site.log.DEBUG.Printf("grid currents: %.3gA", mm.Currents)
|
||||
} else {
|
||||
site.log.ERROR.Printf("grid currents: %v", err)
|
||||
}
|
||||
|
|
@ -654,12 +656,14 @@ func (site *Site) updateGridMeter() error {
|
|||
// grid energy (import)
|
||||
if energyMeter, ok := site.gridMeter.(api.MeterEnergy); ok {
|
||||
if f, err := energyMeter.TotalEnergy(); err == nil {
|
||||
site.publish(keys.GridEnergy, f)
|
||||
mm.Energy = f
|
||||
} else {
|
||||
site.log.ERROR.Printf("grid energy: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
site.publish(keys.Grid, mm)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -688,7 +692,7 @@ func (site *Site) sitePower(totalChargePower, flexiblePower float64) (float64, b
|
|||
// allow using PV as estimate for grid power
|
||||
if site.gridMeter == nil {
|
||||
site.gridPower = totalChargePower - site.pvPower
|
||||
site.publish(keys.GridPower, site.gridPower)
|
||||
site.publish(keys.Grid, measurement{Power: site.gridPower})
|
||||
}
|
||||
|
||||
// ensure safe default for residual power
|
||||
|
|
@ -922,8 +926,11 @@ func (site *Site) prepare() {
|
|||
site.publish(keys.SiteTitle, site.Title)
|
||||
|
||||
site.publish(keys.GridConfigured, site.gridMeter != nil)
|
||||
site.publish(keys.Grid, api.Meter(nil))
|
||||
site.publish(keys.Pv, make([]api.Meter, len(site.pvMeters)))
|
||||
site.publish(keys.Battery, make([]api.Meter, len(site.batteryMeters)))
|
||||
site.publish(keys.Aux, make([]api.Meter, len(site.auxMeters)))
|
||||
site.publish(keys.Ext, make([]api.Meter, len(site.extMeters)))
|
||||
site.publish(keys.PrioritySoc, site.prioritySoc)
|
||||
site.publish(keys.BufferSoc, site.bufferSoc)
|
||||
site.publish(keys.BufferStartSoc, site.bufferStartSoc)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue