From 72d6e65b0bbe4d8bd5700c666755007163cda35c Mon Sep 17 00:00:00 2001 From: Maschga <88616799+Maschga@users.noreply.github.com> Date: Fri, 19 Jun 2026 19:52:49 +0200 Subject: [PATCH] RCT: fix battery energy, add returnenergy (#31037) --- meter/rct.go | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/meter/rct.go b/meter/rct.go index 2fed56691..7feef4350 100644 --- a/meter/rct.go +++ b/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)