diff --git a/charger/phoenix-evcc.go b/charger/phoenix-evcc.go index 50d095e95..e7e35b75b 100644 --- a/charger/phoenix-evcc.go +++ b/charger/phoenix-evcc.go @@ -1,7 +1,6 @@ package charger import ( - "encoding/binary" "fmt" "github.com/andig/evcc/api" @@ -10,16 +9,11 @@ import ( ) const ( - phEVCCRegStatus = 24000 // Input - phEVCCRegMaxCurrent = 22000 // Holding phEVCCRegEnable = 20000 // Coil - - phRegPower = 337 // power reading - phRegEnergy = 341 // energy reading + phEVCCRegMaxCurrent = 22000 // Holding + phEVCCRegStatus = 24000 // Input ) -var phRegCurrents = []uint16{334, 335, 336} // current readings - // PhoenixEVCC is an api.ChargeController implementation for Phoenix EV-CC-AC1-M wallboxes. // It uses Modbus TCP to communicate with the wallbox at modbus client id 255. type PhoenixEVCC struct { @@ -36,9 +30,6 @@ func init() { func NewPhoenixEVCCFromConfig(other map[string]interface{}) (api.Charger, error) { cc := struct { modbus.Settings `mapstructure:",squash"` - Meter struct { - Power, Energy, Currents bool - } }{ Settings: modbus.Settings{ ID: 255, @@ -49,24 +40,7 @@ func NewPhoenixEVCCFromConfig(other map[string]interface{}) (api.Charger, error) return nil, err } - wb, err := NewPhoenixEVCC(cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.ID) - - var currentPower func() (float64, error) - if cc.Meter.Power { - currentPower = wb.currentPower - } - - var totalEnergy func() (float64, error) - if cc.Meter.Energy { - totalEnergy = wb.totalEnergy - } - - var currents func() (float64, float64, float64, error) - if cc.Meter.Currents { - currents = wb.currents - } - - return decoratePhoenixEVCC(wb, currentPower, totalEnergy, currents), err + return NewPhoenixEVCC(cc.URI, cc.Device, cc.Comset, cc.Baudrate, cc.ID) } // NewPhoenixEVCC creates a Phoenix charger @@ -128,43 +102,3 @@ func (wb *PhoenixEVCC) MaxCurrent(current int64) error { return err } - -func (wb *PhoenixEVCC) decodeReading(b []byte) float64 { - v := binary.BigEndian.Uint16(b) - return float64(v) -} - -// CurrentPower implements the Meter.CurrentPower interface -func (wb *PhoenixEVCC) currentPower() (float64, error) { - b, err := wb.conn.ReadHoldingRegisters(phRegPower, 1) - if err != nil { - return 0, err - } - - return wb.decodeReading(b), err -} - -// totalEnergy implements the Meter.TotalEnergy interface -func (wb *PhoenixEVCC) totalEnergy() (float64, error) { - b, err := wb.conn.ReadHoldingRegisters(phRegEnergy, 1) - if err != nil { - return 0, err - } - - return wb.decodeReading(b), err -} - -// currents implements the Meter.Currents interface -func (wb *PhoenixEVCC) currents() (float64, float64, float64, error) { - var currents []float64 - for _, regCurrent := range phRegCurrents { - b, err := wb.conn.ReadHoldingRegisters(regCurrent, 1) - if err != nil { - return 0, 0, 0, err - } - - currents = append(currents, wb.decodeReading(b)) - } - - return currents[0], currents[1], currents[2], nil -} diff --git a/charger/phoenix-evcc_decorators.go b/charger/phoenix-evcc_decorators.go deleted file mode 100644 index 6dc75c297..000000000 --- a/charger/phoenix-evcc_decorators.go +++ /dev/null @@ -1,137 +0,0 @@ -package charger - -// Code generated by github.com/andig/cmd/tools/decorate.go. DO NOT EDIT. - -import ( - "github.com/andig/evcc/api" -) - -func decoratePhoenixEVCC(base api.Charger, meter func() (float64, error), meterEnergy func() (float64, error), meterCurrent func() (float64, float64, float64, error)) api.Charger { - switch { - case meter == nil && meterCurrent == nil && meterEnergy == nil: - return base - - case meter != nil && meterCurrent == nil && meterEnergy == nil: - return &struct { - api.Charger - api.Meter - }{ - Charger: base, - Meter: &decoratePhoenixEVCCMeterImpl{ - meter: meter, - }, - } - - case meter == nil && meterCurrent == nil && meterEnergy != nil: - return &struct { - api.Charger - api.MeterEnergy - }{ - Charger: base, - MeterEnergy: &decoratePhoenixEVCCMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case meter != nil && meterCurrent == nil && meterEnergy != nil: - return &struct { - api.Charger - api.Meter - api.MeterEnergy - }{ - Charger: base, - Meter: &decoratePhoenixEVCCMeterImpl{ - meter: meter, - }, - MeterEnergy: &decoratePhoenixEVCCMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case meter == nil && meterCurrent != nil && meterEnergy == nil: - return &struct { - api.Charger - api.MeterCurrent - }{ - Charger: base, - MeterCurrent: &decoratePhoenixEVCCMeterCurrentImpl{ - meterCurrent: meterCurrent, - }, - } - - case meter != nil && meterCurrent != nil && meterEnergy == nil: - return &struct { - api.Charger - api.Meter - api.MeterCurrent - }{ - Charger: base, - Meter: &decoratePhoenixEVCCMeterImpl{ - meter: meter, - }, - MeterCurrent: &decoratePhoenixEVCCMeterCurrentImpl{ - meterCurrent: meterCurrent, - }, - } - - case meter == nil && meterCurrent != nil && meterEnergy != nil: - return &struct { - api.Charger - api.MeterCurrent - api.MeterEnergy - }{ - Charger: base, - MeterCurrent: &decoratePhoenixEVCCMeterCurrentImpl{ - meterCurrent: meterCurrent, - }, - MeterEnergy: &decoratePhoenixEVCCMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - - case meter != nil && meterCurrent != nil && meterEnergy != nil: - return &struct { - api.Charger - api.Meter - api.MeterCurrent - api.MeterEnergy - }{ - Charger: base, - Meter: &decoratePhoenixEVCCMeterImpl{ - meter: meter, - }, - MeterCurrent: &decoratePhoenixEVCCMeterCurrentImpl{ - meterCurrent: meterCurrent, - }, - MeterEnergy: &decoratePhoenixEVCCMeterEnergyImpl{ - meterEnergy: meterEnergy, - }, - } - } - - return nil -} - -type decoratePhoenixEVCCMeterImpl struct { - meter func() (float64, error) -} - -func (impl *decoratePhoenixEVCCMeterImpl) CurrentPower() (float64, error) { - return impl.meter() -} - -type decoratePhoenixEVCCMeterCurrentImpl struct { - meterCurrent func() (float64, float64, float64, error) -} - -func (impl *decoratePhoenixEVCCMeterCurrentImpl) Currents() (float64, float64, float64, error) { - return impl.meterCurrent() -} - -type decoratePhoenixEVCCMeterEnergyImpl struct { - meterEnergy func() (float64, error) -} - -func (impl *decoratePhoenixEVCCMeterEnergyImpl) TotalEnergy() (float64, error) { - return impl.meterEnergy() -}