From 3253ff696ec6e508c756c5455a7cdde9ab5bcacd Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Sun, 30 Jun 2024 13:26:58 +0200 Subject: [PATCH] BenderCC: add soc (ISO 15118) (#14360) --- charger/bender.go | 30 +- charger/bender_decorators.go | 1610 ++++++++++++++++++++++++++++++++-- 2 files changed, 1573 insertions(+), 67 deletions(-) diff --git a/charger/bender.go b/charger/bender.go index 0c1f24bcc..6f4b116e7 100644 --- a/charger/bender.go +++ b/charger/bender.go @@ -54,6 +54,7 @@ const ( bendRegChargedEnergy = 716 // Sum of charged energy for the current session (Wh) bendRegChargingDuration = 718 // Duration since beginning of charge (Seconds) bendRegUserID = 720 // User ID (OCPP IdTag) from the current session. Bytes 0 to 19. + bendRegEVBatteryState = 730 // EV Battery State (% 0-100) bendRegEVCCID = 741 // ASCII representation of the Hex. Values corresponding to the EVCCID. Bytes 0 to 11. bendRegHemsCurrentLimit = 1000 // Current limit of the HEMS module (A) @@ -81,7 +82,7 @@ func NewBenderCCFromConfig(other map[string]interface{}) (api.Charger, error) { return NewBenderCC(cc.URI, cc.ID) } -//go:generate go run ../cmd/tools/decorate.go -f decorateBenderCC -b *BenderCC -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.ChargeRater,ChargedEnergy,func() (float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.Identifier,Identify,func() (string, error)" +//go:generate go run ../cmd/tools/decorate.go -f decorateBenderCC -b *BenderCC -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.ChargeRater,ChargedEnergy,func() (float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.Identifier,Identify,func() (string, error)" // NewBenderCC creates BenderCC charger func NewBenderCC(uri string, id uint8) (api.Charger, error) { @@ -113,6 +114,7 @@ func NewBenderCC(uri string, id uint8) (api.Charger, error) { voltages func() (float64, float64, float64, error) chargedEnergy func() (float64, error) totalEnergy func() (float64, error) + soc func() (float64, error) identify func() (string, error) ) @@ -132,6 +134,12 @@ func NewBenderCC(uri string, id uint8) (api.Charger, error) { if b, err := wb.conn.ReadHoldingRegisters(bendRegVoltages, 2); err == nil && binary.BigEndian.Uint32(b) > 0 { voltages = wb.voltages } + + if !wb.legacy { + if _, err := wb.conn.ReadHoldingRegisters(bendRegEVBatteryState, 1); err == nil { + soc = wb.soc + } + } } // check rfid @@ -139,7 +147,7 @@ func NewBenderCC(uri string, id uint8) (api.Charger, error) { identify = wb.identify } - return decorateBenderCC(wb, currentPower, currents, voltages, chargedEnergy, totalEnergy, identify), nil + return decorateBenderCC(wb, currentPower, currents, voltages, chargedEnergy, totalEnergy, soc, identify), nil } // Status implements the api.Charger interface @@ -311,6 +319,24 @@ func (wb *BenderCC) identify() (string, error) { return bytesAsString(b), nil } +// soc implements the api.Battery interface +func (wb *BenderCC) soc() (float64, error) { + b, err := wb.conn.ReadHoldingRegisters(bendRegSmartVehicleDetected, 1) + if err != nil { + return 0, err + } + + if binary.BigEndian.Uint16(b) == 1 { + b, err = wb.conn.ReadHoldingRegisters(bendRegEVBatteryState, 1) + if err != nil { + return 0, err + } + return float64(binary.BigEndian.Uint16(b)), nil + } + + return 0, api.ErrNotAvailable +} + var _ api.Diagnosis = (*BenderCC)(nil) // Diagnose implements the api.Diagnosis interface diff --git a/charger/bender_decorators.go b/charger/bender_decorators.go index c6f11d936..2deb14b44 100644 --- a/charger/bender_decorators.go +++ b/charger/bender_decorators.go @@ -6,12 +6,12 @@ import ( "github.com/evcc-io/evcc/api" ) -func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), chargeRater func() (float64, error), meterEnergy func() (float64, error), identifier func() (string, error)) api.Charger { +func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), chargeRater func() (float64, error), meterEnergy func() (float64, error), battery func() (float64, error), identifier func() (string, error)) api.Charger { switch { - case chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return base - case chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.Meter @@ -22,7 +22,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.PhaseCurrents @@ -33,7 +33,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.Meter @@ -48,7 +48,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.PhaseVoltages @@ -59,7 +59,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.Meter @@ -74,7 +74,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.PhaseCurrents @@ -89,7 +89,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.Meter @@ -108,7 +108,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -119,7 +119,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -134,7 +134,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -149,7 +149,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -168,7 +168,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -183,7 +183,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -202,7 +202,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -221,7 +221,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -244,7 +244,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.MeterEnergy @@ -255,7 +255,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.Meter @@ -270,7 +270,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.MeterEnergy @@ -285,7 +285,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.Meter @@ -304,7 +304,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.MeterEnergy @@ -319,7 +319,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.Meter @@ -338,7 +338,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.MeterEnergy @@ -357,7 +357,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.Meter @@ -380,7 +380,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -395,7 +395,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -414,7 +414,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -433,7 +433,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -456,7 +456,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -475,7 +475,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -498,7 +498,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -521,7 +521,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -548,7 +548,679 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Meter + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Meter + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Meter + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Meter + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Meter + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Meter + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Meter + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery == nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -559,7 +1231,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -574,7 +1246,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -589,7 +1261,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -608,7 +1280,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -623,7 +1295,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -642,7 +1314,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -661,7 +1333,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -684,7 +1356,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -699,7 +1371,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -718,7 +1390,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -737,7 +1409,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -760,7 +1432,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -779,7 +1451,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -802,7 +1474,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -825,7 +1497,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -852,7 +1524,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -867,7 +1539,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -886,7 +1558,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -905,7 +1577,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.Identifier @@ -928,7 +1600,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -947,7 +1619,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -970,7 +1642,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -993,7 +1665,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.Identifier @@ -1020,7 +1692,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -1039,7 +1711,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -1062,7 +1734,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -1085,7 +1757,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + case battery == nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: return &struct { *BenderCC api.ChargeRater @@ -1112,7 +1784,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -1135,7 +1807,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -1162,7 +1834,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -1189,7 +1861,7 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren }, } - case chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + case battery == nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: return &struct { *BenderCC api.ChargeRater @@ -1219,11 +1891,819 @@ func decorateBenderCC(base *BenderCC, meter func() (float64, error), phaseCurren phaseVoltages: phaseVoltages, }, } + + case battery != nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.Meter + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.Meter + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.Meter + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.Meter + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater == nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.Meter + api.MeterEnergy + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages == nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && chargeRater != nil && identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseVoltages != nil: + return &struct { + *BenderCC + api.Battery + api.ChargeRater + api.Identifier + api.Meter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + BenderCC: base, + Battery: &decorateBenderCCBatteryImpl{ + battery: battery, + }, + ChargeRater: &decorateBenderCCChargeRaterImpl{ + chargeRater: chargeRater, + }, + Identifier: &decorateBenderCCIdentifierImpl{ + identifier: identifier, + }, + Meter: &decorateBenderCCMeterImpl{ + meter: meter, + }, + MeterEnergy: &decorateBenderCCMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateBenderCCPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateBenderCCPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } } return nil } +type decorateBenderCCBatteryImpl struct { + battery func() (float64, error) +} + +func (impl *decorateBenderCCBatteryImpl) Soc() (float64, error) { + return impl.battery() +} + type decorateBenderCCChargeRaterImpl struct { chargeRater func() (float64, error) }