Add MeterReturnEnergy (#29805)

This commit is contained in:
andig 2026-06-02 13:53:13 +02:00 • committed by GitHub
parent 869ac1d6eb
commit 7b5df178ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 196 additions and 57 deletions

View file

@ -51,32 +51,28 @@ func NewMeterFromConfig(ctx context.Context, other map[string]any) (Plugin, erro
var _ FloatGetter = (*meterPlugin)(nil)
func (o *meterPlugin) FloatGetter() (func() (float64, error), error) {
err := fmt.Errorf("unsupported method: %s", o.method.String())
switch o.method {
case Energy:
if !api.HasCap[api.MeterEnergy](o.meter) {
return nil, err
}
case Soc:
if !api.HasCap[api.Battery](o.meter) {
return nil, err
}
}
return func() (float64, error) {
switch o.method {
case Energy:
m, _ := api.Cap[api.MeterEnergy](o.meter)
f, err := m.TotalEnergy()
return f * o.scale, err
if m, ok := api.Cap[api.MeterEnergy](o.meter); ok {
f, err := m.TotalEnergy()
return f * o.scale, err
}
case ReturnEnergy:
if m, ok := api.Cap[api.MeterReturnEnergy](o.meter); ok {
f, err := m.ReturnEnergy()
return f * o.scale, err
}
case Soc:
m, _ := api.Cap[api.Battery](o.meter)
f, err := m.Soc()
return f * o.scale, err
default:
if m, ok := api.Cap[api.Battery](o.meter); ok {
f, err := m.Soc()
return f * o.scale, err
}
case Power:
f, err := o.meter.CurrentPower()
return f * o.scale, err
}
return 0, fmt.Errorf("unsupported method: %s", o.method.String())
}, nil
}