@@ -6,40 +6,100 @@ import (
66 "github.com/andig/evcc/api"
77)
88
9- func decorateEVSE (base api.Charger , meterEnergy func () (float64 , error ), meterCurrent func () (float64 , float64 , float64 , error )) api.Charger {
9+ func decorateEVSE (base api.Charger , meter func () ( float64 , error ), meterEnergy func () (float64 , error ), meterCurrent func () (float64 , float64 , float64 , error )) api.Charger {
1010 switch {
11- case meterCurrent == nil && meterEnergy == nil :
11+ case meter == nil && meterCurrent == nil && meterEnergy == nil :
1212 return base
1313
14- case meterCurrent == nil && meterEnergy ! = nil :
14+ case meter != nil && meterCurrent == nil && meterEnergy = = nil :
1515 return & struct {
1616 api.Charger
17+ api.Meter
18+ }{
19+ Charger : base ,
20+ Meter : & decorateEVSEMeterImpl {
21+ meter : meter ,
22+ },
23+ }
24+
25+ case meter == nil && meterCurrent == nil && meterEnergy != nil :
26+ return & struct {
27+ api.Charger
28+ api.MeterEnergy
29+ }{
30+ Charger : base ,
31+ MeterEnergy : & decorateEVSEMeterEnergyImpl {
32+ meterEnergy : meterEnergy ,
33+ },
34+ }
35+
36+ case meter != nil && meterCurrent == nil && meterEnergy != nil :
37+ return & struct {
38+ api.Charger
39+ api.Meter
1740 api.MeterEnergy
1841 }{
1942 Charger : base ,
43+ Meter : & decorateEVSEMeterImpl {
44+ meter : meter ,
45+ },
2046 MeterEnergy : & decorateEVSEMeterEnergyImpl {
2147 meterEnergy : meterEnergy ,
2248 },
2349 }
2450
25- case meterCurrent != nil && meterEnergy == nil :
51+ case meter == nil && meterCurrent != nil && meterEnergy == nil :
52+ return & struct {
53+ api.Charger
54+ api.MeterCurrent
55+ }{
56+ Charger : base ,
57+ MeterCurrent : & decorateEVSEMeterCurrentImpl {
58+ meterCurrent : meterCurrent ,
59+ },
60+ }
61+
62+ case meter != nil && meterCurrent != nil && meterEnergy == nil :
63+ return & struct {
64+ api.Charger
65+ api.Meter
66+ api.MeterCurrent
67+ }{
68+ Charger : base ,
69+ Meter : & decorateEVSEMeterImpl {
70+ meter : meter ,
71+ },
72+ MeterCurrent : & decorateEVSEMeterCurrentImpl {
73+ meterCurrent : meterCurrent ,
74+ },
75+ }
76+
77+ case meter == nil && meterCurrent != nil && meterEnergy != nil :
2678 return & struct {
2779 api.Charger
2880 api.MeterCurrent
81+ api.MeterEnergy
2982 }{
3083 Charger : base ,
3184 MeterCurrent : & decorateEVSEMeterCurrentImpl {
3285 meterCurrent : meterCurrent ,
3386 },
87+ MeterEnergy : & decorateEVSEMeterEnergyImpl {
88+ meterEnergy : meterEnergy ,
89+ },
3490 }
3591
36- case meterCurrent != nil && meterEnergy != nil :
92+ case meter != nil && meterCurrent != nil && meterEnergy != nil :
3793 return & struct {
3894 api.Charger
95+ api.Meter
3996 api.MeterCurrent
4097 api.MeterEnergy
4198 }{
4299 Charger : base ,
100+ Meter : & decorateEVSEMeterImpl {
101+ meter : meter ,
102+ },
43103 MeterCurrent : & decorateEVSEMeterCurrentImpl {
44104 meterCurrent : meterCurrent ,
45105 },
@@ -52,6 +112,14 @@ func decorateEVSE(base api.Charger, meterEnergy func() (float64, error), meterCu
52112 return nil
53113}
54114
115+ type decorateEVSEMeterImpl struct {
116+ meter func () (float64 , error )
117+ }
118+
119+ func (impl * decorateEVSEMeterImpl ) CurrentPower () (float64 , error ) {
120+ return impl .meter ()
121+ }
122+
55123type decorateEVSEMeterCurrentImpl struct {
56124 meterCurrent func () (float64 , float64 , float64 , error )
57125}
0 commit comments