import { Client, type FTPResponse } from 'basic-ftp';
import tar from 'tar';
+import { OCPP16Constants } from './OCPP16Constants';
+import { OCPP16ServiceUtils } from './OCPP16ServiceUtils';
import {
type ChargingStation,
ChargingStationConfigurationUtils,
type UnlockConnectorResponse,
} from '../../../types';
import { Constants, Utils, logger } from '../../../utils';
-import { OCPP16Constants, OCPP16ServiceUtils, OCPPIncomingRequestService } from '../internal';
+import { OCPPIncomingRequestService } from '../OCPPIncomingRequestService';
const moduleName = 'OCPP16IncomingRequestService';
let response: JsonType;
if (
chargingStation.getOcppStrictCompliance() === true &&
- chargingStation.isInPendingState() === true &&
+ chargingStation.inPendingState() === true &&
(commandName === OCPP16IncomingRequestCommand.REMOTE_START_TRANSACTION ||
commandName === OCPP16IncomingRequestCommand.REMOTE_STOP_TRANSACTION)
) {
if (
chargingStation.isRegistered() === true ||
(chargingStation.getOcppStrictCompliance() === false &&
- chargingStation.isInUnknownState() === true)
+ chargingStation.inUnknownState() === true)
) {
if (
this.incomingRequestHandlers.has(commandName) === true &&
);
if (!keyToChange) {
return OCPP16Constants.OCPP_CONFIGURATION_RESPONSE_NOT_SUPPORTED;
- } else if (keyToChange && keyToChange.readonly) {
+ } else if (keyToChange?.readonly === true) {
return OCPP16Constants.OCPP_CONFIGURATION_RESPONSE_REJECTED;
- } else if (keyToChange && !keyToChange.readonly) {
+ } else if (keyToChange?.readonly === false) {
let valueChanged = false;
if (keyToChange.value !== commandPayload.value) {
ChargingStationConfigurationUtils.setConfigurationKeyValue(
commandPayload: RemoteStartTransactionRequest
): Promise<GenericResponse> {
const transactionConnectorId = commandPayload.connectorId;
- if (chargingStation.hasConnector(transactionConnectorId) === true) {
- const remoteStartTransactionLogMsg = `${chargingStation.logPrefix()} Transaction remotely STARTED on ${
- chargingStation.stationInfo.chargingStationId
- }#${transactionConnectorId.toString()} for idTag '${commandPayload.idTag}'`;
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(
+ if (chargingStation.hasConnector(transactionConnectorId) === false) {
+ return this.notifyRemoteStartTransactionRejected(
chargingStation,
transactionConnectorId,
- OCPP16ChargePointStatus.Preparing
+ commandPayload.idTag
);
- const connectorStatus = chargingStation.getConnectorStatus(transactionConnectorId);
+ }
+ if (
+ chargingStation.isChargingStationAvailable() === false ||
+ chargingStation.isConnectorAvailable(transactionConnectorId) === false
+ ) {
+ return this.notifyRemoteStartTransactionRejected(
+ chargingStation,
+ transactionConnectorId,
+ commandPayload.idTag
+ );
+ }
+ const remoteStartTransactionLogMsg = `${chargingStation.logPrefix()} Transaction remotely STARTED on ${
+ chargingStation.stationInfo.chargingStationId
+ }#${transactionConnectorId.toString()} for idTag '${commandPayload.idTag}'`;
+ await OCPP16ServiceUtils.sendAndSetConnectorStatus(
+ chargingStation,
+ transactionConnectorId,
+ OCPP16ChargePointStatus.Preparing
+ );
+ const connectorStatus = chargingStation.getConnectorStatus(transactionConnectorId);
+ // Check if authorized
+ if (chargingStation.getAuthorizeRemoteTxRequests() === true) {
+ let authorized = false;
if (
- chargingStation.isChargingStationAvailable() === true &&
- chargingStation.isConnectorAvailable(transactionConnectorId) === true
+ chargingStation.getLocalAuthListEnabled() === true &&
+ chargingStation.hasIdTags() === true &&
+ Utils.isNotEmptyString(
+ chargingStation.idTagsCache
+ .getIdTags(ChargingStationUtils.getIdTagsFile(chargingStation.stationInfo))
+ ?.find((idTag) => idTag === commandPayload.idTag)
+ )
) {
- // Check if authorized
- if (chargingStation.getAuthorizeRemoteTxRequests() === true) {
- let authorized = false;
- if (
- chargingStation.getLocalAuthListEnabled() === true &&
- chargingStation.hasIdTags() === true &&
- Utils.isNotEmptyString(
- chargingStation.idTagsCache
- .getIdTags(ChargingStationUtils.getIdTagsFile(chargingStation.stationInfo))
- ?.find((idTag) => idTag === commandPayload.idTag)
- )
- ) {
- connectorStatus.localAuthorizeIdTag = commandPayload.idTag;
- connectorStatus.idTagLocalAuthorized = true;
- authorized = true;
- } else if (chargingStation.getMustAuthorizeAtRemoteStart() === true) {
- connectorStatus.authorizeIdTag = commandPayload.idTag;
- const authorizeResponse: OCPP16AuthorizeResponse =
- await chargingStation.ocppRequestService.requestHandler<
- OCPP16AuthorizeRequest,
- OCPP16AuthorizeResponse
- >(chargingStation, OCPP16RequestCommand.AUTHORIZE, {
- idTag: commandPayload.idTag,
- });
- if (authorizeResponse?.idTagInfo?.status === OCPP16AuthorizationStatus.ACCEPTED) {
- authorized = true;
- }
- } else {
- logger.warn(
- `${chargingStation.logPrefix()} The charging station configuration expects authorize at remote start transaction but local authorization or authorize isn't enabled`
- );
- }
- if (authorized === true) {
- // Authorization successful, start transaction
- if (
- this.setRemoteStartTransactionChargingProfile(
- chargingStation,
- transactionConnectorId,
- commandPayload.chargingProfile
- ) === true
- ) {
- connectorStatus.transactionRemoteStarted = true;
- if (
- (
- await chargingStation.ocppRequestService.requestHandler<
- OCPP16StartTransactionRequest,
- OCPP16StartTransactionResponse
- >(chargingStation, OCPP16RequestCommand.START_TRANSACTION, {
- connectorId: transactionConnectorId,
- idTag: commandPayload.idTag,
- })
- ).idTagInfo.status === OCPP16AuthorizationStatus.ACCEPTED
- ) {
- logger.debug(remoteStartTransactionLogMsg);
- return OCPP16Constants.OCPP_RESPONSE_ACCEPTED;
- }
- return this.notifyRemoteStartTransactionRejected(
- chargingStation,
- transactionConnectorId,
- commandPayload.idTag
- );
- }
- return this.notifyRemoteStartTransactionRejected(
- chargingStation,
- transactionConnectorId,
- commandPayload.idTag
- );
- }
- return this.notifyRemoteStartTransactionRejected(
- chargingStation,
- transactionConnectorId,
- commandPayload.idTag
- );
+ connectorStatus.localAuthorizeIdTag = commandPayload.idTag;
+ connectorStatus.idTagLocalAuthorized = true;
+ authorized = true;
+ } else if (chargingStation.getMustAuthorizeAtRemoteStart() === true) {
+ connectorStatus.authorizeIdTag = commandPayload.idTag;
+ const authorizeResponse: OCPP16AuthorizeResponse =
+ await chargingStation.ocppRequestService.requestHandler<
+ OCPP16AuthorizeRequest,
+ OCPP16AuthorizeResponse
+ >(chargingStation, OCPP16RequestCommand.AUTHORIZE, {
+ idTag: commandPayload.idTag,
+ });
+ if (authorizeResponse?.idTagInfo?.status === OCPP16AuthorizationStatus.ACCEPTED) {
+ authorized = true;
}
- // No authorization check required, start transaction
+ } else {
+ logger.warn(
+ `${chargingStation.logPrefix()} The charging station configuration expects authorize at remote start transaction but local authorization or authorize isn't enabled`
+ );
+ }
+ if (authorized === true) {
+ // Authorization successful, start transaction
if (
this.setRemoteStartTransactionChargingProfile(
chargingStation,
commandPayload.idTag
);
}
+ // No authorization check required, start transaction
+ if (
+ this.setRemoteStartTransactionChargingProfile(
+ chargingStation,
+ transactionConnectorId,
+ commandPayload.chargingProfile
+ ) === true
+ ) {
+ connectorStatus.transactionRemoteStarted = true;
+ if (
+ (
+ await chargingStation.ocppRequestService.requestHandler<
+ OCPP16StartTransactionRequest,
+ OCPP16StartTransactionResponse
+ >(chargingStation, OCPP16RequestCommand.START_TRANSACTION, {
+ connectorId: transactionConnectorId,
+ idTag: commandPayload.idTag,
+ })
+ ).idTagInfo.status === OCPP16AuthorizationStatus.ACCEPTED
+ ) {
+ logger.debug(remoteStartTransactionLogMsg);
+ return OCPP16Constants.OCPP_RESPONSE_ACCEPTED;
+ }
+ return this.notifyRemoteStartTransactionRejected(
+ chargingStation,
+ transactionConnectorId,
+ commandPayload.idTag
+ );
+ }
return this.notifyRemoteStartTransactionRejected(
chargingStation,
transactionConnectorId,