DeleteCertificateStatusEnumType,
ErrorType,
type EvseStatus,
- FirmwareStatus,
- FirmwareStatusEnumType,
type FirmwareType,
GenericDeviceModelStatusEnumType,
GenericStatus,
type OCPP20DeleteCertificateRequest,
type OCPP20DeleteCertificateResponse,
OCPP20DeviceInfoVariableName,
+ OCPP20FirmwareStatusEnumType,
type OCPP20FirmwareStatusNotificationRequest,
type OCPP20FirmwareStatusNotificationResponse,
type OCPP20GetBaseReportRequest,
interface OCPP20PerStationState {
activeFirmwareUpdateAbortController?: AbortController
activeFirmwareUpdateRequestId?: number
- lastFirmwareStatus?: FirmwareStatusEnumType
+ lastFirmwareStatus?: OCPP20FirmwareStatusEnumType
preInoperativeConnectorStatuses: Map<number, OCPP20ConnectorStatusEnumType>
reportDataCache: Map<number, ReportDataType[]>
}
const ss = this.getStationState(chargingStation)
const firmwareStatus =
ss.lastFirmwareStatus == null ||
- ss.lastFirmwareStatus === FirmwareStatusEnumType.Installed
- ? FirmwareStatusEnumType.Idle
+ ss.lastFirmwareStatus === OCPP20FirmwareStatusEnumType.Installed
+ ? OCPP20FirmwareStatusEnumType.Idle
: ss.lastFirmwareStatus
chargingStation.ocppRequestService
.requestHandler<
private hasFirmwareUpdateInProgress (chargingStation: ChargingStation): boolean {
const firmwareStatus = chargingStation.stationInfo?.firmwareStatus
return (
- firmwareStatus === FirmwareStatus.Downloading ||
- firmwareStatus === FirmwareStatus.Downloaded ||
- firmwareStatus === FirmwareStatus.Installing
+ firmwareStatus === OCPP20FirmwareStatusEnumType.Downloading ||
+ firmwareStatus === OCPP20FirmwareStatusEnumType.Downloaded ||
+ firmwareStatus === OCPP20FirmwareStatusEnumType.Installing ||
+ firmwareStatus === OCPP20FirmwareStatusEnumType.DownloadScheduled ||
+ firmwareStatus === OCPP20FirmwareStatusEnumType.DownloadPaused ||
+ firmwareStatus === OCPP20FirmwareStatusEnumType.InstallScheduled ||
+ firmwareStatus === OCPP20FirmwareStatusEnumType.InstallRebooting ||
+ firmwareStatus === OCPP20FirmwareStatusEnumType.SignatureVerified
)
}
private sendFirmwareStatusNotification (
chargingStation: ChargingStation,
- status: FirmwareStatusEnumType,
+ status: OCPP20FirmwareStatusEnumType,
requestId: number
): Promise<OCPP20FirmwareStatusNotificationResponse> {
this.getStationState(chargingStation).lastFirmwareStatus = status
+ if (chargingStation.stationInfo != null) {
+ chargingStation.stationInfo.firmwareStatus = status
+ }
return chargingStation.ocppRequestService.requestHandler<
OCPP20FirmwareStatusNotificationRequest,
OCPP20FirmwareStatusNotificationResponse
if (retrieveTime > now) {
await this.sendFirmwareStatusNotification(
chargingStation,
- FirmwareStatusEnumType.DownloadScheduled,
+ OCPP20FirmwareStatusEnumType.DownloadScheduled,
requestId
)
await sleep(retrieveTime - now)
await this.sendFirmwareStatusNotification(
chargingStation,
- FirmwareStatusEnumType.Downloading,
+ OCPP20FirmwareStatusEnumType.Downloading,
requestId
)
if (location.trim() === '' || !this.isValidFirmwareLocation(location)) {
await this.sendFirmwareStatusNotification(
chargingStation,
- FirmwareStatusEnumType.DownloadFailed,
+ OCPP20FirmwareStatusEnumType.DownloadFailed,
requestId
)
logger.warn(
await this.sendFirmwareStatusNotification(
chargingStation,
- FirmwareStatusEnumType.Downloaded,
+ OCPP20FirmwareStatusEnumType.Downloaded,
requestId
)
if (checkAborted()) return
await this.sendFirmwareStatusNotification(
chargingStation,
- FirmwareStatusEnumType.SignatureVerified,
+ OCPP20FirmwareStatusEnumType.SignatureVerified,
requestId
)
}
if (installTime > currentTime) {
await this.sendFirmwareStatusNotification(
chargingStation,
- FirmwareStatusEnumType.InstallScheduled,
+ OCPP20FirmwareStatusEnumType.InstallScheduled,
requestId
)
await sleep(installTime - currentTime)
await this.sendFirmwareStatusNotification(
chargingStation,
- FirmwareStatusEnumType.Installing,
+ OCPP20FirmwareStatusEnumType.Installing,
requestId
)
if (checkAborted()) return
await this.sendFirmwareStatusNotification(
chargingStation,
- FirmwareStatusEnumType.Installed,
+ OCPP20FirmwareStatusEnumType.Installed,
requestId
)
type CertificateActionEnumType,
type CertificateSigningUseEnumType,
ErrorType,
- type FirmwareStatusEnumType,
type JsonObject,
type JsonType,
+ type OCPP20FirmwareStatusEnumType,
type OCPP20FirmwareStatusNotificationRequest,
type OCPP20FirmwareStatusNotificationResponse,
type OCPP20Get15118EVCertificateRequest,
*/
public async requestFirmwareStatusNotification (
chargingStation: ChargingStation,
- status: FirmwareStatusEnumType,
+ status: OCPP20FirmwareStatusEnumType,
requestId?: number
): Promise<OCPP20FirmwareStatusNotificationResponse> {
logger.debug(
import type {
CertificateActionEnumType,
CertificateSigningUseEnumType,
- FirmwareStatusEnumType,
JsonType,
+ OCPP20FirmwareStatusEnumType,
OCPP20FirmwareStatusNotificationResponse,
OCPP20Get15118EVCertificateResponse,
OCPP20GetCertificateStatusResponse,
*/
requestFirmwareStatusNotification: (
chargingStation: ChargingStation,
- status: FirmwareStatusEnumType,
+ status: OCPP20FirmwareStatusEnumType,
requestId?: number
) => Promise<OCPP20FirmwareStatusNotificationResponse>
DataEnumType,
DataTransferStatusEnumType,
DeleteCertificateStatusEnumType,
- FirmwareStatusEnumType,
type FirmwareType,
GenericDeviceModelStatusEnumType,
GetCertificateIdUseEnumType,
MessageTriggerEnumType,
type NetworkConnectionProfileType,
OCPP20ComponentName,
+ OCPP20FirmwareStatusEnumType,
OCPP20UnitEnumType,
type OCSPRequestDataType,
OperationalStatusEnumType,
NotFound = 'NotFound',
}
-export enum FirmwareStatusEnumType {
- Downloaded = 'Downloaded',
- DownloadFailed = 'DownloadFailed',
- Downloading = 'Downloading',
- DownloadPaused = 'DownloadPaused',
- DownloadScheduled = 'DownloadScheduled',
- Idle = 'Idle',
- InstallationFailed = 'InstallationFailed',
- Installed = 'Installed',
- Installing = 'Installing',
- InstallRebooting = 'InstallRebooting',
- InstallScheduled = 'InstallScheduled',
- InstallVerificationFailed = 'InstallVerificationFailed',
- InvalidSignature = 'InvalidSignature',
- SignatureVerified = 'SignatureVerified',
-}
-
export enum GenericDeviceModelStatusEnumType {
Accepted = 'Accepted',
EmptyResultSet = 'EmptyResultSet',
VehicleIdSensor = 'VehicleIdSensor',
}
+export enum OCPP20FirmwareStatusEnumType {
+ Downloaded = 'Downloaded',
+ DownloadFailed = 'DownloadFailed',
+ Downloading = 'Downloading',
+ DownloadPaused = 'DownloadPaused',
+ DownloadScheduled = 'DownloadScheduled',
+ Idle = 'Idle',
+ InstallationFailed = 'InstallationFailed',
+ Installed = 'Installed',
+ Installing = 'Installing',
+ InstallRebooting = 'InstallRebooting',
+ InstallScheduled = 'InstallScheduled',
+ InstallVerificationFailed = 'InstallVerificationFailed',
+ InvalidSignature = 'InvalidSignature',
+ SignatureVerified = 'SignatureVerified',
+}
+
export enum OCPP20UnitEnumType {
AMP = 'A',
ARBITRARY_STRENGTH_UNIT = 'ASU',
CertificateSigningUseEnumType,
ChargingStationType,
CustomDataType,
- FirmwareStatusEnumType,
FirmwareType,
GetCertificateIdUseEnumType,
InstallCertificateUseEnumType,
LogParametersType,
MessageTriggerEnumType,
NetworkConnectionProfileType,
+ OCPP20FirmwareStatusEnumType,
OCSPRequestDataType,
OperationalStatusEnumType,
ReportBaseEnumType,
export interface OCPP20FirmwareStatusNotificationRequest extends JsonObject {
customData?: CustomDataType
requestId?: number
- status: FirmwareStatusEnumType
+ status: OCPP20FirmwareStatusEnumType
}
export interface OCPP20Get15118EVCertificateRequest extends JsonObject {
type OCPP16ReserveNowRequest,
type OCPP16StatusNotificationRequest,
} from './1.6/Requests.js'
-import { OperationalStatusEnumType } from './2.0/Common.js'
+import { OCPP20FirmwareStatusEnumType, OperationalStatusEnumType } from './2.0/Common.js'
import {
type OCPP20BootNotificationRequest,
+ type OCPP20FirmwareStatusNotificationRequest,
OCPP20IncomingRequestCommand,
OCPP20RequestCommand,
type OCPP20StatusNotificationRequest,
export type ErrorCallback = (ocppError: OCPPError, requestStatistic?: boolean) => void
-export type FirmwareStatusNotificationRequest = OCPP16FirmwareStatusNotificationRequest
+export type FirmwareStatusNotificationRequest =
+ | OCPP16FirmwareStatusNotificationRequest
+ | OCPP20FirmwareStatusNotificationRequest
export type HeartbeatRequest = OCPP16HeartbeatRequest
export const FirmwareStatus = {
...OCPP16FirmwareStatus,
+ ...OCPP20FirmwareStatusEnumType,
} as const
// eslint-disable-next-line @typescript-eslint/no-redeclare
-export type FirmwareStatus = OCPP16FirmwareStatus
+export type FirmwareStatus = OCPP16FirmwareStatus | OCPP20FirmwareStatusEnumType
export type ReserveNowRequest = OCPP16ReserveNowRequest
import { createTestableIncomingRequestService } from '../../../../src/charging-station/ocpp/2.0/__testable__/index.js'
import { OCPP20IncomingRequestService } from '../../../../src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.js'
import {
- FirmwareStatusEnumType,
type FirmwareType,
+ OCPP20FirmwareStatusEnumType,
OCPP20IncomingRequestCommand,
OCPP20RequestCommand,
type OCPP20UpdateFirmwareRequest,
await flushMicrotasks()
assert.strictEqual(sentRequests.length, 1)
- assert.strictEqual(sentRequests[0].payload.status, FirmwareStatusEnumType.Downloading)
+ assert.strictEqual(sentRequests[0].payload.status, OCPP20FirmwareStatusEnumType.Downloading)
const secondRequest: OCPP20UpdateFirmwareRequest = {
firmware: {
sentRequests[0].command,
OCPP20RequestCommand.FIRMWARE_STATUS_NOTIFICATION
)
- assert.strictEqual(sentRequests[0].payload.status, FirmwareStatusEnumType.Downloading)
+ assert.strictEqual(sentRequests[0].payload.status, OCPP20FirmwareStatusEnumType.Downloading)
assert.strictEqual(sentRequests[0].payload.requestId, 1)
t.mock.timers.tick(2000)
await flushMicrotasks()
assert.strictEqual(sentRequests.length, 3)
- assert.strictEqual(sentRequests[1].payload.status, FirmwareStatusEnumType.Downloaded)
- assert.strictEqual(sentRequests[2].payload.status, FirmwareStatusEnumType.Installing)
+ assert.strictEqual(sentRequests[1].payload.status, OCPP20FirmwareStatusEnumType.Downloaded)
+ assert.strictEqual(sentRequests[2].payload.status, OCPP20FirmwareStatusEnumType.Installing)
t.mock.timers.tick(1000)
await flushMicrotasks()
- assert.strictEqual(sentRequests[3].payload.status, FirmwareStatusEnumType.Installed)
+ assert.strictEqual(sentRequests[3].payload.status, OCPP20FirmwareStatusEnumType.Installed)
// H11: SecurityEventNotification for FirmwareUpdated
assert.strictEqual(sentRequests.length, 5)
await flushMicrotasks()
assert.strictEqual(sentRequests.length, 1)
- assert.strictEqual(sentRequests[0].payload.status, FirmwareStatusEnumType.Downloading)
+ assert.strictEqual(sentRequests[0].payload.status, OCPP20FirmwareStatusEnumType.Downloading)
t.mock.timers.tick(2000)
await flushMicrotasks()
assert.strictEqual(sentRequests.length, 2)
- assert.strictEqual(sentRequests[1].payload.status, FirmwareStatusEnumType.DownloadFailed)
+ assert.strictEqual(
+ sentRequests[1].payload.status,
+ OCPP20FirmwareStatusEnumType.DownloadFailed
+ )
assert.strictEqual(sentRequests[1].payload.requestId, 7)
})
})
await flushMicrotasks()
assert.strictEqual(sentRequests.length, 2)
- assert.strictEqual(sentRequests[1].payload.status, FirmwareStatusEnumType.DownloadFailed)
+ assert.strictEqual(
+ sentRequests[1].payload.status,
+ OCPP20FirmwareStatusEnumType.DownloadFailed
+ )
assert.strictEqual(sentRequests[1].payload.requestId, 8)
})
})
t.mock.timers.tick(2000)
await flushMicrotasks()
assert.strictEqual(sentRequests.length, 2)
- assert.strictEqual(sentRequests[1].payload.status, FirmwareStatusEnumType.Downloaded)
+ assert.strictEqual(sentRequests[1].payload.status, OCPP20FirmwareStatusEnumType.Downloaded)
t.mock.timers.tick(500)
await flushMicrotasks()
- assert.strictEqual(sentRequests[2].payload.status, FirmwareStatusEnumType.SignatureVerified)
- assert.strictEqual(sentRequests[3].payload.status, FirmwareStatusEnumType.Installing)
+ assert.strictEqual(
+ sentRequests[2].payload.status,
+ OCPP20FirmwareStatusEnumType.SignatureVerified
+ )
+ assert.strictEqual(sentRequests[3].payload.status, OCPP20FirmwareStatusEnumType.Installing)
t.mock.timers.tick(1000)
await flushMicrotasks()
- assert.strictEqual(sentRequests[4].payload.status, FirmwareStatusEnumType.Installed)
+ assert.strictEqual(sentRequests[4].payload.status, OCPP20FirmwareStatusEnumType.Installed)
// H11: SecurityEventNotification after Installed
assert.strictEqual(sentRequests.length, 6)
type TestableOCPP20RequestService,
} from '../../../../src/charging-station/ocpp/2.0/__testable__/index.js'
import {
- FirmwareStatusEnumType,
+ OCPP20FirmwareStatusEnumType,
type OCPP20FirmwareStatusNotificationRequest,
type OCPP20FirmwareStatusNotificationResponse,
OCPP20RequestCommand,
})
await it('should send FirmwareStatusNotification with Downloading status', async () => {
- await service.requestFirmwareStatusNotification(station, FirmwareStatusEnumType.Downloading, 42)
+ await service.requestFirmwareStatusNotification(
+ station,
+ OCPP20FirmwareStatusEnumType.Downloading,
+ 42
+ )
assert.strictEqual(sendMessageMock.mock.calls.length, 1)
const sentPayload = sendMessageMock.mock.calls[0]
.arguments[2] as OCPP20FirmwareStatusNotificationRequest
- assert.strictEqual(sentPayload.status, FirmwareStatusEnumType.Downloading)
+ assert.strictEqual(sentPayload.status, OCPP20FirmwareStatusEnumType.Downloading)
assert.strictEqual(sentPayload.requestId, 42)
const commandName = sendMessageMock.mock.calls[0].arguments[3]
await service.requestFirmwareStatusNotification(
station,
- FirmwareStatusEnumType.Installed,
+ OCPP20FirmwareStatusEnumType.Installed,
testRequestId
)
const sentPayload = sendMessageMock.mock.calls[0]
.arguments[2] as OCPP20FirmwareStatusNotificationRequest
- assert.strictEqual(sentPayload.status, FirmwareStatusEnumType.Installed)
+ assert.strictEqual(sentPayload.status, OCPP20FirmwareStatusEnumType.Installed)
assert.strictEqual(sentPayload.requestId, testRequestId)
})
await it('should return empty response from CSMS', async () => {
const response = await service.requestFirmwareStatusNotification(
station,
- FirmwareStatusEnumType.Downloaded,
+ OCPP20FirmwareStatusEnumType.Downloaded,
1
)