Add connector Id 0 handling by default
authorJérôme Benoit <jerome.benoit@sap.com>
Sat, 28 Nov 2020 21:33:46 +0000 (22:33 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Sat, 28 Nov 2020 21:33:46 +0000 (22:33 +0100)
Needed for charging profiles support.

Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/assets/station-templates/abb.station-template.json
src/assets/station-templates/evlink.station-template.json
src/assets/station-templates/keba.station-template.json
src/assets/station-templates/schneider-imredd.station-template.json
src/assets/station-templates/schneider.station-template.json
src/assets/station-templates/siemens.station-template.json
src/charging-station/ChargingStation.ts

index 4eee07fb78ca365807afbbe2c8afe12d3cd97dc6..510045e7f5d143fcc661fc76071c15c357b88428 100644 (file)
@@ -9,7 +9,7 @@
   "powerUnit": "W",
   "powerOutType": "DC",
   "numberOfConnectors": 2,
-  "useConnectorId0": false,
+  "useConnectorId0": true,
   "randomConnectors": false,
   "resetTime": 30,
   "enableStatistics": false,
index 46b1532b40ef1ff4d365e800ca70d7a756e0316c..4ced13756293734a6bea144de8d162e269eafe57 100644 (file)
@@ -51,6 +51,7 @@
     "stopOnConnectionFailure": false
   },
   "Connectors": {
+    "0": {},
     "1": {
       "MeterValues": [
         {
index 02db4f46cfc15d02da3fd995e507b0d783259a04..4c8ef7ebc8d8d253341219339e5d325a42d6130f 100644 (file)
@@ -48,6 +48,7 @@
     "stopOnConnectionFailure": false
   },
   "Connectors": {
+    "0": {},
     "1": {
       "MeterValues": [
         {
index d314c5aec3d6e47a391bd76406e2fc8bd75e396e..0e3330658f114db2842f63b494fe4848522d3148 100644 (file)
@@ -50,6 +50,7 @@
     "stopOnConnectionFailure": false
   },
   "Connectors": {
+    "0": {},
     "1": {
       "MeterValues": [
         {
index bdd48c7aa5f1e8db00cf43eb3323e6b4cadad46b..26f36319aabd08adaad7c8ee92f83cbdda987f7c 100644 (file)
@@ -55,6 +55,7 @@
     "stopOnConnectionFailure": false
   },
   "Connectors": {
+    "0": {},
     "1": {
       "MeterValues": [
         {
index 9c4d5cff482743c7d39e27e049391adff8081418..0c6cdc34a8e300c233ca3607d0a23f0fde4b4b29 100644 (file)
@@ -49,6 +49,7 @@
     "stopOnConnectionFailure": false
   },
   "Connectors": {
+    "0": {},
     "1": {
       "bootStatus": "Unavailable",
       "MeterValues": [
index 667c154b35595feb376ef14dbe175bfca3aa61cd..1301bc7aa9373f9f67eecf450da4c6a004e2e110 100644 (file)
@@ -118,7 +118,10 @@ export default class ChargingStation {
     }
     const templateMaxConnectors = this._getTemplateMaxNumberOfConnectors();
     if (templateMaxConnectors <= 0) {
-      logger.warn(`${this._logPrefix()} Charging station template ${this._stationTemplateFile} with no connector configurations`);
+      logger.warn(`${this._logPrefix()} Charging station template ${this._stationTemplateFile} with no connector configuration`);
+    }
+    if (!this._stationInfo.Connectors[0]) {
+      logger.warn(`${this._logPrefix()} Charging station template ${this._stationTemplateFile} with no connector Id 0 configuration`);
     }
     // Sanity check
     if (maxConnectors > (this._stationInfo.Connectors[0] ? templateMaxConnectors - 1 : templateMaxConnectors) && !this._stationInfo.randomConnectors) {
@@ -132,7 +135,7 @@ export default class ChargingStation {
       // Add connector Id 0
       let lastConnector = '0';
       for (lastConnector in this._stationInfo.Connectors) {
-        if (Utils.convertToInt(lastConnector) === 0 && this._stationInfo.useConnectorId0 && this._stationInfo.Connectors[lastConnector]) {
+        if (Utils.convertToInt(lastConnector) === 0 && this._getUseConnectorId0() && this._stationInfo.Connectors[lastConnector]) {
           this._connectors[lastConnector] = Utils.cloneObject(this._stationInfo.Connectors[lastConnector]) as Connector;
         }
       }
@@ -148,7 +151,7 @@ export default class ChargingStation {
     delete this._stationInfo.Connectors;
     // Initialize transaction attributes on connectors
     for (const connector in this._connectors) {
-      if (!this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
+      if (Utils.convertToInt(connector) > 0 && !this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
         this._initTransactionOnConnector(Utils.convertToInt(connector));
       }
     }
@@ -189,6 +192,10 @@ export default class ChargingStation {
     return this._stationInfo.authorizationFile && this._stationInfo.authorizationFile;
   }
 
+  _getUseConnectorId0(): boolean {
+    return !Utils.isUndefined(this._stationInfo.useConnectorId0) ? this._stationInfo.useConnectorId0 : true;
+  }
+
   _loadAndGetAuthorizedTags(): string[] {
     let authorizedTags: string[] = [];
     const authorizationFile = this._getAuthorizationFile();
@@ -233,7 +240,7 @@ export default class ChargingStation {
   _getNumberOfRunningTransactions(): number {
     let trxCount = 0;
     for (const connector in this._connectors) {
-      if (this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
+      if (Utils.convertToInt(connector) > 0 && this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
         trxCount++;
       }
     }
@@ -313,7 +320,7 @@ export default class ChargingStation {
 
   _getTransactionIdTag(transactionId: number): string {
     for (const connector in this._connectors) {
-      if (this.getConnector(Utils.convertToInt(connector)).transactionId === transactionId) {
+      if (Utils.convertToInt(connector) > 0 && this.getConnector(Utils.convertToInt(connector)).transactionId === transactionId) {
         return this.getConnector(Utils.convertToInt(connector)).idTag;
       }
     }
@@ -321,7 +328,7 @@ export default class ChargingStation {
 
   _getTransactionMeterStop(transactionId: number): number {
     for (const connector in this._connectors) {
-      if (this.getConnector(Utils.convertToInt(connector)).transactionId === transactionId) {
+      if (Utils.convertToInt(connector) > 0 && this.getConnector(Utils.convertToInt(connector)).transactionId === transactionId) {
         return this.getConnector(Utils.convertToInt(connector)).lastEnergyActiveImportRegisterValue;
       }
     }
@@ -367,7 +374,9 @@ export default class ChargingStation {
     this._startHeartbeat();
     // Initialize connectors status
     for (const connector in this._connectors) {
-      if (!this._hasStopped && !this.getConnector(Utils.convertToInt(connector)).status && this.getConnector(Utils.convertToInt(connector)).bootStatus) {
+      if (Utils.convertToInt(connector) === 0) {
+        continue;
+      } else if (!this._hasStopped && !this.getConnector(Utils.convertToInt(connector)).status && this.getConnector(Utils.convertToInt(connector)).bootStatus) {
         // Send status in template at startup
         await this.sendStatusNotification(Utils.convertToInt(connector), this.getConnector(Utils.convertToInt(connector)).bootStatus);
       } else if (this._hasStopped && this.getConnector(Utils.convertToInt(connector)).bootStatus) {
@@ -407,7 +416,7 @@ export default class ChargingStation {
       await this._automaticTransactionGeneration.stop(reason);
     } else {
       for (const connector in this._connectors) {
-        if (this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
+        if (Utils.convertToInt(connector) > 0 && this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
           await this.sendStopTransaction(this.getConnector(Utils.convertToInt(connector)).transactionId, reason);
         }
       }
@@ -561,9 +570,10 @@ export default class ChargingStation {
   async stop(reason: StopTransactionReason = StopTransactionReason.NONE): Promise<void> {
     // Stop message sequence
     await this._stopMessageSequence(reason);
-    // eslint-disable-next-line guard-for-in
     for (const connector in this._connectors) {
-      await this.sendStatusNotification(Utils.convertToInt(connector), ChargePointStatus.UNAVAILABLE);
+      if (Utils.convertToInt(connector) > 0) {
+        await this.sendStatusNotification(Utils.convertToInt(connector), ChargePointStatus.UNAVAILABLE);
+      }
     }
     if (this._wsConnection?.readyState === WebSocket.OPEN) {
       this._wsConnection.close();
@@ -822,11 +832,10 @@ export default class ChargingStation {
             ...!Utils.isUndefined(meterValuesTemplate[index].value) ? { value: meterValuesTemplate[index].value } : { value: voltageMeasurandValue.toString() },
           });
           for (let phase = 1; self._getNumberOfPhases() === 3 && phase <= self._getNumberOfPhases(); phase++) {
-            const voltageValue = Utils.convertToFloat(meterValue.sampledValue[meterValue.sampledValue.length - 1].value);
             let phaseValue: string;
-            if (voltageValue >= 0 && voltageValue <= 250) {
+            if (self._getVoltageOut() >= 0 && self._getVoltageOut() <= 250) {
               phaseValue = `L${phase}-N`;
-            } else if (voltageValue > 250) {
+            } else if (self._getVoltageOut() > 250) {
               phaseValue = `L${phase}-L${(phase + 1) % self._getNumberOfPhases() !== 0 ? (phase + 1) % self._getNumberOfPhases() : self._getNumberOfPhases()}`;
             }
             meterValue.sampledValue.push({
@@ -1146,7 +1155,7 @@ export default class ChargingStation {
 
     let transactionConnectorId: number;
     for (const connector in this._connectors) {
-      if (Utils.convertToInt(connector) === connectorId) {
+      if (Utils.convertToInt(connector) > 0 && Utils.convertToInt(connector) === connectorId) {
         transactionConnectorId = Utils.convertToInt(connector);
         break;
       }
@@ -1178,7 +1187,7 @@ export default class ChargingStation {
   handleResponseStopTransaction(payload: StopTransactionResponse, requestPayload: StopTransactionRequest): void {
     let transactionConnectorId: number;
     for (const connector in this._connectors) {
-      if (this.getConnector(Utils.convertToInt(connector)).transactionId === Utils.convertToInt(requestPayload.transactionId)) {
+      if (Utils.convertToInt(connector) > 0 && this.getConnector(Utils.convertToInt(connector)).transactionId === Utils.convertToInt(requestPayload.transactionId)) {
         transactionConnectorId = Utils.convertToInt(connector);
         break;
       }
@@ -1411,7 +1420,7 @@ export default class ChargingStation {
   async handleRequestRemoteStopTransaction(commandPayload: RemoteStopTransactionRequest): Promise<DefaultResponse> {
     const transactionId = Utils.convertToInt(commandPayload.transactionId);
     for (const connector in this._connectors) {
-      if (this.getConnector(Utils.convertToInt(connector)).transactionId === transactionId) {
+      if (Utils.convertToInt(connector) > 0 && this.getConnector(Utils.convertToInt(connector)).transactionId === transactionId) {
         await this.sendStopTransaction(transactionId);
         return Constants.OCPP_RESPONSE_ACCEPTED;
       }