ConnectorStatusEnum,
type JsonType,
OCPP20AuthorizationStatusEnumType,
+ type OCPP20AuthorizeResponse,
type OCPP20BootNotificationResponse,
type OCPP20FirmwareStatusNotificationResponse,
+ type OCPP20Get15118EVCertificateResponse,
+ type OCPP20GetCertificateStatusResponse,
type OCPP20HeartbeatResponse,
type OCPP20IncomingRequestCommand,
type OCPP20LogStatusNotificationResponse,
OCPP20OptionalVariableName,
OCPP20RequestCommand,
type OCPP20SecurityEventNotificationResponse,
+ type OCPP20SignCertificateResponse,
type OCPP20StatusNotificationResponse,
OCPP20TransactionEventEnumType,
type OCPP20TransactionEventRequest,
public constructor () {
super(OCPPVersion.VERSION_201)
this.responseHandlers = new Map<RequestCommand, ResponseHandler>([
+ [OCPP20RequestCommand.AUTHORIZE, this.handleResponseAuthorize.bind(this) as ResponseHandler],
[
OCPP20RequestCommand.BOOT_NOTIFICATION,
this.handleResponseBootNotification.bind(this) as ResponseHandler,
OCPP20RequestCommand.FIRMWARE_STATUS_NOTIFICATION,
this.handleResponseFirmwareStatusNotification.bind(this) as ResponseHandler,
],
+ [
+ OCPP20RequestCommand.GET_15118_EV_CERTIFICATE,
+ this.handleResponseGet15118EVCertificate.bind(this) as ResponseHandler,
+ ],
+ [
+ OCPP20RequestCommand.GET_CERTIFICATE_STATUS,
+ this.handleResponseGetCertificateStatus.bind(this) as ResponseHandler,
+ ],
[OCPP20RequestCommand.HEARTBEAT, this.handleResponseHeartbeat.bind(this) as ResponseHandler],
[
OCPP20RequestCommand.LOG_STATUS_NOTIFICATION,
OCPP20RequestCommand.SECURITY_EVENT_NOTIFICATION,
this.handleResponseSecurityEventNotification.bind(this) as ResponseHandler,
],
+ [
+ OCPP20RequestCommand.SIGN_CERTIFICATE,
+ this.handleResponseSignCertificate.bind(this) as ResponseHandler,
+ ],
[
OCPP20RequestCommand.STATUS_NOTIFICATION,
this.handleResponseStatusNotification.bind(this) as ResponseHandler,
)
}
+ private handleResponseAuthorize (
+ chargingStation: ChargingStation,
+ payload: OCPP20AuthorizeResponse
+ ): void {
+ logger.debug(
+ `${chargingStation.logPrefix()} ${moduleName}.handleResponseAuthorize: Authorize response received, status: ${payload.idTokenInfo.status}`
+ )
+ }
+
private handleResponseBootNotification (
chargingStation: ChargingStation,
payload: OCPP20BootNotificationResponse
)
}
+ private handleResponseGet15118EVCertificate (
+ chargingStation: ChargingStation,
+ payload: OCPP20Get15118EVCertificateResponse
+ ): void {
+ logger.debug(
+ `${chargingStation.logPrefix()} ${moduleName}.handleResponseGet15118EVCertificate: Get15118EVCertificate response received, status: ${payload.status}`
+ )
+ }
+
+ private handleResponseGetCertificateStatus (
+ chargingStation: ChargingStation,
+ payload: OCPP20GetCertificateStatusResponse
+ ): void {
+ logger.debug(
+ `${chargingStation.logPrefix()} ${moduleName}.handleResponseGetCertificateStatus: GetCertificateStatus response received, status: ${payload.status}`
+ )
+ }
+
private handleResponseHeartbeat (
chargingStation: ChargingStation,
payload: OCPP20HeartbeatResponse
)
}
+ private handleResponseSignCertificate (
+ chargingStation: ChargingStation,
+ payload: OCPP20SignCertificateResponse
+ ): void {
+ logger.debug(
+ `${chargingStation.logPrefix()} ${moduleName}.handleResponseSignCertificate: SignCertificate response received, status: ${payload.status}`
+ )
+ }
+
private handleResponseStatusNotification (
chargingStation: ChargingStation,
payload: OCPP20StatusNotificationResponse
import { afterEach, describe, it } from 'node:test'
import { fileURLToPath } from 'node:url'
+import { OCPP16IncomingRequestService } from '../../../../src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.js'
+import { OCPP16ResponseService } from '../../../../src/charging-station/ocpp/1.6/OCPP16ResponseService.js'
import { OCPP16ServiceUtils } from '../../../../src/charging-station/ocpp/1.6/OCPP16ServiceUtils.js'
import { OCPP16IncomingRequestCommand, OCPP16RequestCommand } from '../../../../src/types/index.js'
import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js'
)
}
})
+
+ await it('should register a response handler for every OCPP16RequestCommand', () => {
+ const responseService = new OCPP16ResponseService()
+ const handlers = (responseService as unknown as { responseHandlers: Map<string, unknown> })
+ .responseHandlers
+ const registered = new Set(handlers.keys())
+ for (const command of Object.values(OCPP16RequestCommand)) {
+ assert.ok(registered.has(command), `missing response handler for: ${command}`)
+ }
+ })
+
+ await it('should register an incoming request handler for every OCPP16IncomingRequestCommand', () => {
+ const incomingService = new OCPP16IncomingRequestService()
+ const handlers = (
+ incomingService as unknown as { incomingRequestHandlers: Map<string, unknown> }
+ ).incomingRequestHandlers
+ const registered = new Set(handlers.keys())
+ for (const command of Object.values(OCPP16IncomingRequestCommand)) {
+ assert.ok(registered.has(command), `missing incoming request handler for: ${command}`)
+ }
+ })
})
})
import { afterEach, describe, it } from 'node:test'
import { fileURLToPath } from 'node:url'
+import { OCPP20IncomingRequestService } from '../../../../src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.js'
+import { OCPP20ResponseService } from '../../../../src/charging-station/ocpp/2.0/OCPP20ResponseService.js'
import { OCPP20ServiceUtils } from '../../../../src/charging-station/ocpp/2.0/OCPP20ServiceUtils.js'
import { OCPP20IncomingRequestCommand, OCPP20RequestCommand } from '../../../../src/types/index.js'
import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js'
)
}
})
+
+ await it('should register a response handler for every OCPP20RequestCommand', () => {
+ const responseService = new OCPP20ResponseService()
+ const handlers = (responseService as unknown as { responseHandlers: Map<string, unknown> })
+ .responseHandlers
+ const registered = new Set(handlers.keys())
+ for (const command of Object.values(OCPP20RequestCommand)) {
+ assert.ok(registered.has(command), `missing response handler for: ${command}`)
+ }
+ })
+
+ await it('should register an incoming request handler for every OCPP20IncomingRequestCommand', () => {
+ const incomingService = new OCPP20IncomingRequestService()
+ const handlers = (
+ incomingService as unknown as { incomingRequestHandlers: Map<string, unknown> }
+ ).incomingRequestHandlers
+ const registered = new Set(handlers.keys())
+ for (const command of Object.values(OCPP20IncomingRequestCommand)) {
+ assert.ok(registered.has(command), `missing incoming request handler for: ${command}`)
+ }
+ })
})
})