mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-09 10:26:35 +00:00
Fix history showing extra points. (#350)
This commit is contained in:
parent
4c14e51079
commit
2ea5cbcc88
@ -147,11 +147,17 @@
|
|||||||
dataTable.addColumn({ type: 'datetime', id: 'Time' });
|
dataTable.addColumn({ type: 'datetime', id: 'Time' });
|
||||||
|
|
||||||
function pushData(values, noInterpolationValues) {
|
function pushData(values, noInterpolationValues) {
|
||||||
|
var timestamp = values[0];
|
||||||
|
if (timestamp > endTime) {
|
||||||
|
// Drop datapoints that are after the requested endTime. This could happen if
|
||||||
|
// endTime is "now" and client time is not in sync with server time.
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (prevValues && noInterpolationValues) {
|
if (prevValues && noInterpolationValues) {
|
||||||
// if we have to prevent interpolation, we add an old value for each
|
// if we have to prevent interpolation, we add an old value for each
|
||||||
// value that should not be interpolated at the same time that our new
|
// value that should not be interpolated at the same time that our new
|
||||||
// line will be published.
|
// line will be published.
|
||||||
data.push([values[0]].concat(prevValues.slice(1).map(
|
data.push([timestamp].concat(prevValues.slice(1).map(
|
||||||
function (val, index) {
|
function (val, index) {
|
||||||
return noInterpolationValues[index] ? val : null;
|
return noInterpolationValues[index] ? val : null;
|
||||||
})));
|
})));
|
||||||
@ -160,44 +166,7 @@
|
|||||||
prevValues = values;
|
prevValues = values;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (domain === 'thermostat') {
|
if (domain === 'thermostat' || domain === 'climate') {
|
||||||
// We differentiate between thermostats that have a target temperature
|
|
||||||
// range versus ones that have just a target temperature
|
|
||||||
hasTargetRange = states.reduce(
|
|
||||||
function (cum, cur) {
|
|
||||||
return cum || cur.attributes.target_temp_high !== cur.attributes.target_temp_low;
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
dataTable.addColumn('number', name + ' current temperature');
|
|
||||||
|
|
||||||
if (hasTargetRange) {
|
|
||||||
dataTable.addColumn('number', name + ' target temperature high');
|
|
||||||
dataTable.addColumn('number', name + ' target temperature low');
|
|
||||||
|
|
||||||
noInterpolations = [false, true, true];
|
|
||||||
|
|
||||||
processState = function (state) {
|
|
||||||
var curTemp = saveParseFloat(state.attributes.current_temperature);
|
|
||||||
var targetHigh = saveParseFloat(state.attributes.target_temp_high);
|
|
||||||
var targetLow = saveParseFloat(state.attributes.target_temp_low);
|
|
||||||
pushData(
|
|
||||||
[new Date(state.last_updated), curTemp, targetHigh, targetLow],
|
|
||||||
noInterpolations);
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
dataTable.addColumn('number', name + ' target temperature');
|
|
||||||
|
|
||||||
noInterpolations = [false, true];
|
|
||||||
|
|
||||||
processState = function (state) {
|
|
||||||
var curTemp = saveParseFloat(state.attributes.current_temperature);
|
|
||||||
var target = saveParseFloat(state.attributes.temperature);
|
|
||||||
pushData([new Date(state.last_updated), curTemp, target], noInterpolations);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
states.forEach(processState);
|
|
||||||
} else if (domain === 'climate') {
|
|
||||||
// We differentiate between thermostats that have a target temperature
|
// We differentiate between thermostats that have a target temperature
|
||||||
// range versus ones that have just a target temperature
|
// range versus ones that have just a target temperature
|
||||||
hasTargetRange = states.reduce(
|
hasTargetRange = states.reduce(
|
||||||
|
@ -112,6 +112,12 @@ Polymer({
|
|||||||
entityDisplay = window.hassUtil.computeStateName(stateInfo[0]);
|
entityDisplay = window.hassUtil.computeStateName(stateInfo[0]);
|
||||||
|
|
||||||
stateInfo.forEach(function (state) {
|
stateInfo.forEach(function (state) {
|
||||||
|
var timeStamp = new Date(state.last_changed);
|
||||||
|
if (timeStamp > endTime) {
|
||||||
|
// Drop datapoints that are after the requested endTime. This could happen if
|
||||||
|
// endTime is "now" and client time is not in sync with server time.
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (prevState !== null && state.state !== prevState) {
|
if (prevState !== null && state.state !== prevState) {
|
||||||
newLastChanged = new Date(state.last_changed);
|
newLastChanged = new Date(state.last_changed);
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
var DATE_CACHE = {};
|
var DATE_CACHE = {};
|
||||||
var RECENT_CACHE = {};
|
var RECENT_CACHE = {};
|
||||||
|
|
||||||
function computeHistory(stateHistory, endTime) {
|
function computeHistory(stateHistory) {
|
||||||
var lineChartDevices = {};
|
var lineChartDevices = {};
|
||||||
var timelineDevices = [];
|
var timelineDevices = [];
|
||||||
var unitStates;
|
var unitStates;
|
||||||
@ -23,14 +23,6 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Duplicate the last state to the selected endTime so the chart expands
|
|
||||||
// to the end of the selected time. (If no additional state changes were
|
|
||||||
// found, the state was still the last state as of the end time.
|
|
||||||
var lastState = Object.assign({}, stateInfo[stateInfo.length - 1]);
|
|
||||||
lastState.last_changed = endTime;
|
|
||||||
lastState.last_updated = endTime;
|
|
||||||
stateInfo.push(lastState);
|
|
||||||
|
|
||||||
stateWithUnit = stateInfo.find(
|
stateWithUnit = stateInfo.find(
|
||||||
function (state) { return 'unit_of_measurement' in state.attributes; });
|
function (state) { return 'unit_of_measurement' in state.attributes; });
|
||||||
|
|
||||||
@ -145,7 +137,7 @@
|
|||||||
|
|
||||||
var prom = this.hass.callApi('GET', url).then(
|
var prom = this.hass.callApi('GET', url).then(
|
||||||
function (stateHistory) {
|
function (stateHistory) {
|
||||||
return computeHistory(stateHistory, Date.now());
|
return computeHistory(stateHistory);
|
||||||
},
|
},
|
||||||
function () {
|
function () {
|
||||||
RECENT_CACHE[entityId] = false;
|
RECENT_CACHE[entityId] = false;
|
||||||
@ -166,7 +158,7 @@
|
|||||||
if (!DATE_CACHE[filter]) {
|
if (!DATE_CACHE[filter]) {
|
||||||
DATE_CACHE[filter] = this.hass.callApi('GET', 'history/period/' + filter).then(
|
DATE_CACHE[filter] = this.hass.callApi('GET', 'history/period/' + filter).then(
|
||||||
function (stateHistory) {
|
function (stateHistory) {
|
||||||
return computeHistory(stateHistory, endTime);
|
return computeHistory(stateHistory);
|
||||||
},
|
},
|
||||||
function () {
|
function () {
|
||||||
DATE_CACHE[filter] = false;
|
DATE_CACHE[filter] = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user