X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16ResponseService.ts;h=39d7ac02c5c019a4845cab50651d589bf88da27a;hb=48c7e1d6db4b3cbf82d17e191b2255066c462a71;hp=d7d9ce0aab94c2b65496083dca3d0342bd9667d9;hpb=a807045be19c1ed4996a44d8c2c8774e926dc6dc;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts index d7d9ce0a..39d7ac02 100644 --- a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts @@ -51,7 +51,7 @@ import { type SetChargingProfileResponse, type UnlockConnectorResponse } from '../../../types/index.js' -import { Constants, convertToInt, isNullOrUndefined, logger } from '../../../utils/index.js' +import { Constants, convertToInt, logger } from '../../../utils/index.js' import { OCPPResponseService } from '../OCPPResponseService.js' const moduleName = 'OCPP16ResponseService' @@ -66,8 +66,8 @@ export class OCPP16ResponseService extends OCPPResponseService { private readonly jsonSchemas: Map> public constructor () { - // if (new.target?.name === moduleName) { - // throw new TypeError(`Cannot construct ${new.target?.name} instances directly`) + // if (new.target.name === moduleName) { + // throw new TypeError(`Cannot construct ${new.target.name} instances directly`) // } super(OCPPVersion.VERSION_16) this.responseHandlers = new Map([ @@ -442,7 +442,7 @@ export class OCPP16ResponseService extends OCPPResponseService { for (const [evseId, evseStatus] of chargingStation.evses) { if (evseId > 0) { for (const [connectorId, connectorStatus] of evseStatus.connectors) { - if (connectorStatus?.authorizeIdTag === requestPayload.idTag) { + if (connectorStatus.authorizeIdTag === requestPayload.idTag) { authorizeConnectorId = connectorId break } @@ -460,29 +460,30 @@ export class OCPP16ResponseService extends OCPPResponseService { } } } - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const authorizeConnectorStatus = chargingStation.getConnectorStatus(authorizeConnectorId!) - const authorizeConnectorIdDefined = !isNullOrUndefined(authorizeConnectorId) - if (payload.idTagInfo.status === OCPP16AuthorizationStatus.ACCEPTED) { - if (authorizeConnectorIdDefined) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - authorizeConnectorStatus!.idTagAuthorized = true + if (authorizeConnectorId != null) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const authorizeConnectorStatus = chargingStation.getConnectorStatus(authorizeConnectorId)! + if (payload.idTagInfo.status === OCPP16AuthorizationStatus.ACCEPTED) { + authorizeConnectorStatus.idTagAuthorized = true + logger.debug( + `${chargingStation.logPrefix()} idTag '${ + requestPayload.idTag + }' accepted on connector id ${authorizeConnectorId}` + ) + } else { + authorizeConnectorStatus.idTagAuthorized = false + delete authorizeConnectorStatus.authorizeIdTag + logger.debug( + `${chargingStation.logPrefix()} idTag '${requestPayload.idTag}' rejected with status '${ + payload.idTagInfo.status + }` + ) } - logger.debug( - `${chargingStation.logPrefix()} idTag '${requestPayload.idTag}' accepted${ - authorizeConnectorIdDefined ? ` on connector id ${authorizeConnectorId}` : '' - }` - ) } else { - if (authorizeConnectorIdDefined) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - authorizeConnectorStatus!.idTagAuthorized = false - delete authorizeConnectorStatus?.authorizeIdTag - } - logger.debug( - `${chargingStation.logPrefix()} idTag '${requestPayload.idTag}' rejected with status '${ - payload.idTagInfo.status - }'${authorizeConnectorIdDefined ? ` on connector id ${authorizeConnectorId}` : ''}` + logger.error( + `${chargingStation.logPrefix()} idTag '${ + requestPayload.idTag + }' has no authorize request pending` ) } } @@ -505,10 +506,12 @@ export class OCPP16ResponseService extends OCPPResponseService { chargingStation.getAuthorizeRemoteTxRequests() && chargingStation.getLocalAuthListEnabled() && chargingStation.hasIdTags() && - connectorStatus?.idTagLocalAuthorized === false + connectorStatus.idTagLocalAuthorized === false ) { logger.error( - `${chargingStation.logPrefix()} Trying to start a transaction with a not local authorized idTag ${connectorStatus?.localAuthorizeIdTag} on connector id ${connectorId}` + `${chargingStation.logPrefix()} Trying to start a transaction with a not local authorized idTag ${ + connectorStatus.localAuthorizeIdTag + } on connector id ${connectorId}` ) await this.resetConnectorOnStartTransactionError(chargingStation, connectorId) return @@ -517,42 +520,50 @@ export class OCPP16ResponseService extends OCPPResponseService { connectorStatus?.transactionRemoteStarted === true && chargingStation.getAuthorizeRemoteTxRequests() && chargingStation.stationInfo?.remoteAuthorization === true && - connectorStatus?.idTagLocalAuthorized === false && - connectorStatus?.idTagAuthorized === false + connectorStatus.idTagLocalAuthorized === false && + connectorStatus.idTagAuthorized === false ) { logger.error( - `${chargingStation.logPrefix()} Trying to start a transaction with a not authorized idTag ${connectorStatus?.authorizeIdTag} on connector id ${connectorId}` + `${chargingStation.logPrefix()} Trying to start a transaction with a not authorized idTag ${ + connectorStatus.authorizeIdTag + } on connector id ${connectorId}` ) await this.resetConnectorOnStartTransactionError(chargingStation, connectorId) return } if ( connectorStatus?.idTagAuthorized === true && - connectorStatus?.authorizeIdTag !== requestPayload.idTag + connectorStatus.authorizeIdTag !== requestPayload.idTag ) { logger.error( `${chargingStation.logPrefix()} Trying to start a transaction with an idTag ${ requestPayload.idTag - } different from the authorize request one ${connectorStatus?.authorizeIdTag} on connector id ${connectorId}` + } different from the authorize request one ${ + connectorStatus.authorizeIdTag + } on connector id ${connectorId}` ) await this.resetConnectorOnStartTransactionError(chargingStation, connectorId) return } if ( connectorStatus?.idTagLocalAuthorized === true && - connectorStatus?.localAuthorizeIdTag !== requestPayload.idTag + connectorStatus.localAuthorizeIdTag !== requestPayload.idTag ) { logger.error( `${chargingStation.logPrefix()} Trying to start a transaction with an idTag ${ requestPayload.idTag - } different from the local authorized one ${connectorStatus?.localAuthorizeIdTag} on connector id ${connectorId}` + } different from the local authorized one ${ + connectorStatus.localAuthorizeIdTag + } on connector id ${connectorId}` ) await this.resetConnectorOnStartTransactionError(chargingStation, connectorId) return } if (connectorStatus?.transactionStarted === true) { logger.error( - `${chargingStation.logPrefix()} Trying to start a transaction on an already used connector id ${connectorId} by idTag ${connectorStatus?.transactionIdTag}` + `${chargingStation.logPrefix()} Trying to start a transaction on an already used connector id ${connectorId} by idTag ${ + connectorStatus.transactionIdTag + }` ) return } @@ -560,9 +571,11 @@ export class OCPP16ResponseService extends OCPPResponseService { for (const [evseId, evseStatus] of chargingStation.evses) { if (evseStatus.connectors.size > 1) { for (const [id, status] of evseStatus.connectors) { - if (id !== connectorId && status?.transactionStarted === true) { + if (id !== connectorId && status.transactionStarted === true) { logger.error( - `${chargingStation.logPrefix()} Trying to start a transaction on an already used evse id ${evseId} by connector id ${id} with idTag ${status?.transactionIdTag}` + `${chargingStation.logPrefix()} Trying to start a transaction on an already used evse id ${evseId} by connector id ${id} with idTag ${ + status.transactionIdTag + }` ) await this.resetConnectorOnStartTransactionError(chargingStation, connectorId) return @@ -589,7 +602,7 @@ export class OCPP16ResponseService extends OCPPResponseService { payload.transactionId = convertToInt(payload.transactionId) } - if (payload.idTagInfo?.status === OCPP16AuthorizationStatus.ACCEPTED) { + if (payload.idTagInfo.status === OCPP16AuthorizationStatus.ACCEPTED) { connectorStatus.transactionStarted = true connectorStatus.transactionStart = requestPayload.timestamp connectorStatus.transactionId = payload.transactionId @@ -645,12 +658,15 @@ export class OCPP16ResponseService extends OCPPResponseService { OCPP16ChargePointStatus.Charging ) logger.info( - `${chargingStation.logPrefix()} Transaction with id ${payload.transactionId} STARTED on ${ - chargingStation.stationInfo.chargingStationId - }#${connectorId} for idTag '${requestPayload.idTag}'` + `${chargingStation.logPrefix()} Transaction with id ${ + payload.transactionId + } STARTED on ${chargingStation.stationInfo?.chargingStationId}#${connectorId} for idTag '${ + requestPayload.idTag + }'` ) - if (chargingStation.stationInfo.powerSharedByConnectors === true) { - ++chargingStation.powerDivider + if (chargingStation.stationInfo?.powerSharedByConnectors === true) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + ++chargingStation.powerDivider! } const configuredMeterValueSampleInterval = getConfigurationKey( chargingStation, @@ -667,8 +683,8 @@ export class OCPP16ResponseService extends OCPPResponseService { `${chargingStation.logPrefix()} Starting transaction with id ${ payload.transactionId } REJECTED on ${ - chargingStation.stationInfo.chargingStationId - }#${connectorId} with status '${payload.idTagInfo?.status}', idTag '${ + chargingStation.stationInfo?.chargingStationId + }#${connectorId} with status '${payload.idTagInfo.status}', idTag '${ requestPayload.idTag }'${ OCPP16ServiceUtils.hasReservation(chargingStation, connectorId, requestPayload.idTag) @@ -685,8 +701,7 @@ export class OCPP16ResponseService extends OCPPResponseService { connectorId: number ): Promise { const connectorStatus = chargingStation.getConnectorStatus(connectorId) - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - resetConnectorStatus(connectorStatus!) + resetConnectorStatus(connectorStatus) chargingStation.stopMeterValues(connectorId) if (connectorStatus?.status !== OCPP16ChargePointStatus.Available) { await OCPP16ServiceUtils.sendAndSetConnectorStatus( @@ -705,7 +720,7 @@ export class OCPP16ResponseService extends OCPPResponseService { const transactionConnectorId = chargingStation.getConnectorIdByTransactionId( requestPayload.transactionId ) - if (isNullOrUndefined(transactionConnectorId)) { + if (transactionConnectorId == null) { logger.error( `${chargingStation.logPrefix()} Trying to stop a non existing transaction with id ${ requestPayload.transactionId @@ -714,8 +729,8 @@ export class OCPP16ResponseService extends OCPPResponseService { return } chargingStation.stationInfo?.beginEndMeterValues === true && - chargingStation.stationInfo?.ocppStrictCompliance === false && - chargingStation.stationInfo?.outOfOrderEndMeterValues === true && + chargingStation.stationInfo.ocppStrictCompliance === false && + chargingStation.stationInfo.outOfOrderEndMeterValues === true && (await chargingStation.ocppRequestService.requestHandler< OCPP16MeterValuesRequest, OCPP16MeterValuesResponse @@ -725,46 +740,41 @@ export class OCPP16ResponseService extends OCPPResponseService { meterValue: [ OCPP16ServiceUtils.buildTransactionEndMeterValue( chargingStation, - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - transactionConnectorId!, + transactionConnectorId, requestPayload.meterStop ) ] })) if ( !chargingStation.isChargingStationAvailable() || - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - !chargingStation.isConnectorAvailable(transactionConnectorId!) + !chargingStation.isConnectorAvailable(transactionConnectorId) ) { await OCPP16ServiceUtils.sendAndSetConnectorStatus( chargingStation, - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - transactionConnectorId!, + transactionConnectorId, OCPP16ChargePointStatus.Unavailable ) } else { await OCPP16ServiceUtils.sendAndSetConnectorStatus( chargingStation, - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - transactionConnectorId!, + transactionConnectorId, OCPP16ChargePointStatus.Available ) } - if (chargingStation.stationInfo.powerSharedByConnectors === true) { - chargingStation.powerDivider-- + if (chargingStation.stationInfo?.powerSharedByConnectors === true) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + chargingStation.powerDivider!-- } - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - resetConnectorStatus(chargingStation.getConnectorStatus(transactionConnectorId!)!) - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - chargingStation.stopMeterValues(transactionConnectorId!) + resetConnectorStatus(chargingStation.getConnectorStatus(transactionConnectorId)) + chargingStation.stopMeterValues(transactionConnectorId) const logMsg = `${chargingStation.logPrefix()} Transaction with id ${ requestPayload.transactionId } STOPPED on ${ - chargingStation.stationInfo.chargingStationId + chargingStation.stationInfo?.chargingStationId }#${transactionConnectorId} with status '${payload.idTagInfo?.status}'` if ( - isNullOrUndefined(payload.idTagInfo) || - payload.idTagInfo?.status === OCPP16AuthorizationStatus.ACCEPTED + payload.idTagInfo == null || + payload.idTagInfo.status === OCPP16AuthorizationStatus.ACCEPTED ) { logger.info(logMsg) } else {