SwitchSocket: decorate energy (#17602)

This commit is contained in:
andig 2024-12-05 18:10:36 +01:00 • committed by GitHub
parent b20c994b83
commit 56e5285050
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 47 additions and 1 deletions

View file

@ -19,12 +19,15 @@ type SwitchSocket struct {
*switchSocket
}
//go:generate go run ../cmd/tools/decorate.go -f decorateSwitchSocket -b *SwitchSocket -r api.Charger -t "api.MeterEnergy,TotalEnergy,func() (float64, error)"
func NewSwitchSocketFromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
var cc struct {
embed `mapstructure:",squash"`
Enabled provider.Config
Enable provider.Config
Power provider.Config
Energy *provider.Config
StandbyPower float64
}
@ -47,13 +50,21 @@ func NewSwitchSocketFromConfig(ctx context.Context, other map[string]interface{}
return nil, err
}
var energy func() (float64, error)
if cc.Energy != nil {
energy, err = provider.NewFloatGetterFromConfig(ctx, *cc.Energy)
if err != nil {
return nil, err
}
}
c := &SwitchSocket{
enabled: enabled,
enable: enable,
switchSocket: NewSwitchSocket(&cc.embed, enabled, power, cc.StandbyPower),
}
return c, nil
return decorateSwitchSocket(c, energy), nil
}
func (c *SwitchSocket) Enabled() (bool, error) {

View file

@ -0,0 +1,35 @@
package charger
// Code generated by github.com/evcc-io/evcc/cmd/tools/decorate.go. DO NOT EDIT.
import (
"github.com/evcc-io/evcc/api"
)
func decorateSwitchSocket(base *SwitchSocket, meterEnergy func() (float64, error)) api.Charger {
switch {
case meterEnergy == nil:
return base
case meterEnergy != nil:
return &struct {
*SwitchSocket
api.MeterEnergy
}{
SwitchSocket: base,
MeterEnergy: &decorateSwitchSocketMeterEnergyImpl{
meterEnergy: meterEnergy,
},
}
}
return nil
}
type decorateSwitchSocketMeterEnergyImpl struct {
meterEnergy func() (float64, error)
}
func (impl *decorateSwitchSocketMeterEnergyImpl) TotalEnergy() (float64, error) {
return impl.meterEnergy()
}