appChart.js 4.98 KB
Newer Older
Pithon Kabiro's avatar
Pithon Kabiro committed
1
"use strict";
Pithon Kabiro's avatar
Pithon Kabiro committed
2

3
import { BASE_URL, QUERY_PARAMS_COMBINED } from "./src_modules/createUrl.js";
4

5
6
7
8
import {
  formatSensorThingsApiResponseForLineChart,
  drawLineChartHighcharts,
} from "./src_modules/chartLine.js";
Pithon Kabiro's avatar
Pithon Kabiro committed
9

10
11
12
13
import {
  formatSensorThingsApiResponseForHeatMap,
  drawHeatMapHighcharts,
} from "./src_modules/chartHeatmap.js";
Pithon Kabiro's avatar
Pithon Kabiro committed
14

15
16
17
18
import {
  formatSensorThingsApiResponseForScatterPlot,
  drawScatterPlotHighcharts,
} from "./src_modules/chartScatterPlot.js";
Pithon Kabiro's avatar
Pithon Kabiro committed
19

20
21
22
23
24
import {
  formatDatastreamMetadataForChart,
  getMetadataPlusObservationsFromSingleOrMultipleDatastreams,
  calculateVorlaufMinusRuecklaufTemperature,
} from "./src_modules/fetchData.js";
Pithon Kabiro's avatar
Pithon Kabiro committed
25

26
27
28
29
30
31
import {
  calculateSumOfObservationValuesWithinDatesInterval,
  calculateSumOfObservationValuesWithinMonthInterval,
  extractUniqueCalendarDatesFromTimestamp,
  extractUniqueCalendarMonthsFromCalendarDates,
} from "./src_modules/aggregate.js";
Pithon Kabiro's avatar
Pithon Kabiro committed
32
33
34
35
36
37

/**
 * Test plotting of temp difference (dT) using heatmap
 */
const drawHeatmapHCUsingTempDifference = async function () {
  const [tempDifferenceObsArrBau225, tempDifferenceMetadataBau225] =
38
39
40
41
42
43
    await calculateVorlaufMinusRuecklaufTemperature(
      BASE_URL,
      QUERY_PARAMS_COMBINED,
      "225",
      "60min"
    );
Pithon Kabiro's avatar
Pithon Kabiro committed
44

45
46
  drawHeatMapHighcharts(
    formatSensorThingsApiResponseForHeatMap(tempDifferenceObsArrBau225),
Pithon Kabiro's avatar
Pithon Kabiro committed
47
48
49
50
    formatDatastreamMetadataForChart(tempDifferenceMetadataBau225)
  );
};

51
52
53
/**
 * Test drawing of scatter plot chart
 */
54
const drawScatterPlotHCTest2 = async function () {
55
56
  const sensorsOfInterestArr = [
    ["225", "vl", "60min"],
57
58
    // ["125", "rl", "60min"],
    ["weather_station_521", "outside_temp", "60min"],
59
60
61
  ];

  const observationsPlusMetadata =
62
63
64
    await getMetadataPlusObservationsFromSingleOrMultipleDatastreams(
      BASE_URL,
      QUERY_PARAMS_COMBINED,
65
      sensorsOfInterestArr
66
67
    );

68
69
70
71
72
73
74
75
76
77
78
79
  // Extract the combined arrays for observations and metadata
  const [observationsArr, metadataArr] = observationsPlusMetadata;

  // Create formatted array(s) for observations
  // This function expects two arguments, these are unpacked using the spread operator
  const formattedObsScatterPlotArr =
    formatSensorThingsApiResponseForScatterPlot(...observationsArr);

  // Create formatted array(s) for metadata
  const formattedMetadataArr = metadataArr.map((metadata) =>
    formatDatastreamMetadataForChart(metadata)
  );
80

81
  // This function expects three arguments, the second and third are unpacked using the spread operator
82
  drawScatterPlotHighcharts(
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
    formattedObsScatterPlotArr,
    ...formattedMetadataArr
  );
};

/**
 * Test drawing of line chart with multiple series
 */
const testLineChartMultipleSeries = async function () {
  const sensorsOfInterestArr = [
    ["225", "vl", "60min"],
    ["125", "rl", "60min"],
    ["weather_station_521", "outside_temp", "60min"],
  ];

  const observationsPlusMetadata =
    await getMetadataPlusObservationsFromSingleOrMultipleDatastreams(
      BASE_URL,
      QUERY_PARAMS_COMBINED,
      sensorsOfInterestArr
    );

  // Extract the observations and metadata arrays
  const [observationsArr, metadataArr] = observationsPlusMetadata;

  // Format the observations and metadata
  const formattedObservationsArr = observationsArr.map((observations) =>
    formatSensorThingsApiResponseForLineChart(observations)
111
  );
112
113
114
115
116
117

  const formattedMetadataArr = metadataArr.map((metadata) =>
    formatDatastreamMetadataForChart(metadata)
  );

  drawLineChartHighcharts(formattedObservationsArr, formattedMetadataArr);
118
119
};

120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/**
 * Test aggregation of observations from a single datastream
 */
const testAggregationSum = async function () {
  const sensorOfInterestNestedArr = [["225", "vl", "60min"]];

  const observationsPlusMetadata =
    await getMetadataPlusObservationsFromSingleOrMultipleDatastreams(
      BASE_URL,
      QUERY_PARAMS_COMBINED,
      sensorOfInterestNestedArr
    );

  // Extract the observations and metadata for each sensor
  // Array elements in same order as input array
  const [[obsSensorOneArr], [metadataSensorOne]] = observationsPlusMetadata;

  // Unique calendar dates
  const uniqueCalendarDates =
    extractUniqueCalendarDatesFromTimestamp(obsSensorOneArr);

  // Unique calendar months
  const uniqueCalendarMonths =
    extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDates);

  // Calculate sum of values of observations - daily
  const observationsBau225VLSumDaily = uniqueCalendarDates.map((calendarDate) =>
    calculateSumOfObservationValuesWithinDatesInterval(
      obsSensorOneArr,
      "60 min",
      calendarDate,
      calendarDate
    )
  );

  // Calculate sum of values of observations - monthly
  const observationsBau225VLSumMonthly = uniqueCalendarMonths.map(
    (calendarMonth) =>
      calculateSumOfObservationValuesWithinMonthInterval(
        obsSensorOneArr,
        "60 min",
        calendarMonth
      )
  );

  console.log(observationsBau225VLSumDaily);
  console.log(observationsBau225VLSumMonthly);
};

169
170
171
// drawScatterPlotHCTest2();
// drawHeatmapHCUsingTempDifference();
// testLineChartMultipleSeries()
172
// testAggregationSum();