X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2FChargingStation.js;h=cb0cf3a5dd4bb62cb3e41a65eff663fb8cc5fc6f;hb=2d0e26f5083da9e14cdfa2fdb181a30fac93a64e;hp=f644003c139f995c846eb8e6c54dfc3c9d398a3f;hpb=0a60c33c4f6592f6223136704fa4513b68603f2d;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ChargingStation.js b/src/charging-station/ChargingStation.js index f644003c..cb0cf3a5 100644 --- a/src/charging-station/ChargingStation.js +++ b/src/charging-station/ChargingStation.js @@ -268,7 +268,7 @@ class ChargingStation { await sendMeterValues(connectorID, interval, this); }, interval); } else { - logger.info(`${this._basicFormatLog()} Charging station MeterValueSampleInterval configuration set to ${interval}ms, not sending MeterValues`); + logger.error(`${this._basicFormatLog()} Charging station MeterValueSampleInterval configuration set to ${interval}ms, not sending MeterValues`); } } @@ -277,7 +277,7 @@ class ChargingStation { this._wsConnectionUrl = this._supervisionUrl + '/' + this._stationInfo.name; } this._wsConnection = new WebSocket(this._wsConnectionUrl, 'ocpp' + Constants.OCPP_VERSION_16); - logger.info(this._basicFormatLog() + ' Will communicate with ' + this._supervisionUrl); + logger.info(this._basicFormatLog() + ' Will communicate through URL ' + this._supervisionUrl); // Monitor authorization file this._startAuthorizationFileMonitoring(); // Monitor station template file @@ -294,18 +294,18 @@ class ChargingStation { this._wsConnection.on('ping', this.onPing.bind(this)); } - async stop(type = '') { + async stop(reason = '') { // Stop heartbeat await this._stopHeartbeat(); // Stop the ATG if (Utils.convertToBoolean(this._stationInfo.AutomaticTransactionGenerator.enable) && this._automaticTransactionGeneration && !this._automaticTransactionGeneration.timeToStop) { - await this._automaticTransactionGeneration.stop(type ? type + 'Reset' : ''); + await this._automaticTransactionGeneration.stop(reason); } else { for (const connector in this._connectors) { if (this._connectors[connector].transactionStarted) { - await this.sendStopTransaction(this._connectors[connector].transactionId, type ? type + 'Reset' : ''); + await this.sendStopTransaction(this._connectors[connector].transactionId, reason); } } } @@ -350,7 +350,7 @@ class ChargingStation { } if (this._isSocketRestart) { this._basicStartMessageSequence(); - if (this._messageQueue.length > 0) { + if (!Utils.isEmptyArray(this._messageQueue)) { this._messageQueue.forEach((message) => { if (this._wsConnection && this._wsConnection.readyState === WebSocket.OPEN) { this._wsConnection.send(message); @@ -510,12 +510,21 @@ class ChargingStation { async sendStopTransaction(transactionId, reason = '') { try { - const payload = { - transactionId, - meterStop: 0, - timestamp: new Date().toISOString(), - reason, - }; + let payload = {}; + if (reason) { + payload = { + transactionId, + meterStop: 0, + timestamp: new Date().toISOString(), + reason, + }; + } else { + payload = { + transactionId, + meterStop: 0, + timestamp: new Date().toISOString(), + }; + } await this.sendMessage(Utils.generateUUID(), payload, Constants.OCPP_JSON_CALL_MESSAGE, 'StopTransaction'); } catch (error) { logger.error(this._basicFormatLog() + ' Send StopTransaction error: ' + error); @@ -550,7 +559,7 @@ class ChargingStation { } else if (!sampledValueLcl.sampledValue[index].measurand || sampledValueLcl.sampledValue[index].measurand === 'Energy.Active.Import.Register') { // Persist previous value in connector const consumption = Utils.getRandomInt(self._stationInfo.maxPower / 3600000 * interval); - if (connector && connector.lastConsumptionValue && connector.lastConsumptionValue >= 0) { + if (connector && connector.lastConsumptionValue >= 0) { connector.lastConsumptionValue += consumption; } else { connector.lastConsumptionValue = 0; @@ -687,7 +696,8 @@ class ChargingStation { handleResponseStartTransaction(payload, requestPayload) { if (this._connectors[requestPayload.connectorId].transactionStarted) { - logger.debug(this._basicFormatLog() + ' Try to start a transaction on an already used connector ' + requestPayload.connectorId + ' by transaction ' + this._connectors[requestPayload.connectorId].transactionId); + logger.debug(this._basicFormatLog() + ' Try to start a transaction on an already used connector ' + requestPayload.connectorId + ': %s', this._connectors[requestPayload.connectorId]); + return; } let transactionConnectorId; @@ -707,7 +717,7 @@ class ChargingStation { this._connectors[transactionConnectorId].idTag = requestPayload.idTag; this._connectors[transactionConnectorId].lastConsumptionValue = 0; this.sendStatusNotification(requestPayload.connectorId, 'Charging'); - logger.info(this._basicFormatLog() + ' Transaction ' + this._connectors[transactionConnectorId].transactionId + ' STARTED on ' + this._stationInfo.name + '#' + requestPayload.connectorId + ' for idTag ' + requestPayload.idTag); + logger.info(this._basicFormatLog() + ' Transaction ' + payload.transactionId + ' STARTED on ' + this._stationInfo.name + '#' + requestPayload.connectorId + ' for idTag ' + requestPayload.idTag); const configuredMeterValueSampleInterval = this._getConfigurationKey('MeterValueSampleInterval'); this._startMeterValues(requestPayload.connectorId, configuredMeterValueSampleInterval ? configuredMeterValueSampleInterval.value * 1000 : 60000); @@ -732,15 +742,15 @@ class ChargingStation { } if (payload.idTagInfo && payload.idTagInfo.status === 'Accepted') { this.sendStatusNotification(transactionConnectorId, 'Available'); - logger.info(this._basicFormatLog() + ' Transaction ' + this._connectors[transactionConnectorId].transactionId + ' STOPPED on ' + this._stationInfo.name + '#' + transactionConnectorId); + logger.info(this._basicFormatLog() + ' Transaction ' + requestPayload.transactionId + ' STOPPED on ' + this._stationInfo.name + '#' + transactionConnectorId); this._resetTransactionOnConnector(transactionConnectorId); } else { - logger.error(this._basicFormatLog() + ' Stopping transaction id ' + this._connectors[transactionConnectorId].transactionId + ' REJECTED with status ' + payload.idTagInfo.status); + logger.error(this._basicFormatLog() + ' Stopping transaction id ' + requestPayload.transactionId + ' REJECTED with status ' + payload.idTagInfo.status); } } handleResponseStatusNotification(payload, requestPayload) { - logger.debug(this._basicFormatLog() + ' Status notification response received: %j to status notification request: %j', payload, requestPayload); + logger.debug(this._basicFormatLog() + ' Status notification response received: %j to StatusNotification request: %j', payload, requestPayload); } handleResponseMeterValues(payload, requestPayload) { @@ -777,7 +787,7 @@ class ChargingStation { async handleReset(commandPayload) { // Simulate charging station restart setImmediate(async () => { - await this.stop(commandPayload.type); + await this.stop(commandPayload.type + 'Reset'); await Utils.sleep(this._stationInfo.resetTime); await this.start(); });