import type { AutomaticTransactionGeneratorConfiguration } from '../types/AutomaticTransactionGenerator';
import type ChargingStationConfiguration from '../types/ChargingStationConfiguration';
import type ChargingStationInfo from '../types/ChargingStationInfo';
-import type ChargingStationOcppConfiguration from '../types/ChargingStationOcppConfiguration';
+import type { ChargingStationOcppConfiguration } from '../types/ChargingStationOcppConfiguration';
import ChargingStationTemplate, {
CurrentType,
PowerUnits,
} else {
this.automaticTransactionGenerator.start();
}
+ parentPort.postMessage(MessageChannelUtils.buildUpdatedMessage(this));
}
public stopAutomaticTransactionGenerator(connectorIds?: number[]): void {
}
} else {
this.automaticTransactionGenerator?.stop();
- this.automaticTransactionGenerator = null;
}
+ parentPort.postMessage(MessageChannelUtils.buildUpdatedMessage(this));
}
public async stopTransactionOnConnector(
const lastConnectorId = Utils.convertToInt(lastConnector);
if (
lastConnectorId === 0 &&
- this.getUseConnectorId0(stationInfo) &&
+ this.getUseConnectorId0(stationInfo) === true &&
stationInfo?.Connectors[lastConnector]
) {
this.connectors.set(
// Respond
cachedRequest = this.requests.get(messageId);
if (Array.isArray(cachedRequest) === true) {
- [responseCallback, , requestCommandName, requestPayload] = cachedRequest;
+ [responseCallback, errorCallback, requestCommandName, requestPayload] = cachedRequest;
} else {
throw new OCPPError(
ErrorType.PROTOCOL_ERROR,
logger.error(
`${this.logPrefix()} Incoming OCPP command '${
commandName ?? requestCommandName ?? null
- }' message '${data.toString()}' matching cached request '${JSON.stringify(
- this.requests.get(messageId)
- )}' processing error:`,
+ }' message '${data.toString()}'${
+ messageType !== MessageType.CALL_MESSAGE
+ ? ` matching cached request '${JSON.stringify(this.requests.get(messageId))}'`
+ : ''
+ } processing error:`,
error
);
if (error instanceof OCPPError === false) {
error as OCPPError,
commandName ?? requestCommandName ?? null
);
+ } else if (
+ [MessageType.CALL_RESULT_MESSAGE, MessageType.CALL_ERROR_MESSAGE].includes(messageType) ===
+ true
+ ) {
+ // Always remove the request from the cache in case of error at response handling
+ this.requests.delete(messageId);
+ // Always reject the deferred promise in case of error at response handling (rejecting an already fulfilled promise is a no-op)
+ if (errorCallback) {
+ errorCallback(error as OCPPError, false);
+ }
}
}
}
connectorStatus: ConnectorStatus,
meterStop = false
): number {
- if (this.getMeteringPerTransaction()) {
+ if (this.getMeteringPerTransaction() === true) {
return (
(meterStop === true
? Math.round(connectorStatus?.transactionEnergyActiveImportRegisterValue)
);
}
- private getUseConnectorId0(stationInfo?: ChargingStationInfo): boolean | undefined {
+ private getUseConnectorId0(stationInfo?: ChargingStationInfo): boolean {
const localStationInfo = stationInfo ?? this.stationInfo;
return !Utils.isUndefined(localStationInfo.useConnectorId0)
? localStationInfo.useConnectorId0