Ocpp: simplify measurement handling (#3936)
This commit is contained in:
parent
2226a9abce
commit
b567d1ca4a
3 changed files with 19 additions and 20 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue