From 55d51bc21f3fa8da926de42516250bee6e254a25 Mon Sep 17 00:00:00 2001
From: Pithon Kabiro <pithon.kabiro@hft-stuttgart.de>
Date: Tue, 19 Oct 2021 14:48:50 +0200
Subject: [PATCH] New function: create temp diff metadata

Refactor the logic for creating the metadata for the temperature
difference (dT, VL-RL) of a single building into a new function
---
 .../src_modules/calculateTemperatureDiff.mjs  | 90 +++++++++++++------
 1 file changed, 63 insertions(+), 27 deletions(-)

diff --git a/public/js/src_modules/calculateTemperatureDiff.mjs b/public/js/src_modules/calculateTemperatureDiff.mjs
index c661ba8..eec34cb 100644
--- a/public/js/src_modules/calculateTemperatureDiff.mjs
+++ b/public/js/src_modules/calculateTemperatureDiff.mjs
@@ -69,6 +69,59 @@ const calculateVorlaufMinusRuecklaufTemperatureObservations = function (
   }
 };
 
+/**
+ * Create synthetic metadata for the temperature difference, dT, between Vorlauf temperature [VL] and
+ * RÞcklauf temperature [RL] (i.e., dT = VL - RL) of a single building
+ *
+ * @param {String} buildingId The building ID
+ * @param {String} samplingRate The sampling rate
+ * @param {Array} observationsPlusMetadataArr A 1*2 array, where the first element is an array made up of two arrays of observations and the second element is an array of two metadata objects
+ * @returns {Object} A metadata object for dT, made up of three properties: description, name and unit of measurement
+ */
+const createVorlaufMinusRuecklaufTemperatureMetadata = function (
+  buildingId,
+  samplingRate,
+  observationsPlusMetadataArr
+) {
+  // Extract metadata; second element of array, note that we skip the first element
+  const [, [metadataVorlauf, metadataRuecklauf]] = observationsPlusMetadataArr;
+
+  // From Vorlauf metadata, extract `name` and `unitOfMeasurement`
+  const {
+    name: datastreamNameVorlauf,
+    unitOfMeasurement: unitOfMeasurementVorlauf,
+  } = metadataVorlauf;
+
+  // From Ruecklauf metadata, extract `name`
+  const { name: datastreamNameRuecklauf } = metadataRuecklauf;
+
+  // Extract the phenomenon names from the Datastream names
+  const phenomenonNameVorlauf = extractPhenomenonNameFromDatastreamName(
+    datastreamNameVorlauf
+  );
+  const phenomenonNameRuecklauf = extractPhenomenonNameFromDatastreamName(
+    datastreamNameRuecklauf
+  );
+
+  // Create our custom datastream description text
+  // The resulting datastream description string has two `temperature` substrings;
+  // replace the first occurence with an empty string
+  const descriptionTempDifference =
+    `Computed dT: ${phenomenonNameVorlauf} minus ${phenomenonNameRuecklauf}`.replace(
+      "temperature",
+      ""
+    );
+
+  // Create our custom datastream name text
+  const nameTempDifference = `BOSCH_${buildingId} / dT Temperature difference (VL-RL) DS:${samplingRate}`;
+
+  return {
+    descriptionTempDifference,
+    nameTempDifference,
+    unitOfMeasurementVorlauf,
+  };
+};
+
 /**
  * Calculate the temperature difference, dT, between Vorlauf temperature [VL] and
  * RÞcklauf temperature [RL] (i.e., dT = VL - RL). In addition, create synthetic metadata
@@ -104,9 +157,6 @@ export const calculateVorlaufMinusRuecklaufTemperature = async function (
       // Note: we skip the second element
       const [buildingId, , samplingRate] = bldgDataPtSamplingRateNestedArr[0];
 
-      const BUILDING_ID = buildingId;
-      const SAMPLING_RATE = samplingRate;
-
       const observationsPlusMetadata =
         await getMetadataPlusObservationsFromSingleOrMultipleDatastreams(
           baseUrl,
@@ -114,37 +164,23 @@ export const calculateVorlaufMinusRuecklaufTemperature = async function (
           bldgDataPtSamplingRateNestedArr
         );
 
+      // dT observations (timestamp + value)
       const vorlaufMinusRuecklaufTemperatureObs =
         calculateVorlaufMinusRuecklaufTemperatureObservations(
           observationsPlusMetadata
         );
 
-      // Extract Vorlauf temperature, Ruecklauf temperature and metadata
-      const [, [metadataVorlauf, metadataRuecklauf]] = observationsPlusMetadata;
-
-      // From Ruecklauf metadata, extract `name`
-      const { name: datastreamNameRuecklauf } = metadataRuecklauf;
-
-      // Extract the phenomenon names from the Datastream names
-      const phenomenonNameVorlauf = extractPhenomenonNameFromDatastreamName(
-        datastreamNameVorlauf
-      );
-      const phenomenonNameRuecklauf = extractPhenomenonNameFromDatastreamName(
-        datastreamNameRuecklauf
+      // dT metadata
+      const {
+        descriptionTempDifference,
+        nameTempDifference,
+        unitOfMeasurementVorlauf,
+      } = createVorlaufMinusRuecklaufTemperatureMetadata(
+        buildingId,
+        samplingRate,
+        observationsPlusMetadata
       );
 
-      // Create our custom datastream description text
-      // The resulting datastream description string has two `temperature` substrings;
-      // replace the first occurence with an empty string
-      const descriptionTempDifference =
-        `Computed dT: ${phenomenonNameVorlauf} minus ${phenomenonNameRuecklauf}`.replace(
-          "temperature",
-          ""
-        );
-
-      // Create our custom datastream name text
-      const nameTempDifference = `BOSCH_${BUILDING_ID} / dT Temperature difference (VL-RL) DS:${SAMPLING_RATE}`;
-
       // The datastream object that we return needs to have these property names
       const description = descriptionTempDifference;
       const name = nameTempDifference;
-- 
GitLab