import {
- AuthorizeResponse,
- StartTransactionResponse,
- StopTransactionReason,
- StopTransactionResponse,
-} from '../../types/ocpp/Transaction';
-import {
- DiagnosticsStatus,
IncomingRequestCommand,
RequestCommand,
ResponseType,
SendParams,
} from '../../types/ocpp/Requests';
-import { BootNotificationResponse } from '../../types/ocpp/Responses';
-import { ChargePointErrorCode } from '../../types/ocpp/ChargePointErrorCode';
-import { ChargePointStatus } from '../../types/ocpp/ChargePointStatus';
import type ChargingStation from '../ChargingStation';
import Constants from '../../utils/Constants';
import { EmptyObject } from '../../types/EmptyObject';
import { HandleErrorParams } from '../../types/Error';
import { JsonType } from '../../types/JsonType';
import { MessageType } from '../../types/ocpp/MessageType';
-import { MeterValue } from '../../types/ocpp/MeterValues';
import OCPPError from '../../exception/OCPPError';
import type OCPPResponseService from './OCPPResponseService';
import PerformanceStatistics from '../../performance/PerformanceStatistics';
string,
OCPPRequestService
>();
+
protected readonly chargingStation: ChargingStation;
private readonly ocppResponseService: OCPPResponseService;
) {
this.chargingStation = chargingStation;
this.ocppResponseService = ocppResponseService;
+ this.sendMessageHandler.bind(this);
+ this.sendResult.bind(this);
+ this.sendError.bind(this);
}
public static getInstance<T extends OCPPRequestService>(
chargingStation: ChargingStation,
ocppResponseService: OCPPResponseService
): T {
- if (!OCPPRequestService.instances.has(chargingStation.id)) {
+ if (!OCPPRequestService.instances.has(chargingStation.hashId)) {
OCPPRequestService.instances.set(
- chargingStation.id,
+ chargingStation.hashId,
new this(chargingStation, ocppResponseService)
);
}
- return OCPPRequestService.instances.get(chargingStation.id) as T;
+ return OCPPRequestService.instances.get(chargingStation.hashId) as T;
}
public async sendResult(
// FIXME: Handle sending error
this.chargingStation.wsConnection.send(messageToSend);
PerformanceStatistics.endMeasure(commandName, beginId);
+ logger.debug(
+ `${this.chargingStation.logPrefix()} >> Command '${commandName}' sent ${this.getMessageTypeString(
+ messageType
+ )} payload: ${messageToSend}`
+ );
} else if (!params.skipBufferingOnError) {
// Buffer it
this.chargingStation.bufferMessage(messageToSend);
resolve(payload);
} catch (error) {
reject(error);
- throw error;
} finally {
self.chargingStation.requests.delete(messageId);
}
return messageToSend;
}
+ private getMessageTypeString(messageType: MessageType): string {
+ switch (messageType) {
+ case MessageType.CALL_MESSAGE:
+ return 'request';
+ case MessageType.CALL_RESULT_MESSAGE:
+ return 'response';
+ case MessageType.CALL_ERROR_MESSAGE:
+ return 'error';
+ }
+ }
+
private handleRequestError(
commandName: RequestCommand | IncomingRequestCommand,
error: Error,
}
}
- public abstract sendHeartbeat(params?: SendParams): Promise<void>;
- public abstract sendBootNotification(
- chargePointModel: string,
- chargePointVendor: string,
- chargeBoxSerialNumber?: string,
- firmwareVersion?: string,
- chargePointSerialNumber?: string,
- iccid?: string,
- imsi?: string,
- meterSerialNumber?: string,
- meterType?: string,
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ public abstract sendMessageHandler<Request extends JsonType, Response extends JsonType>(
+ commandName: RequestCommand,
+ commandParams?: JsonType,
params?: SendParams
- ): Promise<BootNotificationResponse>;
- public abstract sendStatusNotification(
- connectorId: number,
- status: ChargePointStatus,
- errorCode?: ChargePointErrorCode
- ): Promise<void>;
- public abstract sendAuthorize(connectorId: number, idTag?: string): Promise<AuthorizeResponse>;
- public abstract sendStartTransaction(
- connectorId: number,
- idTag?: string
- ): Promise<StartTransactionResponse>;
- public abstract sendStopTransaction(
- transactionId: number,
- meterStop: number,
- idTag?: string,
- reason?: StopTransactionReason
- ): Promise<StopTransactionResponse>;
- public abstract sendMeterValues(
- connectorId: number,
- transactionId: number,
- interval: number
- ): Promise<void>;
- public abstract sendTransactionBeginMeterValues(
- connectorId: number,
- transactionId: number,
- beginMeterValue: MeterValue
- ): Promise<void>;
- public abstract sendTransactionEndMeterValues(
- connectorId: number,
- transactionId: number,
- endMeterValue: MeterValue
- ): Promise<void>;
- public abstract sendDiagnosticsStatusNotification(
- diagnosticsStatus: DiagnosticsStatus
- ): Promise<void>;
+ ): Promise<Response>;
}