X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2F1.6%2FOCPP16ResponseService.ts;h=0f697f630fe079a0b0e9aa72c6c13ed2154e631c;hb=6e2f954cbb505ad26c61d950e29685d5d49d5f00;hp=02c03140e341654ddb8a2c4949cebb1d6d59fa39;hpb=a37fc6dc8267e22b2b2d35773525980b81f014e8;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 02c03140..0f697f63 100644 --- a/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16ResponseService.ts @@ -3,11 +3,13 @@ import { parentPort } from 'node:worker_threads'; import type { JSONSchemaType } from 'ajv'; +import { secondsToMilliseconds } from 'date-fns'; import { OCPP16ServiceUtils } from './OCPP16ServiceUtils'; import { type ChargingStation, - ChargingStationConfigurationUtils, + addConfigurationKey, + getConfigurationKey, resetConnectorStatus, } from '../../../charging-station'; import { OCPPError } from '../../../exception'; @@ -46,6 +48,7 @@ import { type OCPP16UpdateFirmwareResponse, OCPPVersion, RegistrationStatusEnumType, + ReservationTerminationReason, type ResponseHandler, type SetChargingProfileResponse, type UnlockConnectorResponse, @@ -407,14 +410,14 @@ export class OCPP16ResponseService extends OCPPResponseService { payload: OCPP16BootNotificationResponse, ): void { if (payload.status === RegistrationStatusEnumType.ACCEPTED) { - ChargingStationConfigurationUtils.addConfigurationKey( + addConfigurationKey( chargingStation, OCPP16StandardParametersKey.HeartbeatInterval, payload.interval.toString(), {}, { overwrite: true, save: true }, ); - ChargingStationConfigurationUtils.addConfigurationKey( + addConfigurationKey( chargingStation, OCPP16StandardParametersKey.HeartBeatInterval, payload.interval.toString(), @@ -468,8 +471,11 @@ export class OCPP16ResponseService extends OCPPResponseService { } const authorizeConnectorIdDefined = !isNullOrUndefined(authorizeConnectorId); if (payload.idTagInfo.status === OCPP16AuthorizationStatus.ACCEPTED) { - authorizeConnectorIdDefined && - (chargingStation.getConnectorStatus(authorizeConnectorId!)!.idTagAuthorized = true); + if (authorizeConnectorIdDefined) { + // chargingStation.getConnectorStatus(authorizeConnectorId!)!.authorizeIdTag = + // requestPayload.idTag; + chargingStation.getConnectorStatus(authorizeConnectorId!)!.idTagAuthorized = true; + } logger.debug( `${chargingStation.logPrefix()} idTag '${requestPayload.idTag}' accepted${ authorizeConnectorIdDefined ? ` on connector id ${authorizeConnectorId}` : '' @@ -508,7 +514,7 @@ export class OCPP16ResponseService extends OCPPResponseService { true && chargingStation.getAuthorizeRemoteTxRequests() === true && chargingStation.getLocalAuthListEnabled() === true && - chargingStation.hasIdTags() && + chargingStation.hasIdTags() === true && chargingStation.getConnectorStatus(transactionConnectorId)?.idTagLocalAuthorized === false ) { logger.error( @@ -523,7 +529,7 @@ export class OCPP16ResponseService extends OCPPResponseService { chargingStation.getConnectorStatus(transactionConnectorId)?.transactionRemoteStarted === true && chargingStation.getAuthorizeRemoteTxRequests() === true && - chargingStation.getMustAuthorizeAtRemoteStart() === true && + chargingStation.getRemoteAuthorization() === true && chargingStation.getConnectorStatus(transactionConnectorId)?.idTagLocalAuthorized === false && chargingStation.getConnectorStatus(transactionConnectorId)?.idTagAuthorized === false ) { @@ -607,7 +613,7 @@ export class OCPP16ResponseService extends OCPPResponseService { ); return; } - if (!Number.isInteger(payload.transactionId)) { + if (!Number.isSafeInteger(payload.transactionId)) { logger.warn( `${chargingStation.logPrefix()} Trying to start a transaction on connector id ${transactionConnectorId.toString()} with a non integer transaction id ${ payload.transactionId @@ -618,6 +624,8 @@ export class OCPP16ResponseService extends OCPPResponseService { if (payload.idTagInfo?.status === OCPP16AuthorizationStatus.ACCEPTED) { chargingStation.getConnectorStatus(transactionConnectorId)!.transactionStarted = true; + chargingStation.getConnectorStatus(transactionConnectorId)!.transactionStart = + requestPayload.timestamp; chargingStation.getConnectorStatus(transactionConnectorId)!.transactionId = payload.transactionId; chargingStation.getConnectorStatus(transactionConnectorId)!.transactionIdTag = @@ -631,6 +639,21 @@ export class OCPP16ResponseService extends OCPPResponseService { transactionConnectorId, requestPayload.meterStart, ); + const reservedOnConnectorZero = + chargingStation.getConnectorStatus(0)?.status === OCPP16ChargePointStatus.Reserved; + if ( + chargingStation.getConnectorStatus(transactionConnectorId)?.status === + OCPP16ChargePointStatus.Reserved || + reservedOnConnectorZero + ) { + await chargingStation.removeReservation( + chargingStation.getReservationBy( + 'connectorId', + reservedOnConnectorZero ? 0 : transactionConnectorId, + )!, + ReservationTerminationReason.TRANSACTION_STARTED, + ); + } chargingStation.getBeginEndMeterValues() && (await chargingStation.ocppRequestService.requestHandler< OCPP16MeterValuesRequest, @@ -655,15 +678,14 @@ export class OCPP16ResponseService extends OCPPResponseService { if (chargingStation.stationInfo.powerSharedByConnectors) { ++chargingStation.powerDivider; } - const configuredMeterValueSampleInterval = - ChargingStationConfigurationUtils.getConfigurationKey( - chargingStation, - OCPP16StandardParametersKey.MeterValueSampleInterval, - ); + const configuredMeterValueSampleInterval = getConfigurationKey( + chargingStation, + OCPP16StandardParametersKey.MeterValueSampleInterval, + ); chargingStation.startMeterValues( transactionConnectorId, configuredMeterValueSampleInterval - ? convertToInt(configuredMeterValueSampleInterval.value) * 1000 + ? secondsToMilliseconds(convertToInt(configuredMeterValueSampleInterval.value)) : Constants.DEFAULT_METER_VALUES_INTERVAL, ); } else {