From 323defd525f85ed9c477e0e249840a517874547c Mon Sep 17 00:00:00 2001 From: Konstantin Date: Fri, 23 Jun 2023 20:20:36 +0200 Subject: [PATCH] Keba: fix wrong session energy (#8593) --- charger/keba-modbus.go | 21 +- charger/keba-modbus_decorators.go | 746 ++---------------------------- 2 files changed, 39 insertions(+), 728 deletions(-) diff --git a/charger/keba-modbus.go b/charger/keba-modbus.go index b7678e0a2..36ef1b6d4 100644 --- a/charger/keba-modbus.go +++ b/charger/keba-modbus.go @@ -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) { diff --git a/charger/keba-modbus_decorators.go b/charger/keba-modbus_decorators.go index 2c3703ec5..6344393bf 100644 --- a/charger/keba-modbus_decorators.go +++ b/charger/keba-modbus_decorators.go @@ -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) }