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) }