RCT: fix battery energy, add returnenergy (#31037)
This commit is contained in:
parent
206475271c
commit
72d6e65b0b
1 changed files with 19 additions and 16 deletions
35
meter/rct.go
35
meter/rct.go
|
|
@ -100,8 +100,10 @@ func NewRCT(ctx context.Context, uri, usage string, batterySocLimits batterySocL
|
|||
externalPower: externalPower,
|
||||
}
|
||||
|
||||
if usage == "grid" {
|
||||
implement.Has(m, implement.MeterEnergy(m.totalEnergy))
|
||||
implement.Has(m, implement.MeterEnergy(m.totalEnergy))
|
||||
|
||||
if usage != "pv" {
|
||||
implement.Has(m, implement.MeterReturnEnergy(m.returnEnergy))
|
||||
}
|
||||
|
||||
if usage == "pv" {
|
||||
|
|
@ -293,23 +295,24 @@ func (m *RCT) totalEnergy() (float64, error) {
|
|||
return (a + b) / 1000, err
|
||||
|
||||
case "battery":
|
||||
var eg errgroup.Group
|
||||
var in, out float64
|
||||
res, err := m.queryFloat(rct.TotalEnergyBattOutWh)
|
||||
return res / 1000, err
|
||||
|
||||
eg.Go(func() error {
|
||||
var err error
|
||||
in, err = m.queryFloat(rct.TotalEnergyBattInWh)
|
||||
return err
|
||||
})
|
||||
default:
|
||||
return 0, fmt.Errorf("invalid usage: %s", m.usage)
|
||||
}
|
||||
}
|
||||
|
||||
eg.Go(func() error {
|
||||
var err error
|
||||
out, err = m.queryFloat(rct.TotalEnergyBattOutWh)
|
||||
return err
|
||||
})
|
||||
// returnEnergy implements the api.MeterReturnEnergy interface
|
||||
func (m *RCT) returnEnergy() (float64, error) {
|
||||
switch m.usage {
|
||||
case "grid":
|
||||
res, err := m.queryFloat(rct.TotalEnergyGridFeedInWh)
|
||||
return -res / 1000, err
|
||||
|
||||
err := eg.Wait()
|
||||
return (in - out) / 1000, err
|
||||
case "battery":
|
||||
res, err := m.queryFloat(rct.TotalEnergyBattInWh)
|
||||
return res / 1000, err
|
||||
|
||||
default:
|
||||
return 0, fmt.Errorf("invalid usage: %s", m.usage)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue