diff --git a/js/beestat/math.js b/js/beestat/math.js
new file mode 100644
index 0000000..9de3016
--- /dev/null
+++ b/js/beestat/math.js
@@ -0,0 +1,41 @@
+beestat.math = {};
+
+/**
+ * Get a linear trendline from a set of data.
+ *
+ * @param {Object} data The data; at least two points required.
+ *
+ * @return {Object} The slope and intercept of the trendline.
+ */
+beestat.math.get_linear_trendline = function(data) {
+ // Requires at least two points.
+ if (Object.keys(data).length < 2) {
+ return null;
+ }
+
+ var sum_x = 0;
+ var sum_y = 0;
+ var sum_xy = 0;
+ var sum_x_squared = 0;
+ var n = 0;
+
+ for (var x in data) {
+ x = parseFloat(x);
+ var y = parseFloat(data[x]);
+
+ sum_x += x;
+ sum_y += y;
+ sum_xy += (x * y);
+ sum_x_squared += Math.pow(x, 2);
+ n++;
+ }
+
+ var slope = ((n * sum_xy) - (sum_x * sum_y)) /
+ ((n * sum_x_squared) - (Math.pow(sum_x, 2)));
+ var intercept = ((sum_y) - (slope * sum_x)) / (n);
+
+ return {
+ 'slope': slope,
+ 'intercept': intercept
+ };
+};
diff --git a/js/component/card/temperature_profiles.js b/js/component/card/temperature_profiles.js
index 57c4920..dd7bea8 100644
--- a/js/component/card/temperature_profiles.js
+++ b/js/component/card/temperature_profiles.js
@@ -138,7 +138,7 @@ beestat.component.card.temperature_profiles.prototype.get_data_ = function() {
}
profile.deltas = deltas_converted;
- var linear_trendline = this.get_linear_trendline_(profile.deltas);
+ var linear_trendline = beestat.math.get_linear_trendline(profile.deltas);
var min_max_keys = Object.keys(profile.deltas);
@@ -215,49 +215,6 @@ beestat.component.card.temperature_profiles.prototype.get_data_ = function() {
return data;
};
-/**
- * Get a linear trendline from a set of data.
- *
- * IMPORTANT: This exists in the profile already but it's wrong to use it
- * directly as it's not right for Celsius.
- *
- * @param {Object} data The data; at least two points required.
- *
- * @return {Object} The slope and intercept of the trendline.
- */
-beestat.component.card.temperature_profiles.prototype.get_linear_trendline_ = function(data) {
- // Requires at least two points.
- if (Object.keys(data).length < 2) {
- return null;
- }
-
- var sum_x = 0;
- var sum_y = 0;
- var sum_xy = 0;
- var sum_x_squared = 0;
- var n = 0;
-
- for (var x in data) {
- x = parseFloat(x);
- var y = parseFloat(data[x]);
-
- sum_x += x;
- sum_y += y;
- sum_xy += (x * y);
- sum_x_squared += Math.pow(x, 2);
- n++;
- }
-
- var slope = ((n * sum_xy) - (sum_x * sum_y)) /
- ((n * sum_x_squared) - (Math.pow(sum_x, 2)));
- var intercept = ((sum_y) - (slope * sum_x)) / (n);
-
- return {
- 'slope': slope,
- 'intercept': intercept
- };
-};
-
/**
* Get the title of the card.
*
diff --git a/js/component/modal/temperature_profiles_info.js b/js/component/modal/temperature_profiles_info.js
index bc1863d..a6e8b1a 100644
--- a/js/component/modal/temperature_profiles_info.js
+++ b/js/component/modal/temperature_profiles_info.js
@@ -29,13 +29,29 @@ beestat.component.modal.temperature_profiles_info.prototype.decorate_contents_ =
'resist'
].forEach(function(type) {
if (thermostat.profile.temperature[type] !== null) {
+ const profile = thermostat.profile.temperature[type];
+
+ // Convert the data to Celsius if necessary
+ const deltas_converted = {};
+ for (let key in profile.deltas) {
+ deltas_converted[beestat.temperature({'temperature': key})] =
+ beestat.temperature({
+ 'temperature': (profile.deltas[key]),
+ 'delta': true,
+ 'round': 3
+ });
+ }
+
+ profile.deltas = deltas_converted;
+ const linear_trendline = beestat.math.get_linear_trendline(profile.deltas);
+
fields.push({
'name': beestat.series['indoor_' + type + '_delta'].name,
'value':
'Slope = ' +
- thermostat.profile.temperature[type].linear_trendline.slope +
+ linear_trendline.slope.toFixed(4) +
'
Intercept = ' +
- thermostat.profile.temperature[type].linear_trendline.intercept
+ linear_trendline.intercept.toFixed(4) + beestat.setting('units.temperature')
});
}
});
diff --git a/js/js.php b/js/js.php
index 3b29d3e..3acf3b9 100755
--- a/js/js.php
+++ b/js/js.php
@@ -49,6 +49,7 @@ if($setting->get('environment') === 'dev' || $setting->get('environment') === 'd
echo '' . PHP_EOL;
echo '' . PHP_EOL;
echo '' . PHP_EOL;
+ echo '' . PHP_EOL;
// Layer
echo '' . PHP_EOL;