convertToDate,
convertToInt,
formatDurationMilliSeconds,
+ handleIncomingRequestError,
isAsyncFunction,
isNotEmptyArray,
isNotEmptyString,
) {
chargingStation.restartWebSocketPing()
}
+ if (
+ (keyToChange.key as OCPP16StandardParametersKey) ===
+ OCPP16StandardParametersKey.MeterValueSampleInterval &&
+ chargingStation.getNumberOfRunningTransactions() > 0 &&
+ valueChanged
+ ) {
+ for (
+ let connectorId = 1;
+ connectorId <= chargingStation.getNumberOfConnectors();
+ connectorId++
+ ) {
+ if (chargingStation.getConnectorStatus(connectorId)?.transactionStarted === true) {
+ chargingStation.restartMeterValues(
+ connectorId,
+ secondsToMilliseconds(convertToInt(value))
+ )
+ }
+ }
+ }
if (keyToChange.reboot === true) {
return OCPP16Constants.OCPP_CONFIGURATION_RESPONSE_REBOOT_REQUIRED
}
csChargingProfiles.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE &&
connectorId > 0 &&
connectorStatus?.transactionStarted === true &&
+ csChargingProfiles.transactionId != null &&
csChargingProfiles.transactionId !== connectorStatus.transactionId
) {
logger.error(
start: currentDate,
end: addSeconds(currentDate, duration)
}
- // Get charging profiles sorted by connector id then stack level
+ // FIXME: add and handle charging station charging profiles
const chargingProfiles: OCPP16ChargingProfile[] = getConnectorChargingProfiles(
chargingStation,
connectorId
connectorId: number,
chargingProfile: OCPP16ChargingProfile
): boolean {
- if (chargingProfile.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE) {
+ if (
+ chargingProfile.chargingProfilePurpose === OCPP16ChargingProfilePurposeType.TX_PROFILE &&
+ chargingProfile.transactionId == null
+ ) {
OCPP16ServiceUtils.setChargingProfile(chargingStation, connectorId, chargingProfile)
logger.debug(
`${chargingStation.logPrefix()} Charging profile(s) set at remote start transaction on ${
logger.debug(
`${chargingStation.logPrefix()} Not allowed to set ${
chargingProfile.chargingProfilePurpose
- } charging profile(s) at remote start transaction`
+ } charging profile(s)${chargingProfile.transactionId != null ? ' with transactionId set' : ''} at remote start transaction`
)
return false
}
})
ftpClient?.close()
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<GetDiagnosticsResponse>(
+ return handleIncomingRequestError<GetDiagnosticsResponse>(
chargingStation,
OCPP16IncomingRequestCommand.GET_DIAGNOSTICS,
error as Error,
return OCPP16Constants.OCPP_DATA_TRANSFER_RESPONSE_UNKNOWN_VENDOR_ID
} catch (error) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<OCPP16DataTransferResponse>(
+ return handleIncomingRequestError<OCPP16DataTransferResponse>(
chargingStation,
OCPP16IncomingRequestCommand.DATA_TRANSFER,
error as Error,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
chargingStation.getConnectorStatus(connectorId)!.status = OCPP16ChargePointStatus.Available
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<OCPP16ReserveNowResponse>(
+ return handleIncomingRequestError<OCPP16ReserveNowResponse>(
chargingStation,
OCPP16IncomingRequestCommand.RESERVE_NOW,
error as Error,
return OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_ACCEPTED
} catch (error) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return this.handleIncomingRequestError<GenericResponse>(
+ return handleIncomingRequestError<GenericResponse>(
chargingStation,
OCPP16IncomingRequestCommand.CANCEL_RESERVATION,
error as Error,