RCT: fix battery energy, add returnenergy (#31037)

This commit is contained in:
Maschga 2026-06-19 19:52:49 +02:00 • committed by GitHub
parent 206475271c
commit 72d6e65b0b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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)