Switchsocket: add soc (#18333)
This commit is contained in:
parent
b9c5072ede
commit
afc038ed1f
2 changed files with 48 additions and 5 deletions
|
|
@ -19,7 +19,7 @@ type SwitchSocket struct {
|
|||
*switchSocket
|
||||
}
|
||||
|
||||
//go:generate decorate -f decorateSwitchSocket -b *SwitchSocket -r api.Charger -t "api.MeterEnergy,TotalEnergy,func() (float64, error)"
|
||||
//go:generate decorate -f decorateSwitchSocket -b *SwitchSocket -r api.Charger -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.Battery,Soc,func() (float64, error)"
|
||||
|
||||
func NewSwitchSocketFromConfig(ctx context.Context, other map[string]interface{}) (api.Charger, error) {
|
||||
var cc struct {
|
||||
|
|
@ -28,6 +28,7 @@ func NewSwitchSocketFromConfig(ctx context.Context, other map[string]interface{}
|
|||
Enable provider.Config
|
||||
Power provider.Config
|
||||
Energy *provider.Config
|
||||
Soc *provider.Config
|
||||
StandbyPower float64
|
||||
}
|
||||
|
||||
|
|
@ -58,13 +59,21 @@ func NewSwitchSocketFromConfig(ctx context.Context, other map[string]interface{}
|
|||
}
|
||||
}
|
||||
|
||||
var soc func() (float64, error)
|
||||
if cc.Soc != nil {
|
||||
soc, 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 decorateSwitchSocket(c, energy), nil
|
||||
return decorateSwitchSocket(c, energy, soc), nil
|
||||
}
|
||||
|
||||
func (c *SwitchSocket) Enabled() (bool, error) {
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@ import (
|
|||
"github.com/evcc-io/evcc/api"
|
||||
)
|
||||
|
||||
func decorateSwitchSocket(base *SwitchSocket, meterEnergy func() (float64, error)) api.Charger {
|
||||
func decorateSwitchSocket(base *SwitchSocket, meterEnergy func() (float64, error), battery func() (float64, error)) api.Charger {
|
||||
switch {
|
||||
case meterEnergy == nil:
|
||||
case battery == nil && meterEnergy == nil:
|
||||
return base
|
||||
|
||||
case meterEnergy != nil:
|
||||
case battery == nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*SwitchSocket
|
||||
api.MeterEnergy
|
||||
|
|
@ -21,11 +21,45 @@ func decorateSwitchSocket(base *SwitchSocket, meterEnergy func() (float64, error
|
|||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
|
||||
case battery != nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*SwitchSocket
|
||||
api.Battery
|
||||
}{
|
||||
SwitchSocket: base,
|
||||
Battery: &decorateSwitchSocketBatteryImpl{
|
||||
battery: battery,
|
||||
},
|
||||
}
|
||||
|
||||
case battery != nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*SwitchSocket
|
||||
api.Battery
|
||||
api.MeterEnergy
|
||||
}{
|
||||
SwitchSocket: base,
|
||||
Battery: &decorateSwitchSocketBatteryImpl{
|
||||
battery: battery,
|
||||
},
|
||||
MeterEnergy: &decorateSwitchSocketMeterEnergyImpl{
|
||||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type decorateSwitchSocketBatteryImpl struct {
|
||||
battery func() (float64, error)
|
||||
}
|
||||
|
||||
func (impl *decorateSwitchSocketBatteryImpl) Soc() (float64, error) {
|
||||
return impl.battery()
|
||||
}
|
||||
|
||||
type decorateSwitchSocketMeterEnergyImpl struct {
|
||||
meterEnergy func() (float64, error)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue