diff --git a/charger/ocpp/cp.go b/charger/ocpp/cp.go index 8cab2cc38..7aa3725be 100644 --- a/charger/ocpp/cp.go +++ b/charger/ocpp/cp.go @@ -63,7 +63,7 @@ type CP struct { meterSupported bool meterUpdated time.Time measureDoneCh chan struct{} - measureands map[string]types.SampledValue + measurements map[string]types.SampledValue meterTrickerRunning bool supportedNumberOfConnectors int @@ -246,7 +246,7 @@ func (cp *CP) CurrentPower() (float64, error) { cp.mu.Lock() defer cp.mu.Unlock() - if power, ok := cp.measureands[string(types.MeasurandPowerActiveImport)]; ok { + if power, ok := cp.measurements[string(types.MeasurandPowerActiveImport)]; ok { return strconv.ParseFloat(power.Value, 64) } @@ -257,7 +257,7 @@ func (cp *CP) CurrentPower() (float64, error) { // cp.mu.Lock() // defer cp.mu.Unlock() -// // if energy, ok := cp.measureands[string(types.MeasurandEnergyActiveImportRegister)]; ok { +// // if energy, ok := cp.measurements[string(types.MeasurandEnergyActiveImportRegister)]; ok { // // v, err := strconv.ParseInt(energy.Value, 10, 64) // // if err != nil { // // return 0, err @@ -288,20 +288,21 @@ func (cp *CP) Currents() (float64, float64, float64, error) { cp.mu.Lock() defer cp.mu.Unlock() - var ( - currents = make(map[int]float64) + currents := make([]float64, 0, 3) - err error - ) - - for _, phase := range []int{1, 2, 3} { - if current, ok := cp.measureands[getKeyCurrentPhase(phase)]; ok { - currents[phase], err = strconv.ParseFloat(current.Value, 64) - if err != nil { - return 0, 0, 0, fmt.Errorf("invalid current for phase %d: %w", phase, err) - } + for phase := 1; phase <= 3; phase++ { + current, ok := cp.measurements[getKeyCurrentPhase(phase)] + if !ok { + return 0, 0, 0, api.ErrNotAvailable } + + f, err := strconv.ParseFloat(current.Value, 64) + if err != nil { + return 0, 0, 0, fmt.Errorf("invalid current for phase %d: %w", phase, err) + } + + currents = append(currents, f) } - return currents[1], currents[2], currents[3], nil + return currents[0], currents[1], currents[2], nil } diff --git a/charger/ocpp/cp_core.go b/charger/ocpp/cp_core.go index a2b270823..df470512e 100644 --- a/charger/ocpp/cp_core.go +++ b/charger/ocpp/cp_core.go @@ -103,7 +103,7 @@ func (cp *CP) MeterValues(request *core.MeterValuesRequest) (*core.MeterValuesCo cp.mu.Lock() cp.setMeterValues(request) - if energy, ok := cp.measureands[string(types.MeasurandEnergyActiveImportRegister)]; ok { + if energy, ok := cp.measurements[string(types.MeasurandEnergyActiveImportRegister)]; ok { v, _ := strconv.ParseInt(energy.Value, 10, 64) cp.currentTransaction.Charged = v - cp.currentTransaction.MeterValueStart } @@ -127,7 +127,7 @@ func (cp *CP) setMeterValues(request *core.MeterValuesRequest) { // ignore old meter value requests if meterValue.Timestamp.Time.After(cp.meterUpdated) { for _, sample := range meterValue.SampledValue { - cp.measureands[getSampleKey(sample)] = sample + cp.measurements[getSampleKey(sample)] = sample } } } diff --git a/charger/ocpp/cs.go b/charger/ocpp/cs.go index 2ba59d289..bb66ad482 100644 --- a/charger/ocpp/cs.go +++ b/charger/ocpp/cs.go @@ -3,7 +3,6 @@ package ocpp import ( "fmt" "sync" - "time" "github.com/evcc-io/evcc/util" ocpp16 "github.com/lorenzodonini/ocpp-go/ocpp1.6" @@ -21,8 +20,7 @@ func (cs *CS) Register(id string, meterSupported bool) *CP { cp := &CP{ id: id, log: util.NewLogger("ocpp-cp"), - meterUpdated: time.Now(), - measureands: make(map[string]types.SampledValue), + measurements: make(map[string]types.SampledValue), meterSupported: meterSupported, }