+import { randomInt } from 'node:crypto'
import { readFileSync } from 'node:fs'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'
import type { DefinedError, ErrorObject, JSONSchemaType } from 'ajv'
import { isDate } from 'date-fns'
-import { OCPP16Constants } from './1.6/OCPP16Constants.js'
-import { OCPP20Constants } from './2.0/OCPP20Constants.js'
-import { OCPPConstants } from './OCPPConstants.js'
import {
type ChargingStation,
getConfigurationKey,
type AuthorizeResponse,
ChargePointErrorCode,
ChargingStationEvents,
- type ConnectorStatusEnum,
+ type ConnectorStatus,
+ ConnectorStatusEnum,
CurrentType,
ErrorType,
FileType,
import {
ACElectricUtils,
Constants,
- DCElectricUtils,
convertToFloat,
convertToInt,
+ DCElectricUtils,
getRandomFloatFluctuatedRounded,
getRandomFloatRounded,
- getRandomInteger,
handleFileException,
isNotEmptyArray,
isNotEmptyString,
- logPrefix,
logger,
+ logPrefix,
max,
min,
roundTo
} from '../../utils/index.js'
+import { OCPP16Constants } from './1.6/OCPP16Constants.js'
+import { OCPP20Constants } from './2.0/OCPP20Constants.js'
+import { OCPPConstants } from './OCPPConstants.js'
-export const getMessageTypeString = (messageType: MessageType): string => {
+export const getMessageTypeString = (messageType: MessageType | undefined): string => {
switch (messageType) {
case MessageType.CALL_MESSAGE:
return 'request'
}
}
-export const buildStatusNotificationRequest = (
+const buildStatusNotificationRequest = (
chargingStation: ChargingStation,
connectorId: number,
status: ConnectorStatusEnum,
})
}
+export const restoreConnectorStatus = async (
+ chargingStation: ChargingStation,
+ connectorId: number,
+ connectorStatus: ConnectorStatus | undefined
+): Promise<void> => {
+ if (connectorStatus?.reservation != null) {
+ await sendAndSetConnectorStatus(chargingStation, connectorId, ConnectorStatusEnum.Reserved)
+ } else if (connectorStatus?.status !== ConnectorStatusEnum.Available) {
+ await sendAndSetConnectorStatus(chargingStation, connectorId, ConnectorStatusEnum.Available)
+ }
+}
+
const checkConnectorStatusTransition = (
chargingStation: ChargingStation,
connectorId: number,
parseInt(socSampledValueTemplate.value),
socSampledValueTemplate.fluctuationPercent ?? Constants.DEFAULT_FLUCTUATION_PERCENT
)
- : getRandomInteger(socMaximumValue, socMinimumValue)
+ : randomInt(socMinimumValue, socMaximumValue)
meterValue.sampledValue.push(
buildSampledValue(socSampledValueTemplate, socSampledValueTemplateValue)
)
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
export class OCPPServiceUtils {
- public static getMessageTypeString = getMessageTypeString
- public static sendAndSetConnectorStatus = sendAndSetConnectorStatus
- public static isIdTagAuthorized = isIdTagAuthorized
- public static buildTransactionEndMeterValue = buildTransactionEndMeterValue
+ public static readonly getMessageTypeString = getMessageTypeString
+ public static readonly sendAndSetConnectorStatus = sendAndSetConnectorStatus
+ public static readonly restoreConnectorStatus = restoreConnectorStatus
+ public static readonly isIdTagAuthorized = isIdTagAuthorized
+ public static readonly buildTransactionEndMeterValue = buildTransactionEndMeterValue
protected static getSampledValueTemplate = getSampledValueTemplate
protected static buildSampledValue = buildSampledValue