Fix temperature history on server reconnect
Two problems solved:
* Make sure to only process temperature data once we
have printer profile information on hand to evaluate
the heater data. If we don't have that yet, create a client
side backlog and process that once we have the necessary
data on hand.
* Do not use uninitialized history cutoff values - if our cutoff
value hasn't yet synced (no settings response arrived yet),
just don't perform the cutoff.
This commit is contained in:
parent
3d3c93c67d
commit
c00b3de40c
1 changed files with 40 additions and 9 deletions
|
|
@ -36,6 +36,10 @@ $(function() {
|
|||
|
||||
self.heaterOptions = ko.observable({});
|
||||
|
||||
self._printerProfileInitialized = false;
|
||||
self._currentTemperatureDataBacklog = [];
|
||||
self._historyTemperatureDataBacklog = [];
|
||||
|
||||
self._printerProfileUpdated = function() {
|
||||
var graphColors = ["red", "orange", "green", "brown", "purple"];
|
||||
var heaterOptions = {};
|
||||
|
|
@ -81,6 +85,10 @@ $(function() {
|
|||
// write back
|
||||
self.heaterOptions(heaterOptions);
|
||||
self.tools(tools);
|
||||
|
||||
if (!self._printerProfileInitialized) {
|
||||
self._triggerBacklog();
|
||||
}
|
||||
self.updatePlot();
|
||||
};
|
||||
self.settingsViewModel.printerProfiles.currentProfileData.subscribe(function() {
|
||||
|
|
@ -126,16 +134,36 @@ $(function() {
|
|||
|
||||
self.fromCurrentData = function(data) {
|
||||
self._processStateData(data.state);
|
||||
self._processTemperatureUpdateData(data.serverTime, data.temps);
|
||||
if (!self._printerProfileInitialized) {
|
||||
self._currentTemperatureDataBacklog.push(data);
|
||||
} else {
|
||||
self._processTemperatureUpdateData(data.serverTime, data.temps);
|
||||
}
|
||||
self._processOffsetData(data.offsets);
|
||||
};
|
||||
|
||||
self.fromHistoryData = function(data) {
|
||||
self._processStateData(data.state);
|
||||
self._processTemperatureHistoryData(data.serverTime, data.temps);
|
||||
if (!self._printerProfileInitialized) {
|
||||
self._historyTemperatureDataBacklog.push(data);
|
||||
} else {
|
||||
self._processTemperatureHistoryData(data.serverTime, data.temps);
|
||||
}
|
||||
self._processOffsetData(data.offsets);
|
||||
};
|
||||
|
||||
self._triggerBacklog = function() {
|
||||
_.each(self._historyTemperatureDataBacklog, function(data) {
|
||||
self._processTemperatureHistoryData(data.serverTime, data.temps);
|
||||
});
|
||||
_.each(self._currentTemperatureDataBacklog, function(data) {
|
||||
self._processTemperatureUpdateData(data.serverTime, data.temps);
|
||||
});
|
||||
self._historyTemperatureDataBacklog = [];
|
||||
self._currentTemperatureDataBacklog = [];
|
||||
self._printerProfileInitialized = true;
|
||||
};
|
||||
|
||||
self._processStateData = function(data) {
|
||||
self.isErrorOrClosed(data.flags.closedOrError);
|
||||
self.isOperational(data.flags.operational);
|
||||
|
|
@ -217,14 +245,17 @@ $(function() {
|
|||
})
|
||||
});
|
||||
|
||||
var filterOld = function(item) {
|
||||
return item[0] >= clientTime - self.temperature_cutoff() * 60 * 1000;
|
||||
};
|
||||
var temperature_cutoff = self.temperature_cutoff();
|
||||
if (temperature_cutoff != undefined) {
|
||||
var filterOld = function(item) {
|
||||
return item[0] >= clientTime - temperature_cutoff * 60 * 1000;
|
||||
};
|
||||
|
||||
_.each(_.keys(self.heaterOptions()), function(d) {
|
||||
result[d].actual = _.filter(result[d].actual, filterOld);
|
||||
result[d].target = _.filter(result[d].target, filterOld);
|
||||
});
|
||||
_.each(_.keys(self.heaterOptions()), function(d) {
|
||||
result[d].actual = _.filter(result[d].actual, filterOld);
|
||||
result[d].target = _.filter(result[d].target, filterOld);
|
||||
});
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue