Warp2: add voltages (#10168)

This commit is contained in:
andig 2023-10-03 15:33:09 +02:00 • committed by GitHub
parent 5fbcec599f
commit 54f9ec36d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 748 additions and 48 deletions

View file

@ -1,9 +1,10 @@
package warp
const (
FeatureMeter = "meter"
FeatureMeterPhases = "meter_phases"
FeatureNfc = "nfc"
FeatureMeter = "meter"
FeatureMeterAllValues = "meter_all_values"
FeatureMeterPhases = "meter_phases"
FeatureNfc = "nfc"
)
// https://www.warp-charger.com/api.html#evse_state

View file

@ -37,7 +37,7 @@ func init() {
registry.Add("warp-fw2", NewWarp2FromConfig) // deprecated
}
// go:generate go run ../cmd/tools/decorate.go -f decorateWarp2 -b *Warp2 -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.Identifier,Identify,func() (string, error)" -t "api.PhaseSwitcher,Phases1p3p,func(int) error"
// go:generate go run ../cmd/tools/decorate.go -f decorateWarp2 -b *Warp2 -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.Identifier,Identify,func() (string, error)" -t "api.PhaseSwitcher,Phases1p3p,func(int) error"
// NewWarpFromConfig creates a new configurable charger
func NewWarp2FromConfig(other map[string]interface{}) (api.Charger, error) {
@ -66,9 +66,10 @@ func NewWarp2FromConfig(other map[string]interface{}) (api.Charger, error) {
totalEnergy = wb.totalEnergy
}
var currents func() (float64, float64, float64, error)
var currents, voltages func() (float64, float64, float64, error)
if wb.hasFeature(cc.Topic, warp.FeatureMeterPhases) {
currents = wb.currents
voltages = wb.voltages
}
var identity func() (string, error)
@ -83,7 +84,7 @@ func NewWarp2FromConfig(other map[string]interface{}) (api.Charger, error) {
}
}
return decorateWarp2(wb, currentPower, totalEnergy, currents, identity, phases), err
return decorateWarp2(wb, currentPower, totalEnergy, currents, voltages, identity, phases), err
}
// NewWarp2 creates a new configurable charger
@ -239,24 +240,42 @@ func (wb *Warp2) totalEnergy() (float64, error) {
return res.EnergyAbs, err
}
func (wb *Warp2) meterValues() ([]float64, error) {
s, err := wb.meterDetailsG()
if err != nil {
return nil, err
}
var res []float64
if err := json.Unmarshal([]byte(s), &res); err != nil {
return nil, err
}
if len(res) <= 5 {
return nil, errors.New("invalid length")
}
return res, nil
}
// currents implements the api.MeterCurrrents interface
func (wb *Warp2) currents() (float64, float64, float64, error) {
var res []float64
s, err := wb.meterDetailsG()
res, err := wb.meterValues()
if err != nil {
return 0, 0, 0, err
}
if err := json.Unmarshal([]byte(s), &res); err != nil {
return res[3], res[4], res[5], nil
}
// voltages implements the api.MeterVoltages interface
func (wb *Warp2) voltages() (float64, float64, float64, error) {
res, err := wb.meterValues()
if err != nil {
return 0, 0, 0, err
}
if len(res) <= 5 {
return 0, 0, 0, errors.New("invalid length")
}
return res[3], res[4], res[5], nil
return res[0], res[1], res[2], nil
}
func (wb *Warp2) identify() (string, error) {

View file

@ -6,12 +6,12 @@ import (
"github.com/evcc-io/evcc/api"
)
func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), identifier func() (string, error), phaseSwitcher func(int) error) api.Charger {
func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), identifier func() (string, error), phaseSwitcher func(int) error) api.Charger {
switch {
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil:
return base
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Meter
@ -22,7 +22,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.MeterEnergy
@ -33,7 +33,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Meter
@ -48,7 +48,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.PhaseCurrents
@ -59,7 +59,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Meter
@ -74,7 +74,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.MeterEnergy
@ -89,7 +89,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Meter
@ -108,7 +108,143 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.PhaseVoltages
}{
Warp2: base,
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Meter
api.PhaseVoltages
}{
Warp2: base,
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.MeterEnergy
api.PhaseVoltages
}{
Warp2: base,
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Meter
api.MeterEnergy
api.PhaseVoltages
}{
Warp2: base,
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.PhaseCurrents
api.PhaseVoltages
}{
Warp2: base,
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Meter
api.PhaseCurrents
api.PhaseVoltages
}{
Warp2: base,
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.MeterEnergy
api.PhaseCurrents
api.PhaseVoltages
}{
Warp2: base,
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Meter
api.MeterEnergy
api.PhaseCurrents
api.PhaseVoltages
}{
Warp2: base,
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -119,7 +255,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -134,7 +270,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -149,7 +285,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil:
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -168,7 +304,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -183,7 +319,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -202,7 +338,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -221,7 +357,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil:
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -244,7 +380,175 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.Meter
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.MeterEnergy
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.Meter
api.MeterEnergy
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.PhaseCurrents
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.Meter
api.PhaseCurrents
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.MeterEnergy
api.PhaseCurrents
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher == nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.Meter
api.MeterEnergy
api.PhaseCurrents
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.PhaseSwitcher
@ -255,7 +559,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Meter
@ -270,7 +574,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.MeterEnergy
@ -285,7 +589,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Meter
@ -304,7 +608,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.PhaseCurrents
@ -319,7 +623,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Meter
@ -338,7 +642,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.MeterEnergy
@ -357,7 +661,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Meter
@ -380,7 +684,175 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Meter
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.MeterEnergy
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Meter
api.MeterEnergy
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.PhaseCurrents
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Meter
api.PhaseCurrents
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.MeterEnergy
api.PhaseCurrents
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier == nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Meter
api.MeterEnergy
api.PhaseCurrents
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -395,7 +867,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -414,7 +886,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -433,7 +905,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil:
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -456,7 +928,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -475,7 +947,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -498,7 +970,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -521,7 +993,7 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
},
}
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil:
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages == nil:
return &struct {
*Warp2
api.Identifier
@ -547,6 +1019,206 @@ func decorateWarp2(base *Warp2, meter func() (float64, error), meterEnergy func(
phaseSwitcher: phaseSwitcher,
},
}
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.Meter
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.MeterEnergy
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents == nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.Meter
api.MeterEnergy
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter == nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.PhaseCurrents
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter != nil && meterEnergy == nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.Meter
api.PhaseCurrents
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter == nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.MeterEnergy
api.PhaseCurrents
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
case identifier != nil && meter != nil && meterEnergy != nil && phaseCurrents != nil && phaseSwitcher != nil && phaseVoltages != nil:
return &struct {
*Warp2
api.Identifier
api.Meter
api.MeterEnergy
api.PhaseCurrents
api.PhaseSwitcher
api.PhaseVoltages
}{
Warp2: base,
Identifier: &decorateWarp2IdentifierImpl{
identifier: identifier,
},
Meter: &decorateWarp2MeterImpl{
meter: meter,
},
MeterEnergy: &decorateWarp2MeterEnergyImpl{
meterEnergy: meterEnergy,
},
PhaseCurrents: &decorateWarp2PhaseCurrentsImpl{
phaseCurrents: phaseCurrents,
},
PhaseSwitcher: &decorateWarp2PhaseSwitcherImpl{
phaseSwitcher: phaseSwitcher,
},
PhaseVoltages: &decorateWarp2PhaseVoltagesImpl{
phaseVoltages: phaseVoltages,
},
}
}
return nil
@ -591,3 +1263,11 @@ type decorateWarp2PhaseSwitcherImpl struct {
func (impl *decorateWarp2PhaseSwitcherImpl) Phases1p3p(phases int) error {
return impl.phaseSwitcher(phases)
}
type decorateWarp2PhaseVoltagesImpl struct {
phaseVoltages func() (float64, float64, float64, error)
}
func (impl *decorateWarp2PhaseVoltagesImpl) Voltages() (float64, float64, float64, error) {
return impl.phaseVoltages()
}