Ocpp: simplify measurement handling (#3936)

This commit is contained in:
andig 2022-07-25 17:17:27 +02:00 • committed by GitHub
parent 2226a9abce
commit b567d1ca4a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 20 deletions

View file

@ -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
}

View file

@ -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
}
}
}

View file

@ -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,
}