From 7101f7049fe9b906ec23f2ff969fcac62feb3830 Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 25 Aug 2025 10:46:20 +0200 Subject: [PATCH] Add battery max charge/discharge power (#22944) --- api/api.go | 5 + cmd/decorate/decorate.go | 3 +- core/site_optimizer.go | 15 +- meter/meter.go | 28 +- meter/meter_average.go | 2 +- meter/meter_decorators.go | 3130 ++++++++++++++++++++++++++++++++-- meter/openwb.go | 2 +- meter/usage_battery.go | 17 + util/templates/defaults.yaml | 5 - 9 files changed, 3016 insertions(+), 191 deletions(-) diff --git a/api/api.go b/api/api.go index fc70bf6b4..6e47d1ac1 100644 --- a/api/api.go +++ b/api/api.go @@ -49,6 +49,11 @@ type MaxACPowerGetter interface { MaxACPower() float64 } +// BatteryMaxPowerGetter provides max AC charge- and discharge power in W +type BatteryMaxPowerGetter interface { + GetMaxChargeDischargePower() (float64, float64) +} + // ChargeState provides current charging status type ChargeState interface { Status() (ChargeStatus, error) diff --git a/cmd/decorate/decorate.go b/cmd/decorate/decorate.go index 8e12611b8..cf5b52439 100644 --- a/cmd/decorate/decorate.go +++ b/cmd/decorate/decorate.go @@ -49,6 +49,7 @@ var a struct { api.BatteryCapacity api.BatteryController api.SocLimiter + api.BatteryMaxPowerGetter } func typ(i any) string { @@ -59,7 +60,7 @@ var dependents = map[string][]string{ typ(&a.Meter): {typ(&a.MeterEnergy), typ(&a.PhaseCurrents), typ(&a.PhaseVoltages), typ(&a.PhasePowers), typ(&a.MaxACPowerGetter)}, typ(&a.PhaseCurrents): {typ(&a.PhasePowers)}, // phase powers are only used to determine currents sign typ(&a.PhaseSwitcher): {typ(&a.PhaseGetter)}, - typ(&a.Battery): {typ(&a.BatteryCapacity), typ(&a.BatteryController), typ(&a.SocLimiter)}, + typ(&a.Battery): {typ(&a.BatteryCapacity), typ(&a.BatteryController), typ(&a.SocLimiter), typ(&a.BatteryMaxPowerGetter)}, } // hasIntersection returns if the slices intersect diff --git a/core/site_optimizer.go b/core/site_optimizer.go index b72696fee..c42399193 100644 --- a/core/site_optimizer.go +++ b/core/site_optimizer.go @@ -22,7 +22,7 @@ import ( var ( eta = float32(0.9) // efficiency of the battery charging/discharging - batteryPower = float32(6000) // power of the battery in W + batteryPower = float32(6000) // default power of the battery in W updated time.Time ) @@ -183,20 +183,25 @@ func (site *Site) optimizerUpdate(battery []measurement) error { dev := site.batteryMeters[i] bat := evopt.BatteryConfig{ - CMin: 0, CMax: batteryPower, DMax: batteryPower, - SMin: 0, SMax: float32(*b.Capacity * 1e3), // Wh SInitial: float32(*b.Capacity * *b.Soc * 10), // Wh PA: pa, } - // TODO atm we cannot cannot control charge from grid speed - if _, ok := (dev.Instance()).(api.BatteryController); ok { + instance := dev.Instance() + + if _, ok := instance.(api.BatteryController); ok { bat.ChargeFromGrid = lo.ToPtr(true) } + if m, ok := instance.(api.BatteryMaxPowerGetter); ok { + min, max := m.GetMaxChargeDischargePower() + bat.CMin = float32(min) + bat.CMax = float32(max) + } + req.Batteries = append(req.Batteries, bat) details.BatteryDetails = append(details.BatteryDetails, batteryDetail{ diff --git a/meter/meter.go b/meter/meter.go index 16b39134a..13b6c1a17 100644 --- a/meter/meter.go +++ b/meter/meter.go @@ -14,7 +14,7 @@ func init() { registry.AddCtx(api.Custom, NewConfigurableFromConfig) } -//go:generate go tool decorate -f decorateMeter -b api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.PhasePowers,Powers,func() (float64, float64, float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.BatteryCapacity,Capacity,func() float64" -t "api.MaxACPowerGetter,MaxACPower,func() float64" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" +//go:generate go tool decorate -f decorateMeter -b api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.PhasePowers,Powers,func() (float64, float64, float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.BatteryCapacity,Capacity,func() float64" -t "api.BatteryMaxPowerGetter,GetMaxChargeDischargePower,func() (float64, float64)" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" -t "api.MaxACPowerGetter,MaxACPower,func() float64" // NewConfigurableFromConfig creates api.Meter from config func NewConfigurableFromConfig(ctx context.Context, other map[string]interface{}) (api.Meter, error) { @@ -26,11 +26,12 @@ func NewConfigurableFromConfig(ctx context.Context, other map[string]interface{} pvMaxACPower `mapstructure:",squash"` // battery - batteryCapacity `mapstructure:",squash"` - batterySocLimits `mapstructure:",squash"` - Soc *plugin.Config // optional - LimitSoc *plugin.Config // optional - BatteryMode *plugin.Config // optional + batteryCapacity `mapstructure:",squash"` + batterySocLimits `mapstructure:",squash"` + batteryChargeDischargePower `mapstructure:",squash"` + Soc *plugin.Config // optional + LimitSoc *plugin.Config // optional + BatteryMode *plugin.Config // optional }{ batterySocLimits: batterySocLimits{ MinSoc: 20, @@ -82,7 +83,11 @@ func NewConfigurableFromConfig(ctx context.Context, other map[string]interface{} } } - res := m.Decorate(energyG, currentsG, voltagesG, powersG, socG, cc.batteryCapacity.Decorator(), cc.pvMaxACPower.Decorator(), batModeS) + res := m.Decorate( + energyG, currentsG, voltagesG, powersG, + socG, cc.batteryCapacity.Decorator(), cc.batteryChargeDischargePower.Decorator(), batModeS, + cc.pvMaxACPower.Decorator(), + ) return res, nil } @@ -106,10 +111,15 @@ func (m *Meter) Decorate( currents, voltages, powers func() (float64, float64, float64, error), batterySoc func() (float64, error), batteryCapacity func() float64, - maxACPower func() float64, + batteryChargeDischargePower func() (float64, float64), setBatteryMode func(api.BatteryMode) error, + maxACPower func() float64, ) api.Meter { - return decorateMeter(m, totalEnergy, currents, voltages, powers, batterySoc, batteryCapacity, maxACPower, setBatteryMode) + return decorateMeter(m, + totalEnergy, currents, voltages, powers, + batterySoc, batteryCapacity, batteryChargeDischargePower, setBatteryMode, + maxACPower, + ) } // CurrentPower implements the api.Meter interface diff --git a/meter/meter_average.go b/meter/meter_average.go index 8d8db9984..096c79f34 100644 --- a/meter/meter_average.go +++ b/meter/meter_average.go @@ -70,7 +70,7 @@ func NewMovingAverageFromConfig(ctx context.Context, other map[string]interface{ powers = m.Powers } - return meter.Decorate(totalEnergy, currents, voltages, powers, batterySoc, cc.Meter.batteryCapacity.Decorator(), nil, nil), nil + return meter.Decorate(totalEnergy, currents, voltages, powers, batterySoc, cc.Meter.batteryCapacity.Decorator(), nil, nil, nil), nil } type MovingAverage struct { diff --git a/meter/meter_decorators.go b/meter/meter_decorators.go index 5b101a1df..d7a57a74c 100644 --- a/meter/meter_decorators.go +++ b/meter/meter_decorators.go @@ -6,7 +6,7 @@ import ( "github.com/evcc-io/evcc/api" ) -func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), phasePowers func() (float64, float64, float64, error), battery func() (float64, error), batteryCapacity func() float64, maxACPowerGetter func() float64, batteryController func(api.BatteryMode) error) api.Meter { +func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), phasePowers func() (float64, float64, float64, error), battery func() (float64, error), batteryCapacity func() float64, batteryMaxPowerGetter func() (float64, float64), batteryController func(api.BatteryMode) error, maxACPowerGetter func() float64) api.Meter { switch { case battery == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return base @@ -184,7 +184,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -195,7 +195,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -210,7 +210,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -225,7 +225,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -244,7 +244,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -259,7 +259,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -278,7 +278,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -297,7 +297,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -320,7 +320,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -339,7 +339,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -362,7 +362,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -385,7 +385,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -412,7 +412,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -427,7 +427,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -446,7 +446,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -465,7 +465,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -488,7 +488,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -507,7 +507,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -530,7 +530,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -553,7 +553,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -580,7 +580,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -603,7 +603,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -630,7 +630,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -657,7 +657,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -688,6 +688,1902 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.MeterEnergy + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.MeterEnergy + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.MeterEnergy + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.MeterEnergy + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + case battery == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter @@ -916,7 +2812,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -931,7 +2827,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -950,7 +2846,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -969,7 +2865,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -992,7 +2888,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1011,7 +2907,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1034,7 +2930,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1057,7 +2953,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1084,7 +2980,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -1107,7 +3003,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -1134,7 +3030,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1161,7 +3057,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1192,7 +3088,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -1211,7 +3107,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -1234,7 +3130,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -1257,7 +3153,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -1284,7 +3180,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1307,7 +3203,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1334,7 +3230,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1361,7 +3257,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1392,7 +3288,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -1419,7 +3315,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -1450,7 +3346,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1481,7 +3377,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -1516,64 +3412,77 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter }{ Meter: base, Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy }{ Meter: base, Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseCurrents }{ Meter: base, Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ phaseCurrents: phaseCurrents, }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents }{ @@ -1581,8 +3490,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -1592,30 +3504,35 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseVoltages }{ Meter: base, Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ phaseVoltages: phaseVoltages, }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseVoltages }{ @@ -1623,8 +3540,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -1634,11 +3554,12 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseCurrents api.PhaseVoltages }{ @@ -1646,8 +3567,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ phaseCurrents: phaseCurrents, @@ -1657,11 +3581,12 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents api.PhaseVoltages @@ -1670,8 +3595,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -1684,11 +3612,12 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseCurrents api.PhasePowers }{ @@ -1696,8 +3625,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ phaseCurrents: phaseCurrents, @@ -1707,11 +3639,12 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents api.PhasePowers @@ -1720,8 +3653,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -1734,11 +3670,12 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseCurrents api.PhasePowers api.PhaseVoltages @@ -1747,8 +3684,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ phaseCurrents: phaseCurrents, @@ -1761,11 +3701,12 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents api.PhasePowers @@ -1775,8 +3716,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur Battery: &decorateMeterBatteryImpl{ battery: battery, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -1792,12 +3736,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter }{ Meter: base, Battery: &decorateMeterBatteryImpl{ @@ -1806,17 +3751,21 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy }{ Meter: base, @@ -1826,20 +3775,24 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseCurrents }{ Meter: base, @@ -1849,20 +3802,24 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ phaseCurrents: phaseCurrents, }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents }{ @@ -1873,8 +3830,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -1884,12 +3844,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseVoltages }{ Meter: base, @@ -1899,20 +3860,24 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ phaseVoltages: phaseVoltages, }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseVoltages }{ @@ -1923,8 +3888,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -1934,12 +3902,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseCurrents api.PhaseVoltages }{ @@ -1950,8 +3919,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ phaseCurrents: phaseCurrents, @@ -1961,12 +3933,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents api.PhaseVoltages @@ -1978,8 +3951,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -1992,12 +3968,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseCurrents api.PhasePowers }{ @@ -2008,8 +3985,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ phaseCurrents: phaseCurrents, @@ -2019,12 +3999,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents api.PhasePowers @@ -2036,8 +4017,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -2050,12 +4034,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.PhaseCurrents api.PhasePowers api.PhaseVoltages @@ -2067,8 +4052,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ phaseCurrents: phaseCurrents, @@ -2081,12 +4069,13 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter == nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController == nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery api.BatteryCapacity - api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter api.MeterEnergy api.PhaseCurrents api.PhasePowers @@ -2099,8 +4088,11 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur BatteryCapacity: &decorateMeterBatteryCapacityImpl{ batteryCapacity: batteryCapacity, }, - BatteryController: &decorateMeterBatteryControllerImpl{ - batteryController: batteryController, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, }, MeterEnergy: &decorateMeterMeterEnergyImpl{ meterEnergy: meterEnergy, @@ -2116,7 +4108,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2135,7 +4127,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2158,7 +4150,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2181,7 +4173,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2208,7 +4200,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2231,7 +4223,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2258,7 +4250,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2285,7 +4277,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2316,7 +4308,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2343,7 +4335,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2374,7 +4366,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2405,7 +4397,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity == nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2440,7 +4432,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2463,7 +4455,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2490,7 +4482,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2517,7 +4509,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2548,7 +4540,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2575,7 +4567,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2606,7 +4598,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2637,7 +4629,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2672,7 +4664,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2703,7 +4695,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: return &struct { api.Meter api.Battery @@ -2738,7 +4730,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2773,7 +4765,7 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur }, } - case battery != nil && batteryCapacity != nil && batteryController != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter == nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: return &struct { api.Meter api.Battery @@ -2811,6 +4803,798 @@ func decorateMeter(base api.Meter, meterEnergy func() (float64, error), phaseCur phaseVoltages: phaseVoltages, }, } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity == nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseCurrents + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers == nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages == nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy == nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } + + case battery != nil && batteryCapacity != nil && batteryController != nil && batteryMaxPowerGetter != nil && maxACPowerGetter != nil && meterEnergy != nil && phaseCurrents != nil && phasePowers != nil && phaseVoltages != nil: + return &struct { + api.Meter + api.Battery + api.BatteryCapacity + api.BatteryController + api.BatteryMaxPowerGetter + api.MaxACPowerGetter + api.MeterEnergy + api.PhaseCurrents + api.PhasePowers + api.PhaseVoltages + }{ + Meter: base, + Battery: &decorateMeterBatteryImpl{ + battery: battery, + }, + BatteryCapacity: &decorateMeterBatteryCapacityImpl{ + batteryCapacity: batteryCapacity, + }, + BatteryController: &decorateMeterBatteryControllerImpl{ + batteryController: batteryController, + }, + BatteryMaxPowerGetter: &decorateMeterBatteryMaxPowerGetterImpl{ + batteryMaxPowerGetter: batteryMaxPowerGetter, + }, + MaxACPowerGetter: &decorateMeterMaxACPowerGetterImpl{ + maxACPowerGetter: maxACPowerGetter, + }, + MeterEnergy: &decorateMeterMeterEnergyImpl{ + meterEnergy: meterEnergy, + }, + PhaseCurrents: &decorateMeterPhaseCurrentsImpl{ + phaseCurrents: phaseCurrents, + }, + PhasePowers: &decorateMeterPhasePowersImpl{ + phasePowers: phasePowers, + }, + PhaseVoltages: &decorateMeterPhaseVoltagesImpl{ + phaseVoltages: phaseVoltages, + }, + } } return nil @@ -2840,6 +5624,14 @@ func (impl *decorateMeterBatteryControllerImpl) SetBatteryMode(p0 api.BatteryMod return impl.batteryController(p0) } +type decorateMeterBatteryMaxPowerGetterImpl struct { + batteryMaxPowerGetter func() (float64, float64) +} + +func (impl *decorateMeterBatteryMaxPowerGetterImpl) GetMaxChargeDischargePower() (float64, float64) { + return impl.batteryMaxPowerGetter() +} + type decorateMeterMaxACPowerGetterImpl struct { maxACPowerGetter func() float64 } diff --git a/meter/openwb.go b/meter/openwb.go index d64b0238d..8f6dcad52 100644 --- a/meter/openwb.go +++ b/meter/openwb.go @@ -139,7 +139,7 @@ func NewOpenWBFromConfig(other map[string]interface{}) (api.Meter, error) { return nil, err } - res := m.Decorate(nil, currents, nil, nil, soc, capacity, nil, nil) + res := m.Decorate(nil, currents, nil, nil, soc, capacity, nil, nil, nil) return res, nil } diff --git a/meter/usage_battery.go b/meter/usage_battery.go index 2141ed3eb..760ee6077 100644 --- a/meter/usage_battery.go +++ b/meter/usage_battery.go @@ -18,6 +18,23 @@ func (m *batteryCapacity) Decorator() func() float64 { } } +type batteryChargeDischargePower struct { + MaxChargePower float64 + MaxDischargePower float64 +} + +// var _ api.BatteryMaxPowerGetter = (*batteryChargeDischargePower)(nil) + +// Decorator returns the max charge/discharge power decorator +func (m *batteryChargeDischargePower) Decorator() func() (float64, float64) { + if m.MaxChargePower == 0 || m.MaxDischargePower == 0 { + return nil + } + return func() (float64, float64) { + return m.MaxChargePower, m.MaxDischargePower + } +} + type batterySocLimits struct { MinSoc, MaxSoc float64 } diff --git a/util/templates/defaults.yaml b/util/templates/defaults.yaml index 4de4b3805..3647b0241 100644 --- a/util/templates/defaults.yaml +++ b/util/templates/defaults.yaml @@ -337,11 +337,6 @@ params: en: For forced charging of the battery. de: Für erzwungenes Laden des Speichers. advanced: true - - name: chargepower - description: - en: Maximum charge power - de: Maximale Ladeleistung - deprecated: true - name: maxchargerate unit: "%" type: int