+ if (
+ this.chargingStation.getConnectorStatus(connectorId).transactionRemoteStarted &&
+ this.chargingStation.getAuthorizeRemoteTxRequests() &&
+ this.chargingStation.getMayAuthorizeAtRemoteStart() &&
+ !this.chargingStation.getConnectorStatus(connectorId).idTagLocalAuthorized &&
+ !this.chargingStation.getConnectorStatus(connectorId).idTagAuthorized
+ ) {
+ logger.error(
+ this.chargingStation.logPrefix() +
+ ' Trying to start a transaction with a not authorized idTag ' +
+ this.chargingStation.getConnectorStatus(connectorId).authorizeIdTag +
+ ' on connector Id ' +
+ connectorId.toString()
+ );
+ await this.resetConnectorOnStartTransactionError(connectorId);
+ return;
+ }
+ if (
+ this.chargingStation.getConnectorStatus(connectorId).idTagAuthorized &&
+ this.chargingStation.getConnectorStatus(connectorId).authorizeIdTag !== requestPayload.idTag
+ ) {
+ logger.error(
+ this.chargingStation.logPrefix() +
+ ' Trying to start a transaction with an idTag ' +
+ requestPayload.idTag +
+ ' different from the authorize request one ' +
+ this.chargingStation.getConnectorStatus(connectorId).authorizeIdTag +
+ ' on connector Id ' +
+ connectorId.toString()
+ );
+ await this.resetConnectorOnStartTransactionError(connectorId);
+ return;
+ }
+ if (
+ this.chargingStation.getConnectorStatus(connectorId).idTagLocalAuthorized &&
+ this.chargingStation.getConnectorStatus(connectorId).localAuthorizeIdTag !==
+ requestPayload.idTag
+ ) {
+ logger.error(
+ this.chargingStation.logPrefix() +
+ ' Trying to start a transaction with an idTag ' +
+ requestPayload.idTag +
+ ' different from the local authorized one ' +
+ this.chargingStation.getConnectorStatus(connectorId).localAuthorizeIdTag +
+ ' on connector Id ' +
+ connectorId.toString()
+ );
+ await this.resetConnectorOnStartTransactionError(connectorId);
+ return;
+ }
+ if (this.chargingStation.getConnectorStatus(connectorId)?.transactionStarted) {
+ logger.debug(
+ this.chargingStation.logPrefix() +
+ ' Trying to start a transaction on an already used connector ' +
+ connectorId.toString() +
+ ': %j',
+ this.chargingStation.getConnectorStatus(connectorId)
+ );
+ return;
+ }
+ if (
+ this.chargingStation.getConnectorStatus(connectorId)?.status !==
+ OCPP16ChargePointStatus.AVAILABLE &&
+ this.chargingStation.getConnectorStatus(connectorId)?.status !==
+ OCPP16ChargePointStatus.PREPARING
+ ) {
+ logger.error(
+ `${this.chargingStation.logPrefix()} Trying to start a transaction on connector ${connectorId.toString()} with status ${
+ this.chargingStation.getConnectorStatus(connectorId)?.status
+ }`
+ );
+ return;
+ }
+ if (!Number.isInteger(payload.transactionId)) {
+ logger.warn(
+ `${this.chargingStation.logPrefix()} Trying to start a transaction on connector ${connectorId.toString()} with a non integer transaction Id ${
+ payload.transactionId
+ }, converting to integer`
+ );
+ payload.transactionId = Utils.convertToInt(payload.transactionId);
+ }