import { isIdTagAuthorized } from '../IdTagAuthorization.js'
import { OCPPConstants } from '../OCPPConstants.js'
import { OCPPIncomingRequestService } from '../OCPPIncomingRequestService.js'
-import { buildMeterValue } from '../OCPPServiceUtils.js'
+import { buildMeterValue, sendAndSetConnectorStatus } from '../OCPPServiceUtils.js'
import { OCPP16Constants } from './OCPP16Constants.js'
import { OCPP16ServiceUtils } from './OCPP16ServiceUtils.js'
if (connectorStatus != null) {
connectorStatus.availability = type
}
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId,
status: chargePointStatus,
} as OCPP16StatusNotificationRequest)
}
return OCPP16Constants.OCPP_RESPONSE_UNLOCK_FAILED
}
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId,
status: OCPP16ChargePointStatus.Available,
} as OCPP16StatusNotificationRequest)
}
for (const { connectorId, connectorStatus } of chargingStation.iterateConnectors(true)) {
if (connectorStatus.transactionStarted === false) {
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId,
status: OCPP16ChargePointStatus.Unavailable,
} as OCPP16StatusNotificationRequest)
} else {
for (const { connectorId, connectorStatus } of chargingStation.iterateConnectors(true)) {
if (connectorStatus.status !== OCPP16ChargePointStatus.Unavailable) {
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId,
status: OCPP16ChargePointStatus.Unavailable,
} as OCPP16StatusNotificationRequest)
} from '../../../types/index.js'
import { Constants, generateUUID, logger } from '../../../utils/index.js'
import { OCPPRequestService } from '../OCPPRequestService.js'
-import { buildStatusNotificationRequest } from '../OCPPServiceUtils.js'
+import {
+ buildStatusNotificationRequest,
+ buildTransactionEndMeterValue,
+ sendAndSetConnectorStatus,
+} from '../OCPPServiceUtils.js'
import { OCPP16Constants } from './OCPP16Constants.js'
import { OCPP16ServiceUtils } from './OCPP16ServiceUtils.js'
// Pre request actions hook
switch (commandName) {
case OCPP16RequestCommand.START_TRANSACTION:
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId: (commandParams as OCPP16StartTransactionRequest).connectorId,
status: OCPP16ChargePointStatus.Preparing,
} as OCPP16StatusNotificationRequest)
transactionData: OCPP16ServiceUtils.buildTransactionDataMeterValues(
chargingStation.getConnectorStatus(connectorId)
?.transactionBeginMeterValue as OCPP16MeterValue,
- OCPP16ServiceUtils.buildTransactionEndMeterValue(
+ buildTransactionEndMeterValue(
chargingStation,
connectorId,
energyActiveImportRegister
} from '../../../types/index.js'
import { Constants, convertToInt, logger, truncateId } from '../../../utils/index.js'
import { OCPPResponseService } from '../OCPPResponseService.js'
+import {
+ buildTransactionEndMeterValue,
+ restoreConnectorStatus,
+ sendAndSetConnectorStatus,
+} from '../OCPPServiceUtils.js'
import { OCPP16ServiceUtils } from './OCPP16ServiceUtils.js'
const moduleName = 'OCPP16ResponseService'
meterValue: [connectorStatus.transactionBeginMeterValue],
transactionId: payload.transactionId,
} satisfies OCPP16MeterValuesRequest))
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId,
status: OCPP16ChargePointStatus.Charging,
} as OCPP16StatusNotificationRequest)
>(chargingStation, OCPP16RequestCommand.METER_VALUES, {
connectorId: transactionConnectorId,
meterValue: [
- OCPP16ServiceUtils.buildTransactionEndMeterValue(
+ buildTransactionEndMeterValue(
chargingStation,
transactionConnectorId,
requestPayload.meterStop
!chargingStation.isChargingStationAvailable() ||
!chargingStation.isConnectorAvailable(transactionConnectorId)
) {
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId: transactionConnectorId,
status: OCPP16ChargePointStatus.Unavailable,
} as OCPP16StatusNotificationRequest)
} else {
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId: transactionConnectorId,
status: OCPP16ChargePointStatus.Available,
} as OCPP16StatusNotificationRequest)
OCPP16ServiceUtils.stopUpdatedMeterValues(chargingStation, connectorId)
const connectorStatus = chargingStation.getConnectorStatus(connectorId)
resetConnectorStatus(connectorStatus)
- await OCPP16ServiceUtils.restoreConnectorStatus(chargingStation, connectorId, connectorStatus)
+ await restoreConnectorStatus(chargingStation, connectorId, connectorStatus)
}
}
import {
buildEmptyMeterValue,
buildMeterValue,
+ buildSampledValue,
buildTransactionEndMeterValue,
+ getSampledValueTemplate,
OCPPServiceUtils,
+ sendAndSetConnectorStatus,
} from '../OCPPServiceUtils.js'
import { OCPP16Constants } from './OCPP16Constants.js'
): OCPP16MeterValue {
const meterValue = buildEmptyMeterValue() as OCPP16MeterValue
// Energy.Active.Import.Register measurand (default)
- const sampledValueTemplate = OCPP16ServiceUtils.getSampledValueTemplate(
- chargingStation,
- connectorId
- )
+ const sampledValueTemplate = getSampledValueTemplate(chargingStation, connectorId)
if (sampledValueTemplate != null) {
const unitDivider =
sampledValueTemplate.unit === OCPP16MeterValueUnit.KILO_WATT_HOUR ? 1000 : 1
meterValue.sampledValue.push(
- OCPP16ServiceUtils.buildSampledValue(
+ buildSampledValue(
chargingStation.stationInfo?.ocppVersion,
sampledValueTemplate,
roundTo((meterStart ?? 0) / unitDivider, 4),
}
connectorStatus.availability = availabilityType
if (response === OCPP16Constants.OCPP_AVAILABILITY_RESPONSE_ACCEPTED) {
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId,
status: chargePointStatus,
} as OCPP16StatusNotificationRequest)
chargingStation: ChargingStation,
connectorId: number
): Promise<GenericResponse> => {
- await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
+ await sendAndSetConnectorStatus(chargingStation, {
connectorId,
status: OCPP16ChargePointStatus.Finishing,
} as OCPP16StatusNotificationRequest)
return supportedMeasurands.includes(measurand as string)
}
-const getSampledValueTemplate = (
+export const getSampledValueTemplate = (
chargingStation: ChargingStation,
connectorId: number,
measurandsKey: ConfigurationKeyType = StandardParametersKey.MeterValuesSampledData,
* @param phase - Optional phase information for multi-phase electrical measurements
* @returns A sampled value object formatted according to the specified OCPP version
*/
-function buildSampledValue (
+export function buildSampledValue (
ocppVersion: OCPPVersion | undefined,
sampledValueTemplate: SampledValueTemplate,
value: number,
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
export class OCPPServiceUtils {
- public static readonly buildTransactionEndMeterValue = buildTransactionEndMeterValue
- public static readonly mapStopReasonToOCPP20 = mapStopReasonToOCPP20
- public static readonly restoreConnectorStatus = restoreConnectorStatus
- public static readonly sendAndSetConnectorStatus = sendAndSetConnectorStatus
- public static readonly stopRunningTransactions = stopRunningTransactions
-
- protected static buildSampledValue = buildSampledValue
- protected static getSampledValueTemplate = getSampledValueTemplate
-
protected constructor () {
// This is intentional
}
import { afterEach, describe, it } from 'node:test'
import { OCPP16ServiceUtils } from '../../../../src/charging-station/ocpp/1.6/OCPP16ServiceUtils.js'
-import { OCPPServiceUtils } from '../../../../src/charging-station/ocpp/OCPPServiceUtils.js'
+import { buildTransactionEndMeterValue } from '../../../../src/charging-station/ocpp/OCPPServiceUtils.js'
import {
type OCPP16ChargingProfile,
OCPP16ChargingProfileKindType,
}
// Act
- const meterValue = OCPPServiceUtils.buildTransactionEndMeterValue(station, 1, 10000)
+ const meterValue = buildTransactionEndMeterValue(station, 1, 10000)
// Assert
assert.notStrictEqual(meterValue, undefined)
}
// Act
- const meterValue = OCPPServiceUtils.buildTransactionEndMeterValue(station, 1, 3000)
+ const meterValue = buildTransactionEndMeterValue(station, 1, 3000)
// Assert — kWh divider: 3000 / 1000 = 3
assert.strictEqual(meterValue.sampledValue[0].value, '3')