diff --git a/charger/ocpp.go b/charger/ocpp.go index 58133fb4d..a9422bf23 100644 --- a/charger/ocpp.go +++ b/charger/ocpp.go @@ -133,6 +133,7 @@ func NewOCPP(id string, connector int, idtag string, if err != nil { return nil, err } + conn.AllowStart(autoStart) c := &OCPP{ log: log, @@ -376,6 +377,11 @@ func (c *OCPP) enableRemote(enable bool) error { return err } + if enable { + c.conn.AllowStart(true) + defer c.conn.AllowStart(false) + } + rc := make(chan error, 1) if enable { if txn > 0 { diff --git a/charger/ocpp/connector.go b/charger/ocpp/connector.go index 463ef63ab..ffe26f777 100644 --- a/charger/ocpp/connector.go +++ b/charger/ocpp/connector.go @@ -22,8 +22,9 @@ type Connector struct { cp *CP id int - status *core.StatusNotificationRequest - statusC chan struct{} + allowStart bool + status *core.StatusNotificationRequest + statusC chan struct{} meterUpdated time.Time measurements map[types.Measurand]types.SampledValue @@ -68,6 +69,12 @@ func (conn *Connector) IdTag() string { return conn.idTag } +func (conn *Connector) AllowStart(allow bool) { + conn.mu.Lock() + defer conn.mu.Unlock() + conn.allowStart = allow +} + func (conn *Connector) TriggerMessageRequest(feature remotetrigger.MessageTrigger, f ...func(request *remotetrigger.TriggerMessageRequest)) { Instance().TriggerMessageRequest(conn.cp.ID(), feature, func(request *remotetrigger.TriggerMessageRequest) { request.ConnectorId = &conn.id diff --git a/charger/ocpp/connector_core.go b/charger/ocpp/connector_core.go index 3f3e47858..18ab7f429 100644 --- a/charger/ocpp/connector_core.go +++ b/charger/ocpp/connector_core.go @@ -86,15 +86,19 @@ func (conn *Connector) StartTransaction(request *core.StartTransactionRequest) ( return res, nil } - conn.txnCount++ - conn.txnId = conn.txnCount - conn.idTag = request.IdTag - res := &core.StartTransactionConfirmation{ IdTagInfo: &types.IdTagInfo{ - Status: types.AuthorizationStatusAccepted, + Status: types.AuthorizationStatusBlocked, }, - TransactionId: conn.txnId, + } + + if conn.allowStart { + conn.txnCount++ + conn.txnId = conn.txnCount + conn.idTag = request.IdTag + + res.IdTagInfo.Status = types.AuthorizationStatusAccepted + res.TransactionId = conn.txnId } return res, nil