From 68cc29a969075ab65b05ded6c10ec3a11c2e06d9 Mon Sep 17 00:00:00 2001 From: franzongit <104900950+franzongit@users.noreply.github.com> Date: Sun, 2 Jun 2024 17:50:43 +0200 Subject: [PATCH] Ocpp: add workarounds for Enercab Smart (ELEDIO - EVCC01) (#13990) * allow enercab smart (ELEDIO / EVCC01) sending file:// and not ip/name as origin string when switching to websocket * allow enercab smart (ELEDIO / EVCC01) sending space padded numerical values of small numbers * accept old pending stop message during startup * Accept stopping unknown txn --- charger/ocpp/connector_core.go | 2 ++ charger/ocpp/cp_core.go | 8 +++++++- charger/ocpp/instance.go | 2 ++ charger/ocpp_test.go | 3 ++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/charger/ocpp/connector_core.go b/charger/ocpp/connector_core.go index fbdc3c52f5..d288d87a3d 100644 --- a/charger/ocpp/connector_core.go +++ b/charger/ocpp/connector_core.go @@ -1,6 +1,7 @@ package ocpp import ( + "strings" "time" "github.com/lorenzodonini/ocpp-go/ocpp1.6/core" @@ -60,6 +61,7 @@ func (conn *Connector) MeterValues(request *core.MeterValuesRequest) (*core.Mete // ignore old meter value requests if meterValue.Timestamp.Time.After(conn.meterUpdated) { for _, sample := range meterValue.SampledValue { + sample.Value = strings.TrimSpace(sample.Value) conn.measurements[getSampleKey(sample)] = sample conn.meterUpdated = conn.clock.Now() } diff --git a/charger/ocpp/cp_core.go b/charger/ocpp/cp_core.go index 90b4f78274..d0d15a3bd8 100644 --- a/charger/ocpp/cp_core.go +++ b/charger/ocpp/cp_core.go @@ -111,7 +111,13 @@ func (cp *CP) StopTransaction(request *core.StopTransactionRequest) (*core.StopT conn := cp.connectorByTransactionID(request.TransactionId) if conn == nil { - return nil, ErrInvalidTransaction + res := &core.StopTransactionConfirmation{ + IdTagInfo: &types.IdTagInfo{ + Status: types.AuthorizationStatusAccepted, // accept old pending stop message during startup + }, + } + + return res, nil } return conn.StopTransaction(request) diff --git a/charger/ocpp/instance.go b/charger/ocpp/instance.go index 270b9c6a0a..9df9ec1ec0 100644 --- a/charger/ocpp/instance.go +++ b/charger/ocpp/instance.go @@ -1,6 +1,7 @@ package ocpp import ( + "net/http" "sync" "time" @@ -31,6 +32,7 @@ func Instance() *CS { server := ws.NewServer() server.SetTimeoutConfig(timeoutConfig) + server.SetCheckOriginHandler(func(r *http.Request) bool { return true }) dispatcher := ocppj.NewDefaultServerDispatcher(ocppj.NewFIFOQueueMap(0)) dispatcher.SetTimeout(time.Minute) diff --git a/charger/ocpp_test.go b/charger/ocpp_test.go index 6a22e99809..8f70c18a20 100644 --- a/charger/ocpp_test.go +++ b/charger/ocpp_test.go @@ -126,8 +126,9 @@ func (suite *ocppTestSuite) TestConnect() { { expectedTxn := 99 + // always accept stopping unknown transaction, see https://github.com/evcc-io/evcc/pull/13990 _, err := cp1.StopTransaction(0, types.NewDateTime(suite.clock.Now()), expectedTxn) - suite.Require().Error(err) + suite.Require().NoError(err) _, err = cp1.MeterValues(1, []types.MeterValue{ {