Keba: fix wrong session energy (#8593)

This commit is contained in:
Konstantin 2023-06-23 20:20:36 +02:00 • committed by GitHub
parent f577724c52
commit 323defd525
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 728 deletions

View file

@ -64,7 +64,7 @@ func init() {
registry.Add("keba-modbus", NewKebaFromConfig)
}
// go:generate go run ../cmd/tools/decorate.go -f decorateKeba -b *Keba -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.ChargeRater,ChargedEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.Identifier,Identify,func() (string, error)" -t "api.PhaseSwitcher,Phases1p3p,func(int) error"
// go:generate go run ../cmd/tools/decorate.go -f decorateKeba -b *Keba -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.Identifier,Identify,func() (string, error)" -t "api.PhaseSwitcher,Phases1p3p,func(int) error"
// NewKebaFromConfig creates a new Keba ModbusTCP charger
func NewKebaFromConfig(other map[string]interface{}) (api.Charger, error) {
@ -83,9 +83,9 @@ func NewKebaFromConfig(other map[string]interface{}) (api.Charger, error) {
// features
var (
currentPower, totalEnergy, chargedEnergy func() (float64, error)
currents func() (float64, float64, float64, error)
identify func() (string, error)
currentPower, totalEnergy func() (float64, error)
currents func() (float64, float64, float64, error)
identify func() (string, error)
)
b, err := wb.conn.ReadHoldingRegisters(kebaRegProduct, 2)
@ -96,7 +96,6 @@ func NewKebaFromConfig(other map[string]interface{}) (api.Charger, error) {
if features := binary.BigEndian.Uint32(b); (features/10)%10 > 0 {
currentPower = wb.currentPower
totalEnergy = wb.totalEnergy
chargedEnergy = wb.chargedEnergy
currents = wb.currents
}
@ -125,7 +124,7 @@ func NewKebaFromConfig(other map[string]interface{}) (api.Charger, error) {
go wb.heartbeat(900 * time.Millisecond * time.Duration(timeout))
}
return decorateKeba(wb, currentPower, totalEnergy, chargedEnergy, currents, identify, phases), nil
return decorateKeba(wb, currentPower, totalEnergy, currents, identify, phases), nil
}
// NewKeba creates a new charger
@ -244,15 +243,7 @@ func (wb *Keba) totalEnergy() (float64, error) {
return float64(binary.BigEndian.Uint32(b)) / 1e4, nil
}
// chargedEnergy implements the api.ChargeRater interface
func (wb *Keba) chargedEnergy() (float64, error) {
b, err := wb.conn.ReadHoldingRegisters(kebaRegSessionEnergy, 2)
if err != nil {
return 0, err
}
return float64(binary.BigEndian.Uint32(b)) / 1e4, nil
}
// chargedEnergy is not supported since Keba does not reset it when plugging in a new car
// currents implements the api.PhaseCurrents interface
func (wb *Keba) currents() (float64, float64, float64, error) {

View file

@ -6,12 +6,12 @@ import (
"github.com/evcc-io/evcc/api"
)
func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func() (float64, error), chargeRater func() (float64, error), phaseCurrents func() (float64, float64, float64, error), identifier func() (string, error), phaseSwitcher func(int) error) api.Charger {
func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), identifier func() (string, error), phaseSwitcher func(int) error) api.Charger {
switch {
case chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
return base
case chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Meter
@ -22,7 +22,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.MeterEnergy
@ -33,7 +33,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Meter
@ -48,67 +48,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
}
case chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Meter
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
}
case chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.MeterEnergy
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
}
case chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Meter
api.MeterEnergy
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
}
case chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.PhaseCurrents
@ -119,7 +59,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Meter
@ -134,7 +74,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.MeterEnergy
@ -149,7 +89,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Meter
@ -168,83 +108,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.PhaseCurrents
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
}
case chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Meter
api.PhaseCurrents
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
}
case chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.MeterEnergy
api.PhaseCurrents
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
}
case chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Meter
api.MeterEnergy
api.PhaseCurrents
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
}
case chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Identifier
@ -255,7 +119,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Identifier
@ -270,7 +134,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Identifier
@ -285,7 +149,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Identifier
@ -304,83 +168,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
}
case chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.Meter
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
}
case chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.MeterEnergy
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
}
case chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.Meter
api.MeterEnergy
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
}
case chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Identifier
@ -395,7 +183,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Identifier
@ -414,7 +202,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Identifier
@ -433,7 +221,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.Identifier
@ -456,99 +244,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.PhaseCurrents
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
}
case chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.Meter
api.PhaseCurrents
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
}
case chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.MeterEnergy
api.PhaseCurrents
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
}
case chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.Meter
api.MeterEnergy
api.PhaseCurrents
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
}
case chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.PhaseSwitcher
@ -559,7 +255,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Meter
@ -574,7 +270,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.MeterEnergy
@ -589,7 +285,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Meter
@ -608,83 +304,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Meter
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.MeterEnergy
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Meter
api.MeterEnergy
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.PhaseCurrents
@ -699,7 +319,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Meter
@ -718,7 +338,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.MeterEnergy
@ -737,7 +357,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Meter
@ -760,99 +380,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.PhaseCurrents
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Meter
api.PhaseCurrents
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.MeterEnergy
api.PhaseCurrents
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Meter
api.MeterEnergy
api.PhaseCurrents
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Identifier
@ -867,7 +395,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Identifier
@ -886,7 +414,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Identifier
@ -905,7 +433,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Identifier
@ -928,99 +456,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.Meter
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.MeterEnergy
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.Meter
api.MeterEnergy
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Identifier
@ -1039,7 +475,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Identifier
@ -1062,7 +498,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Identifier
@ -1085,7 +521,7 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
},
}
case chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.Identifier
@ -1111,127 +547,11 @@ func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func()
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.PhaseCurrents
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.Meter
api.PhaseCurrents
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.MeterEnergy
api.PhaseCurrents
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
case chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
return &struct {
*Keba
api.ChargeRater
api.Identifier
api.Meter
api.MeterEnergy
api.PhaseCurrents
api.PhaseSwitcher
}{
Keba: base,
ChargeRater: &decorateKebaChargeRaterImpl{
chargeRater: chargeRater,
},
Identifier: &decorateKebaIdentifierImpl{
identifier: identifier,
},
Meter: &decorateKebaMeterImpl{
meter: meter,
},
MeterEnergy: &decorateKebaMeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateKebaPhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateKebaPhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
}
}
return nil
}
type decorateKebaChargeRaterImpl struct {
chargeRater func() (float64, error)
}
func (impl *decorateKebaChargeRaterImpl) ChargedEnergy() (float64, error) {
return impl.chargeRater()
}
type decorateKebaIdentifierImpl struct {
identifier func() (string, error)
}