X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16IncomingRequestService.ts;h=e2d5886bc799001d36837bef11bff647a2850297;hb=721646e902fa12d165d4a1da06fb963fb30dc9f2;hp=af378a47a1c6c1371642239ef7c0587ed0e85498;hpb=14ecae6a3d6b172ca29353e5a2faed513feff4f5;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts index af378a47..e2d5886b 100644 --- a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts @@ -1,97 +1,88 @@ // Partial Copyright Jerome Benoit. 2021-2023. All Rights Reserved. -import fs from 'fs'; -import path from 'path'; -import { URL, fileURLToPath } from 'url'; +import fs from 'node:fs'; +import path from 'node:path'; +import { URL, fileURLToPath } from 'node:url'; import type { JSONSchemaType } from 'ajv'; import { Client, type FTPResponse } from 'basic-ftp'; import tar from 'tar'; -import { OCPP16ServiceUtils } from './OCPP16ServiceUtils'; -import OCPPError from '../../../exception/OCPPError'; -import type { JsonObject, JsonType } from '../../../types/JsonType'; -import { OCPP16ChargePointErrorCode } from '../../../types/ocpp/1.6/ChargePointErrorCode'; -import { OCPP16ChargePointStatus } from '../../../types/ocpp/1.6/ChargePointStatus'; import { - ChargingProfilePurposeType, - type OCPP16ChargingProfile, -} from '../../../types/ocpp/1.6/ChargingProfile'; -import { - OCPP16StandardParametersKey, - OCPP16SupportedFeatureProfiles, -} from '../../../types/ocpp/1.6/Configuration'; -import { OCPP16DiagnosticsStatus } from '../../../types/ocpp/1.6/DiagnosticsStatus'; + type ChargingStation, + ChargingStationConfigurationUtils, + ChargingStationUtils, +} from '../../../charging-station'; +import { OCPPError } from '../../../exception'; import { type ChangeAvailabilityRequest, + type ChangeAvailabilityResponse, type ChangeConfigurationRequest, + type ChangeConfigurationResponse, type ClearChargingProfileRequest, + type ClearChargingProfileResponse, + ErrorType, + type GenericResponse, type GetConfigurationRequest, + type GetConfigurationResponse, type GetDiagnosticsRequest, + type GetDiagnosticsResponse, + type IncomingRequestHandler, + type JsonObject, + type JsonType, + OCPP16AuthorizationStatus, + type OCPP16AuthorizeRequest, + type OCPP16AuthorizeResponse, OCPP16AvailabilityType, type OCPP16BootNotificationRequest, + type OCPP16BootNotificationResponse, + OCPP16ChargePointErrorCode, + OCPP16ChargePointStatus, + type OCPP16ChargingProfile, + OCPP16ChargingProfilePurposeType, type OCPP16ClearCacheRequest, type OCPP16DataTransferRequest, + type OCPP16DataTransferResponse, + OCPP16DataTransferStatus, OCPP16DataTransferVendorId, + OCPP16DiagnosticsStatus, type OCPP16DiagnosticsStatusNotificationRequest, + type OCPP16DiagnosticsStatusNotificationResponse, OCPP16FirmwareStatus, type OCPP16FirmwareStatusNotificationRequest, + type OCPP16FirmwareStatusNotificationResponse, type OCPP16HeartbeatRequest, + type OCPP16HeartbeatResponse, OCPP16IncomingRequestCommand, OCPP16MessageTrigger, OCPP16RequestCommand, + OCPP16StandardParametersKey, + type OCPP16StartTransactionRequest, + type OCPP16StartTransactionResponse, type OCPP16StatusNotificationRequest, + type OCPP16StatusNotificationResponse, + OCPP16StopTransactionReason, + OCPP16SupportedFeatureProfiles, type OCPP16TriggerMessageRequest, + type OCPP16TriggerMessageResponse, type OCPP16UpdateFirmwareRequest, + type OCPP16UpdateFirmwareResponse, + type OCPPConfigurationKey, + OCPPVersion, type RemoteStartTransactionRequest, type RemoteStopTransactionRequest, type ResetRequest, type SetChargingProfileRequest, - type UnlockConnectorRequest, -} from '../../../types/ocpp/1.6/Requests'; -import { - type ChangeAvailabilityResponse, - type ChangeConfigurationResponse, - type ClearChargingProfileResponse, - type GetConfigurationResponse, - type GetDiagnosticsResponse, - type OCPP16BootNotificationResponse, - type OCPP16DataTransferResponse, - OCPP16DataTransferStatus, - type OCPP16DiagnosticsStatusNotificationResponse, - type OCPP16FirmwareStatusNotificationResponse, - type OCPP16HeartbeatResponse, - type OCPP16StatusNotificationResponse, - type OCPP16TriggerMessageResponse, - type OCPP16UpdateFirmwareResponse, type SetChargingProfileResponse, + type UnlockConnectorRequest, type UnlockConnectorResponse, -} from '../../../types/ocpp/1.6/Responses'; -import { - OCPP16AuthorizationStatus, - type OCPP16AuthorizeRequest, - type OCPP16AuthorizeResponse, - type OCPP16StartTransactionRequest, - type OCPP16StartTransactionResponse, - OCPP16StopTransactionReason, -} from '../../../types/ocpp/1.6/Transaction'; -import type { OCPPConfigurationKey } from '../../../types/ocpp/Configuration'; -import { ErrorType } from '../../../types/ocpp/ErrorType'; -import { OCPPVersion } from '../../../types/ocpp/OCPPVersion'; -import type { IncomingRequestHandler } from '../../../types/ocpp/Requests'; -import type { GenericResponse } from '../../../types/ocpp/Responses'; -import Constants from '../../../utils/Constants'; -import logger from '../../../utils/Logger'; -import Utils from '../../../utils/Utils'; -import type ChargingStation from '../../ChargingStation'; -import { ChargingStationConfigurationUtils } from '../../ChargingStationConfigurationUtils'; -import { ChargingStationUtils } from '../../ChargingStationUtils'; -import OCPPConstants from '../OCPPConstants'; -import OCPPIncomingRequestService from '../OCPPIncomingRequestService'; +} from '../../../types'; +import { Constants, Utils, logger } from '../../../utils'; +import { OCPP16ServiceUtils, OCPPConstants, OCPPIncomingRequestService } from '../internal'; const moduleName = 'OCPP16IncomingRequestService'; -export default class OCPP16IncomingRequestService extends OCPPIncomingRequestService { +export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { protected jsonSchemas: Map>; private incomingRequestHandlers: Map; @@ -140,84 +131,114 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer this.jsonSchemas = new Map>([ [ OCPP16IncomingRequestCommand.RESET, - this.parseJsonSchemaFile('../../../assets/json-schemas/ocpp/1.6/Reset.json'), + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/Reset.json', + moduleName, + 'constructor' + ), ], [ OCPP16IncomingRequestCommand.CLEAR_CACHE, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/ClearCache.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/ClearCache.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.UNLOCK_CONNECTOR, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/UnlockConnector.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/UnlockConnector.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.GET_CONFIGURATION, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/GetConfiguration.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/GetConfiguration.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.CHANGE_CONFIGURATION, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/ChangeConfiguration.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/ChangeConfiguration.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.GET_DIAGNOSTICS, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/GetDiagnostics.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/GetDiagnostics.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.SET_CHARGING_PROFILE, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/SetChargingProfile.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/SetChargingProfile.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.CLEAR_CHARGING_PROFILE, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/ClearChargingProfile.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/ClearChargingProfile.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.CHANGE_AVAILABILITY, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/ChangeAvailability.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/ChangeAvailability.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.REMOTE_START_TRANSACTION, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/RemoteStartTransaction.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/RemoteStartTransaction.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.REMOTE_STOP_TRANSACTION, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/RemoteStopTransaction.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/RemoteStopTransaction.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.TRIGGER_MESSAGE, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/TriggerMessage.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/TriggerMessage.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.DATA_TRANSFER, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/DataTransfer.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/DataTransfer.json', + moduleName, + 'constructor' ), ], [ OCPP16IncomingRequestCommand.UPDATE_FIRMWARE, - this.parseJsonSchemaFile( - '../../../assets/json-schemas/ocpp/1.6/UpdateFirmware.json' + OCPP16ServiceUtils.parseJsonSchemaFile( + '../../../assets/json-schemas/ocpp/1.6/UpdateFirmware.json', + moduleName, + 'constructor' ), ], ]); @@ -330,18 +351,14 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer chargingStation: ChargingStation, commandPayload: ResetRequest ): GenericResponse { - this.asyncResource - .runInAsyncScope( - chargingStation.reset.bind(chargingStation) as ( - this: ChargingStation, - ...args: any[] - ) => Promise, - chargingStation, - `${commandPayload.type}Reset` as OCPP16StopTransactionReason - ) - .catch(() => { - /* This is intentional */ - }); + this.runInAsyncScope( + chargingStation.reset.bind(chargingStation) as ( + this: ChargingStation, + ...args: any[] + ) => Promise, + chargingStation, + `${commandPayload.type}Reset` as OCPP16StopTransactionReason + ).catch(Constants.EMPTY_FUNCTION); logger.info( `${chargingStation.logPrefix()} ${ commandPayload.type @@ -384,10 +401,10 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer OCPP16StatusNotificationResponse >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, { connectorId, - status: OCPP16ChargePointStatus.AVAILABLE, + status: OCPP16ChargePointStatus.Available, errorCode: OCPP16ChargePointErrorCode.NO_ERROR, }); - chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.AVAILABLE; + chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.Available; return OCPPConstants.OCPP_RESPONSE_UNLOCKED; } @@ -397,7 +414,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer ): GetConfigurationResponse { const configurationKey: OCPPConfigurationKey[] = []; const unknownKey: string[] = []; - if (Utils.isEmptyArray(commandPayload.key) === true) { + if (Utils.isUndefined(commandPayload.key) === true) { for (const configuration of chargingStation.ocppConfiguration.configurationKey) { if (Utils.isUndefined(configuration.visible) === true) { configuration.visible = true; @@ -411,11 +428,12 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer value: configuration.value, }); } - } else { + } else if (Utils.isNotEmptyArray(commandPayload.key) === true) { for (const key of commandPayload.key) { const keyFound = ChargingStationConfigurationUtils.getConfigurationKey( chargingStation, - key + key, + true ); if (keyFound) { if (Utils.isUndefined(keyFound.visible) === true) { @@ -517,14 +535,14 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer } if ( commandPayload.csChargingProfiles.chargingProfilePurpose === - ChargingProfilePurposeType.CHARGE_POINT_MAX_PROFILE && + OCPP16ChargingProfilePurposeType.CHARGE_POINT_MAX_PROFILE && commandPayload.connectorId !== 0 ) { return OCPPConstants.OCPP_SET_CHARGING_PROFILE_RESPONSE_REJECTED; } if ( commandPayload.csChargingProfiles.chargingProfilePurpose === - ChargingProfilePurposeType.TX_PROFILE && + OCPP16ChargingProfilePurposeType.TX_PROFILE && (commandPayload.connectorId === 0 || chargingStation.getConnectorStatus(commandPayload.connectorId)?.transactionStarted === false) @@ -572,7 +590,10 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer return OCPPConstants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_UNKNOWN; } const connectorStatus = chargingStation.getConnectorStatus(commandPayload.connectorId); - if (commandPayload.connectorId && !Utils.isEmptyArray(connectorStatus.chargingProfiles)) { + if ( + !Utils.isNullOrUndefined(commandPayload.connectorId) && + Utils.isNotEmptyArray(connectorStatus?.chargingProfiles) + ) { connectorStatus.chargingProfiles = []; logger.debug( `${chargingStation.logPrefix()} Charging profile(s) cleared on connector id ${ @@ -581,13 +602,15 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer ); return OCPPConstants.OCPP_CLEAR_CHARGING_PROFILE_RESPONSE_ACCEPTED; } - if (!commandPayload.connectorId) { + if (Utils.isNullOrUndefined(commandPayload.connectorId)) { let clearedCP = false; for (const connectorId of chargingStation.connectors.keys()) { - if (!Utils.isEmptyArray(chargingStation.getConnectorStatus(connectorId).chargingProfiles)) { + if ( + Utils.isNotEmptyArray(chargingStation.getConnectorStatus(connectorId)?.chargingProfiles) + ) { chargingStation .getConnectorStatus(connectorId) - .chargingProfiles?.forEach((chargingProfile: OCPP16ChargingProfile, index: number) => { + ?.chargingProfiles?.forEach((chargingProfile: OCPP16ChargingProfile, index: number) => { let clearCurrentCP = false; if (chargingProfile.chargingProfileId === commandPayload.id) { clearCurrentCP = true; @@ -611,7 +634,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer clearCurrentCP = true; } if (clearCurrentCP) { - connectorStatus.chargingProfiles.splice(index, 1); + connectorStatus?.chargingProfiles?.splice(index, 1); logger.debug( `${chargingStation.logPrefix()} Matching charging profile(s) cleared: %j`, chargingProfile @@ -641,8 +664,8 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer } const chargePointStatus: OCPP16ChargePointStatus = commandPayload.type === OCPP16AvailabilityType.OPERATIVE - ? OCPP16ChargePointStatus.AVAILABLE - : OCPP16ChargePointStatus.UNAVAILABLE; + ? OCPP16ChargePointStatus.Available + : OCPP16ChargePointStatus.Unavailable; if (connectorId === 0) { let response: ChangeAvailabilityResponse = OCPPConstants.OCPP_AVAILABILITY_RESPONSE_ACCEPTED; for (const id of chargingStation.connectors.keys()) { @@ -702,11 +725,11 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer OCPP16StatusNotificationResponse >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, { connectorId: transactionConnectorId, - status: OCPP16ChargePointStatus.PREPARING, + status: OCPP16ChargePointStatus.Preparing, errorCode: OCPP16ChargePointErrorCode.NO_ERROR, }); const connectorStatus = chargingStation.getConnectorStatus(transactionConnectorId); - connectorStatus.status = OCPP16ChargePointStatus.PREPARING; + connectorStatus.status = OCPP16ChargePointStatus.Preparing; if (chargingStation.isChargingStationAvailable() === true) { // Check if authorized if (chargingStation.getAuthorizeRemoteTxRequests() === true) { @@ -714,11 +737,13 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer if ( chargingStation.getLocalAuthListEnabled() === true && chargingStation.hasAuthorizedTags() === true && - chargingStation.authorizedTagsCache - .getAuthorizedTags( - ChargingStationUtils.getAuthorizationFile(chargingStation.stationInfo) - ) - .find((idTag) => idTag === commandPayload.idTag) + Utils.isNotEmptyString( + chargingStation.authorizedTagsCache + .getAuthorizedTags( + ChargingStationUtils.getAuthorizationFile(chargingStation.stationInfo) + ) + ?.find((idTag) => idTag === commandPayload.idTag) + ) ) { connectorStatus.localAuthorizeIdTag = commandPayload.idTag; connectorStatus.idTagLocalAuthorized = true; @@ -836,22 +861,22 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer idTag: string ): Promise { if ( - chargingStation.getConnectorStatus(connectorId).status !== OCPP16ChargePointStatus.AVAILABLE + chargingStation.getConnectorStatus(connectorId)?.status !== OCPP16ChargePointStatus.Available ) { await chargingStation.ocppRequestService.requestHandler< OCPP16StatusNotificationRequest, OCPP16StatusNotificationResponse >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, { connectorId, - status: OCPP16ChargePointStatus.AVAILABLE, + status: OCPP16ChargePointStatus.Available, errorCode: OCPP16ChargePointErrorCode.NO_ERROR, }); - chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.AVAILABLE; + chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.Available; } logger.warn( `${chargingStation.logPrefix()} Remote starting transaction REJECTED on connector Id ${connectorId.toString()}, idTag '${idTag}', availability '${ - chargingStation.getConnectorStatus(connectorId).availability - }', status '${chargingStation.getConnectorStatus(connectorId).status}'` + chargingStation.getConnectorStatus(connectorId)?.availability + }', status '${chargingStation.getConnectorStatus(connectorId)?.status}'` ); return OCPPConstants.OCPP_RESPONSE_REJECTED; } @@ -861,14 +886,14 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer connectorId: number, cp: OCPP16ChargingProfile ): boolean { - if (cp && cp.chargingProfilePurpose === ChargingProfilePurposeType.TX_PROFILE) { + if (cp && cp.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE) { OCPP16ServiceUtils.setChargingProfile(chargingStation, connectorId, cp); logger.debug( `${chargingStation.logPrefix()} Charging profile(s) set at remote start transaction on connector id ${connectorId}: %j`, cp ); return true; - } else if (cp && cp.chargingProfilePurpose !== ChargingProfilePurposeType.TX_PROFILE) { + } else if (cp && cp.chargingProfilePurpose !== OCPP16ChargingProfilePurposeType.TX_PROFILE) { logger.warn( `${chargingStation.logPrefix()} Not allowed to set ${ cp.chargingProfilePurpose @@ -895,10 +920,10 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer OCPP16StatusNotificationResponse >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, { connectorId, - status: OCPP16ChargePointStatus.FINISHING, + status: OCPP16ChargePointStatus.Finishing, errorCode: OCPP16ChargePointErrorCode.NO_ERROR, }); - chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.FINISHING; + chargingStation.getConnectorStatus(connectorId).status = OCPP16ChargePointStatus.Finishing; const stopResponse = await chargingStation.stopTransactionOnConnector( connectorId, OCPP16StopTransactionReason.REMOTE @@ -942,25 +967,19 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer } const retrieveDate = Utils.convertToDate(commandPayload.retrieveDate); const now = Date.now(); - if (retrieveDate.getTime() <= now) { - this.asyncResource - .runInAsyncScope( - this.updateFirmware.bind(this) as ( - this: OCPP16IncomingRequestService, - ...args: any[] - ) => Promise, - this, - chargingStation - ) - .catch(() => { - /* This is intentional */ - }); + if (retrieveDate?.getTime() <= now) { + this.runInAsyncScope( + this.updateFirmware.bind(this) as ( + this: OCPP16IncomingRequestService, + ...args: any[] + ) => Promise, + this, + chargingStation + ).catch(Constants.EMPTY_FUNCTION); } else { setTimeout(() => { - this.updateFirmware(chargingStation).catch(() => { - /* Intentional */ - }); - }, retrieveDate.getTime() - now); + this.updateFirmware(chargingStation).catch(Constants.EMPTY_FUNCTION); + }, retrieveDate?.getTime() - now); } return OCPPConstants.OCPP_RESPONSE_EMPTY; } @@ -974,23 +993,23 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer for (const connectorId of chargingStation.connectors.keys()) { if ( connectorId > 0 && - chargingStation.getConnectorStatus(connectorId).transactionStarted === false + chargingStation.getConnectorStatus(connectorId)?.transactionStarted === false ) { await chargingStation.ocppRequestService.requestHandler< OCPP16StatusNotificationRequest, OCPP16StatusNotificationResponse >(chargingStation, OCPP16RequestCommand.STATUS_NOTIFICATION, { connectorId, - status: OCPP16ChargePointStatus.UNAVAILABLE, + status: OCPP16ChargePointStatus.Unavailable, errorCode: OCPP16ChargePointErrorCode.NO_ERROR, }); chargingStation.getConnectorStatus(connectorId).status = - OCPP16ChargePointStatus.UNAVAILABLE; + OCPP16ChargePointStatus.Unavailable; } } if ( chargingStation.stationInfo?.firmwareUpgrade?.failureStatus && - !Utils.isEmptyString(chargingStation.stationInfo?.firmwareUpgrade?.failureStatus) + Utils.isNotEmptyString(chargingStation.stationInfo?.firmwareUpgrade?.failureStatus) ) { await chargingStation.ocppRequestService.requestHandler< OCPP16FirmwareStatusNotificationRequest, @@ -1058,9 +1077,9 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer ftpClient = new Client(); const accessResponse = await ftpClient.access({ host: uri.host, - ...(!Utils.isEmptyString(uri.port) && { port: Utils.convertToInt(uri.port) }), - ...(!Utils.isEmptyString(uri.username) && { user: uri.username }), - ...(!Utils.isEmptyString(uri.password) && { password: uri.password }), + ...(Utils.isNotEmptyString(uri.port) && { port: Utils.convertToInt(uri.port) }), + ...(Utils.isNotEmptyString(uri.username) && { user: uri.username }), + ...(Utils.isNotEmptyString(uri.password) && { password: uri.password }), }); let uploadResponse: FTPResponse; if (accessResponse.code === 220) { @@ -1193,9 +1212,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer .then((response) => { chargingStation.bootNotificationResponse = response; }) - .catch(() => { - /* This is intentional */ - }); + .catch(Constants.EMPTY_FUNCTION); }, Constants.OCPP_TRIGGER_MESSAGE_DELAY); return OCPPConstants.OCPP_TRIGGER_MESSAGE_RESPONSE_ACCEPTED; case OCPP16MessageTrigger.Heartbeat: @@ -1209,14 +1226,12 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer triggerMessage: true, } ) - .catch(() => { - /* This is intentional */ - }); + .catch(Constants.EMPTY_FUNCTION); }, Constants.OCPP_TRIGGER_MESSAGE_DELAY); return OCPPConstants.OCPP_TRIGGER_MESSAGE_RESPONSE_ACCEPTED; case OCPP16MessageTrigger.StatusNotification: setTimeout(() => { - if (commandPayload?.connectorId) { + if (!Utils.isNullOrUndefined(commandPayload?.connectorId)) { chargingStation.ocppRequestService .requestHandler( chargingStation, @@ -1224,15 +1239,13 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer { connectorId: commandPayload.connectorId, errorCode: OCPP16ChargePointErrorCode.NO_ERROR, - status: chargingStation.getConnectorStatus(commandPayload.connectorId).status, + status: chargingStation.getConnectorStatus(commandPayload.connectorId)?.status, }, { triggerMessage: true, } ) - .catch(() => { - /* This is intentional */ - }); + .catch(Constants.EMPTY_FUNCTION); } else { for (const connectorId of chargingStation.connectors.keys()) { chargingStation.ocppRequestService @@ -1245,15 +1258,13 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer { connectorId, errorCode: OCPP16ChargePointErrorCode.NO_ERROR, - status: chargingStation.getConnectorStatus(connectorId).status, + status: chargingStation.getConnectorStatus(connectorId)?.status, }, { triggerMessage: true, } ) - .catch(() => { - /* This is intentional */ - }); + .catch(Constants.EMPTY_FUNCTION); } } }, Constants.OCPP_TRIGGER_MESSAGE_DELAY); @@ -1293,13 +1304,4 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer ); } } - - private parseJsonSchemaFile(relativePath: string): JSONSchemaType { - return JSON.parse( - fs.readFileSync( - path.resolve(path.dirname(fileURLToPath(import.meta.url)), relativePath), - 'utf8' - ) - ) as JSONSchemaType; - } }