EVSEWifi: add identifier api (#1168)
This commit is contained in:
parent
c891477ba7
commit
52e2bcb43e
2 changed files with 344 additions and 19 deletions
|
|
@ -44,6 +44,7 @@ type EVSEListEntry struct {
|
|||
CurrentP1 float64 `json:"currentP1"`
|
||||
CurrentP2 float64 `json:"currentP2"`
|
||||
CurrentP3 float64 `json:"currentP3"`
|
||||
RFIDUID *string `json:"RFIDUID"`
|
||||
}
|
||||
|
||||
// EVSEWifi charger implementation
|
||||
|
|
@ -60,7 +61,7 @@ func init() {
|
|||
registry.Add("evsewifi", NewEVSEWifiFromConfig)
|
||||
}
|
||||
|
||||
// go:generate go run ../cmd/tools/decorate.go -f decorateEVSE -b *EVSEWifi -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.MeterCurrent,Currents,func() (float64, float64, float64, error)" -t "api.ChargerEx,MaxCurrentMillis,func(current float64) error"
|
||||
// go:generate go run ../cmd/tools/decorate.go -f decorateEVSE -b *EVSEWifi -r api.Charger -t "api.Meter,CurrentPower,func() (float64, error)" -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.MeterCurrent,Currents,func() (float64, float64, float64, error)" -t "api.ChargerEx,MaxCurrentMillis,func(current float64) error" -t "api.Identifier,Identify,func() (string, error)"
|
||||
|
||||
// NewEVSEWifiFromConfig creates a EVSEWifi charger from generic config
|
||||
func NewEVSEWifiFromConfig(other map[string]interface{}) (api.Charger, error) {
|
||||
|
|
@ -121,7 +122,13 @@ func NewEVSEWifiFromConfig(other map[string]interface{}) (api.Charger, error) {
|
|||
evse.current = 100 * evse.current
|
||||
}
|
||||
|
||||
return decorateEVSE(evse, currentPower, totalEnergy, currents, maxCurrentEx), nil
|
||||
// decorate Charger with Identifier
|
||||
var identify func() (string, error)
|
||||
if params.RFIDUID != nil {
|
||||
identify = evse.identify
|
||||
}
|
||||
|
||||
return decorateEVSE(evse, currentPower, totalEnergy, currents, maxCurrentEx, identify), nil
|
||||
}
|
||||
|
||||
// NewEVSEWifi creates EVSEWifi charger
|
||||
|
|
@ -259,6 +266,12 @@ func (evse *EVSEWifi) currents() (float64, float64, float64, error) {
|
|||
return float64(params.CurrentP1), float64(params.CurrentP2), float64(params.CurrentP3), err
|
||||
}
|
||||
|
||||
// Identify implements the api.Identifier interface
|
||||
func (evse *EVSEWifi) identify() (string, error) {
|
||||
params, err := evse.getParameters()
|
||||
return *params.RFIDUID, err
|
||||
}
|
||||
|
||||
// // ChargedEnergy implements the ChargeRater interface
|
||||
// func (evse *EVSEWifi) ChargedEnergy() (float64, error) {
|
||||
// params, err := evse.getParameters()
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@ import (
|
|||
"github.com/andig/evcc/api"
|
||||
)
|
||||
|
||||
func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy func() (float64, error), meterCurrent func() (float64, float64, float64, error), chargerEx func(current float64) error) api.Charger {
|
||||
func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy func() (float64, error), meterCurrent func() (float64, float64, float64, error), chargerEx func(float64) error, identifier func() (string, error)) api.Charger {
|
||||
switch {
|
||||
case chargerEx == nil && meter == nil && meterCurrent == nil && meterEnergy == nil:
|
||||
case chargerEx == nil && identifier == nil && meter == nil && meterCurrent == nil && meterEnergy == nil:
|
||||
return base
|
||||
|
||||
case chargerEx == nil && meter != nil && meterCurrent == nil && meterEnergy == nil:
|
||||
case chargerEx == nil && identifier == nil && meter != nil && meterCurrent == nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Meter
|
||||
|
|
@ -22,7 +22,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && meter == nil && meterCurrent == nil && meterEnergy != nil:
|
||||
case chargerEx == nil && identifier == nil && meter == nil && meterCurrent == nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.MeterEnergy
|
||||
|
|
@ -33,7 +33,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && meter != nil && meterCurrent == nil && meterEnergy != nil:
|
||||
case chargerEx == nil && identifier == nil && meter != nil && meterCurrent == nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Meter
|
||||
|
|
@ -48,7 +48,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && meter == nil && meterCurrent != nil && meterEnergy == nil:
|
||||
case chargerEx == nil && identifier == nil && meter == nil && meterCurrent != nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.MeterCurrent
|
||||
|
|
@ -59,7 +59,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && meter != nil && meterCurrent != nil && meterEnergy == nil:
|
||||
case chargerEx == nil && identifier == nil && meter != nil && meterCurrent != nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Meter
|
||||
|
|
@ -74,7 +74,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && meter == nil && meterCurrent != nil && meterEnergy != nil:
|
||||
case chargerEx == nil && identifier == nil && meter == nil && meterCurrent != nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.MeterCurrent
|
||||
|
|
@ -89,7 +89,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && meter != nil && meterCurrent != nil && meterEnergy != nil:
|
||||
case chargerEx == nil && identifier == nil && meter != nil && meterCurrent != nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Meter
|
||||
|
|
@ -108,7 +108,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && meter == nil && meterCurrent == nil && meterEnergy == nil:
|
||||
case chargerEx != nil && identifier == nil && meter == nil && meterCurrent == nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
|
|
@ -119,7 +119,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && meter != nil && meterCurrent == nil && meterEnergy == nil:
|
||||
case chargerEx != nil && identifier == nil && meter != nil && meterCurrent == nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
|
|
@ -134,7 +134,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && meter == nil && meterCurrent == nil && meterEnergy != nil:
|
||||
case chargerEx != nil && identifier == nil && meter == nil && meterCurrent == nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
|
|
@ -149,7 +149,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && meter != nil && meterCurrent == nil && meterEnergy != nil:
|
||||
case chargerEx != nil && identifier == nil && meter != nil && meterCurrent == nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
|
|
@ -168,7 +168,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && meter == nil && meterCurrent != nil && meterEnergy == nil:
|
||||
case chargerEx != nil && identifier == nil && meter == nil && meterCurrent != nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
|
|
@ -183,7 +183,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && meter != nil && meterCurrent != nil && meterEnergy == nil:
|
||||
case chargerEx != nil && identifier == nil && meter != nil && meterCurrent != nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
|
|
@ -202,7 +202,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && meter == nil && meterCurrent != nil && meterEnergy != nil:
|
||||
case chargerEx != nil && identifier == nil && meter == nil && meterCurrent != nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
|
|
@ -221,7 +221,7 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && meter != nil && meterCurrent != nil && meterEnergy != nil:
|
||||
case chargerEx != nil && identifier == nil && meter != nil && meterCurrent != nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
|
|
@ -243,6 +243,310 @@ func decorateEVSE(base *EVSEWifi, meter func() (float64, error), meterEnergy fun
|
|||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && identifier != nil && meter == nil && meterCurrent == nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Identifier
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && identifier != nil && meter != nil && meterCurrent == nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Identifier
|
||||
api.Meter
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
Meter: &decorateEVSEMeterImpl{
|
||||
meter: meter,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && identifier != nil && meter == nil && meterCurrent == nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Identifier
|
||||
api.MeterEnergy
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
MeterEnergy: &decorateEVSEMeterEnergyImpl{
|
||||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && identifier != nil && meter != nil && meterCurrent == nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Identifier
|
||||
api.Meter
|
||||
api.MeterEnergy
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
Meter: &decorateEVSEMeterImpl{
|
||||
meter: meter,
|
||||
},
|
||||
MeterEnergy: &decorateEVSEMeterEnergyImpl{
|
||||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && identifier != nil && meter == nil && meterCurrent != nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Identifier
|
||||
api.MeterCurrent
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
MeterCurrent: &decorateEVSEMeterCurrentImpl{
|
||||
meterCurrent: meterCurrent,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && identifier != nil && meter != nil && meterCurrent != nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Identifier
|
||||
api.Meter
|
||||
api.MeterCurrent
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
Meter: &decorateEVSEMeterImpl{
|
||||
meter: meter,
|
||||
},
|
||||
MeterCurrent: &decorateEVSEMeterCurrentImpl{
|
||||
meterCurrent: meterCurrent,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && identifier != nil && meter == nil && meterCurrent != nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Identifier
|
||||
api.MeterCurrent
|
||||
api.MeterEnergy
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
MeterCurrent: &decorateEVSEMeterCurrentImpl{
|
||||
meterCurrent: meterCurrent,
|
||||
},
|
||||
MeterEnergy: &decorateEVSEMeterEnergyImpl{
|
||||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx == nil && identifier != nil && meter != nil && meterCurrent != nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.Identifier
|
||||
api.Meter
|
||||
api.MeterCurrent
|
||||
api.MeterEnergy
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
Meter: &decorateEVSEMeterImpl{
|
||||
meter: meter,
|
||||
},
|
||||
MeterCurrent: &decorateEVSEMeterCurrentImpl{
|
||||
meterCurrent: meterCurrent,
|
||||
},
|
||||
MeterEnergy: &decorateEVSEMeterEnergyImpl{
|
||||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && identifier != nil && meter == nil && meterCurrent == nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
api.Identifier
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
ChargerEx: &decorateEVSEChargerExImpl{
|
||||
chargerEx: chargerEx,
|
||||
},
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && identifier != nil && meter != nil && meterCurrent == nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
api.Identifier
|
||||
api.Meter
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
ChargerEx: &decorateEVSEChargerExImpl{
|
||||
chargerEx: chargerEx,
|
||||
},
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
Meter: &decorateEVSEMeterImpl{
|
||||
meter: meter,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && identifier != nil && meter == nil && meterCurrent == nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
api.Identifier
|
||||
api.MeterEnergy
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
ChargerEx: &decorateEVSEChargerExImpl{
|
||||
chargerEx: chargerEx,
|
||||
},
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
MeterEnergy: &decorateEVSEMeterEnergyImpl{
|
||||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && identifier != nil && meter != nil && meterCurrent == nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
api.Identifier
|
||||
api.Meter
|
||||
api.MeterEnergy
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
ChargerEx: &decorateEVSEChargerExImpl{
|
||||
chargerEx: chargerEx,
|
||||
},
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
Meter: &decorateEVSEMeterImpl{
|
||||
meter: meter,
|
||||
},
|
||||
MeterEnergy: &decorateEVSEMeterEnergyImpl{
|
||||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && identifier != nil && meter == nil && meterCurrent != nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
api.Identifier
|
||||
api.MeterCurrent
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
ChargerEx: &decorateEVSEChargerExImpl{
|
||||
chargerEx: chargerEx,
|
||||
},
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
MeterCurrent: &decorateEVSEMeterCurrentImpl{
|
||||
meterCurrent: meterCurrent,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && identifier != nil && meter != nil && meterCurrent != nil && meterEnergy == nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
api.Identifier
|
||||
api.Meter
|
||||
api.MeterCurrent
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
ChargerEx: &decorateEVSEChargerExImpl{
|
||||
chargerEx: chargerEx,
|
||||
},
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
Meter: &decorateEVSEMeterImpl{
|
||||
meter: meter,
|
||||
},
|
||||
MeterCurrent: &decorateEVSEMeterCurrentImpl{
|
||||
meterCurrent: meterCurrent,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && identifier != nil && meter == nil && meterCurrent != nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
api.Identifier
|
||||
api.MeterCurrent
|
||||
api.MeterEnergy
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
ChargerEx: &decorateEVSEChargerExImpl{
|
||||
chargerEx: chargerEx,
|
||||
},
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
MeterCurrent: &decorateEVSEMeterCurrentImpl{
|
||||
meterCurrent: meterCurrent,
|
||||
},
|
||||
MeterEnergy: &decorateEVSEMeterEnergyImpl{
|
||||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
|
||||
case chargerEx != nil && identifier != nil && meter != nil && meterCurrent != nil && meterEnergy != nil:
|
||||
return &struct {
|
||||
*EVSEWifi
|
||||
api.ChargerEx
|
||||
api.Identifier
|
||||
api.Meter
|
||||
api.MeterCurrent
|
||||
api.MeterEnergy
|
||||
}{
|
||||
EVSEWifi: base,
|
||||
ChargerEx: &decorateEVSEChargerExImpl{
|
||||
chargerEx: chargerEx,
|
||||
},
|
||||
Identifier: &decorateEVSEIdentifierImpl{
|
||||
identifier: identifier,
|
||||
},
|
||||
Meter: &decorateEVSEMeterImpl{
|
||||
meter: meter,
|
||||
},
|
||||
MeterCurrent: &decorateEVSEMeterCurrentImpl{
|
||||
meterCurrent: meterCurrent,
|
||||
},
|
||||
MeterEnergy: &decorateEVSEMeterEnergyImpl{
|
||||
meterEnergy: meterEnergy,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
@ -256,6 +560,14 @@ func (impl *decorateEVSEChargerExImpl) MaxCurrentMillis(current float64) error {
|
|||
return impl.chargerEx(current)
|
||||
}
|
||||
|
||||
type decorateEVSEIdentifierImpl struct {
|
||||
identifier func() (string, error)
|
||||
}
|
||||
|
||||
func (impl *decorateEVSEIdentifierImpl) Identify() (string, error) {
|
||||
return impl.identifier()
|
||||
}
|
||||
|
||||
type decorateEVSEMeterImpl struct {
|
||||
meter func() (float64, error)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue