diff --git a/charger/ocpp/cs.go b/charger/ocpp/cs.go index e13ce7c3fc..46b6072f77 100644 --- a/charger/ocpp/cs.go +++ b/charger/ocpp/cs.go @@ -57,11 +57,12 @@ func (cs *CS) NewChargePoint(chargePoint ocpp16.ChargePointConnection) { if cp, err := cs.chargepointByID(chargePoint.ID()); err != nil { // check for anonymous chargepoint - if cp, ok := cs.cps[""]; ok { + if cp, err := cs.chargepointByID(""); err == nil { cs.log.INFO.Printf("chargepoint connected, registering: %s", chargePoint.ID()) // update id cp.RegisterID(chargePoint.ID()) + cs.cps[chargePoint.ID()] = cp delete(cs.cps, "") diff --git a/charger/ocpp/cs_core.go b/charger/ocpp/cs_core.go index b96efc26a9..1b70dca6f0 100644 --- a/charger/ocpp/cs_core.go +++ b/charger/ocpp/cs_core.go @@ -53,6 +53,9 @@ func (cs *CS) TriggerMeterValuesRequest(id string, connector int) { // cp actions func (cs *CS) OnAuthorize(id string, request *core.AuthorizeRequest) (*core.AuthorizeConfirmation, error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err @@ -62,6 +65,9 @@ func (cs *CS) OnAuthorize(id string, request *core.AuthorizeRequest) (*core.Auth } func (cs *CS) OnBootNotification(id string, request *core.BootNotificationRequest) (*core.BootNotificationConfirmation, error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err @@ -71,6 +77,9 @@ func (cs *CS) OnBootNotification(id string, request *core.BootNotificationReques } func (cs *CS) OnDataTransfer(id string, request *core.DataTransferRequest) (*core.DataTransferConfirmation, error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err @@ -80,6 +89,9 @@ func (cs *CS) OnDataTransfer(id string, request *core.DataTransferRequest) (*cor } func (cs *CS) OnHeartbeat(id string, request *core.HeartbeatRequest) (*core.HeartbeatConfirmation, error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err @@ -89,6 +101,9 @@ func (cs *CS) OnHeartbeat(id string, request *core.HeartbeatRequest) (*core.Hear } func (cs *CS) OnMeterValues(id string, request *core.MeterValuesRequest) (*core.MeterValuesConfirmation, error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err @@ -98,6 +113,9 @@ func (cs *CS) OnMeterValues(id string, request *core.MeterValuesRequest) (*core. } func (cs *CS) OnStatusNotification(id string, request *core.StatusNotificationRequest) (*core.StatusNotificationConfirmation, error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err @@ -107,6 +125,9 @@ func (cs *CS) OnStatusNotification(id string, request *core.StatusNotificationRe } func (cs *CS) OnStartTransaction(id string, request *core.StartTransactionRequest) (*core.StartTransactionConfirmation, error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err @@ -116,6 +137,9 @@ func (cs *CS) OnStartTransaction(id string, request *core.StartTransactionReques } func (cs *CS) OnStopTransaction(id string, request *core.StopTransactionRequest) (*core.StopTransactionConfirmation, error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err @@ -125,6 +149,9 @@ func (cs *CS) OnStopTransaction(id string, request *core.StopTransactionRequest) } func (cs *CS) OnDiagnosticsStatusNotification(id string, request *firmware.DiagnosticsStatusNotificationRequest) (confirmation *firmware.DiagnosticsStatusNotificationConfirmation, err error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err @@ -134,6 +161,9 @@ func (cs *CS) OnDiagnosticsStatusNotification(id string, request *firmware.Diagn } func (cs *CS) OnFirmwareStatusNotification(id string, request *firmware.FirmwareStatusNotificationRequest) (confirmation *firmware.FirmwareStatusNotificationConfirmation, err error) { + cs.mu.Lock() + defer cs.mu.Unlock() + cp, err := cs.chargepointByID(id) if err != nil { return nil, err