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:
Gina Häußge 2016-12-02 11:06:01 +01:00
parent 3d3c93c67d
commit c00b3de40c

View file

@ -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;
};