From 41eb9f2a0c18fd2273bbf8bba533263f3eebb556 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 21 Sep 2022 22:49:17 +0200 Subject: [PATCH] Another fix for the energy tooltips --- libnymea-app/energy/energylogs.cpp | 2 ++ .../ui/mainviews/energy/ConsumersHistory.qml | 27 +++++++++++++-- .../ui/mainviews/energy/PowerBalanceStats.qml | 3 +- .../energy/PowerConsumptionBalanceHistory.qml | 34 +++++++++++++++---- .../energy/PowerProductionBalanceHistory.qml | 28 +++++++++++++-- 5 files changed, 81 insertions(+), 13 deletions(-) diff --git a/libnymea-app/energy/energylogs.cpp b/libnymea-app/energy/energylogs.cpp index 897ccd36..04be6629 100644 --- a/libnymea-app/energy/energylogs.cpp +++ b/libnymea-app/energy/energylogs.cpp @@ -193,8 +193,10 @@ EnergyLogEntry *EnergyLogs::find(const QDateTime ×tamp) int index = qRound(1.0 * first.secsTo(timestamp) / (m_sampleRate * 60)); if (index < 0 || index >= m_list.count()) { +// qWarning() << "finding:" << timestamp << index << first.toString() << "NOT FOUND" << m_list.last()->timestamp(); return nullptr; } +// qWarning() << "finding:" << timestamp << index << first.toString() << m_list.at(index)->timestamp(); return m_list.at(index); } diff --git a/nymea-app/ui/mainviews/energy/ConsumersHistory.qml b/nymea-app/ui/mainviews/energy/ConsumersHistory.qml index e6419c51..89a7ccf1 100644 --- a/nymea-app/ui/mainviews/energy/ConsumersHistory.qml +++ b/nymea-app/ui/mainviews/energy/ConsumersHistory.qml @@ -58,16 +58,37 @@ Item { readonly property int visibleValues: range / sampleRate readonly property var startTime: { - var date = new Date(now); + var date = new Date(fixTime(now)); date.setTime(date.getTime() - range * 60000 + 2000); return date; } readonly property var endTime: { - var date = new Date(now); + var date = new Date(fixTime(now)); date.setTime(date.getTime() + 2000) return date; } + + function fixTime(timestamp) { + switch (sampleRate) { + case EnergyLogs.SampleRate1Min: + timestamp.setSeconds(0, 0) + break; + case EnergyLogs.SampleRate15Mins: + timestamp.setMinutes(timestamp.getMinutes() - timestamp.getMinutes() % 15, 0, 0) + break; + case EnergyLogs.SampleRate1Hour: + timestamp.setMinutes(0, 0, 0); + break; + case EnergyLogs.SampleRate3Hours: + timestamp.setHours(timestamp.getHours() % 3, 0, 0, 0); + break; + case EnergyLogs.SampleRate1Day: + timestamp.setHours(0, 0, 0, 0) + break; + } + return timestamp + } } Component { @@ -564,7 +585,7 @@ Item { backgroundItem: chartView backgroundRect: Qt.rect(mouseArea.x + toolTip.x, mouseArea.y + toolTip.y, toolTip.width, toolTip.height) - property int idx: Math.min(d.visibleValues, Math.max(0, Math.ceil(mouseArea.mouseX * d.visibleValues / mouseArea.width))) + property int idx: Math.min(d.visibleValues, Math.max(0, Math.round(mouseArea.mouseX * d.visibleValues / mouseArea.width))) property var timestamp: new Date(Math.min(d.endTime.getTime(), Math.max(d.startTime, d.startTime.getTime() + (idx * d.sampleRate * 60000)))) property PowerBalanceLogEntry entry: powerBalanceLogs.find(timestamp) diff --git a/nymea-app/ui/mainviews/energy/PowerBalanceStats.qml b/nymea-app/ui/mainviews/energy/PowerBalanceStats.qml index 7b132449..3fe7ed75 100644 --- a/nymea-app/ui/mainviews/energy/PowerBalanceStats.qml +++ b/nymea-app/ui/mainviews/energy/PowerBalanceStats.qml @@ -273,7 +273,7 @@ StatsBase { function adjustMax(newValue) { if (max < newValue) { - print("adjusting to new max", newValue) +// print("adjusting to new max", newValue) max = newValue // Math.ceil(newValue / 100) * 100 } } @@ -457,6 +457,7 @@ StatsBase { property int idx: visible ? Math.min(d.config.count -1, Math.max(0, Math.ceil(mouseArea.mouseX * d.config.count / mouseArea.width) - 1)) : 0 property date timestamp: root.calculateTimestamp(d.config.startTime(), d.config.sampleRate, d.startOffset + idx) + onTimestampChanged: print("idx changed", idx, "timestamp", timestamp) visible: (mouseArea.containsMouse || mouseArea.tooltipping) && !mouseArea.dragging diff --git a/nymea-app/ui/mainviews/energy/PowerConsumptionBalanceHistory.qml b/nymea-app/ui/mainviews/energy/PowerConsumptionBalanceHistory.qml index 4e1a703c..5e3db999 100644 --- a/nymea-app/ui/mainviews/energy/PowerConsumptionBalanceHistory.qml +++ b/nymea-app/ui/mainviews/energy/PowerConsumptionBalanceHistory.qml @@ -31,18 +31,39 @@ Item { readonly property int visibleValues: range / sampleRate readonly property var startTime: { - var date = new Date(now); - date.setTime(date.getTime() - (range * 60 * 1000) + 2000); + var date = new Date(fixTime(now)); + date.setTime(date.getTime() - (range * 60 * 1000)); print("setting starttime to", date, range) return date; } readonly property var endTime: { - var date = new Date(now); - date.setTime(date.getTime() + 2000) + var date = new Date(fixTime(now)); + date.setTime(date.getTime()) print("setting endtime to", date, range) return date; } + + function fixTime(timestamp) { + switch (sampleRate) { + case EnergyLogs.SampleRate1Min: + timestamp.setSeconds(0, 0) + break; + case EnergyLogs.SampleRate15Mins: + timestamp.setMinutes(timestamp.getMinutes() - timestamp.getMinutes() % 15, 0, 0) + break; + case EnergyLogs.SampleRate1Hour: + timestamp.setMinutes(0, 0, 0); + break; + case EnergyLogs.SampleRate3Hours: + timestamp.setHours(timestamp.getHours() % 3, 0, 0, 0); + break; + case EnergyLogs.SampleRate1Day: + timestamp.setHours(0, 0, 0, 0) + break; + } + return timestamp + } } Connections { @@ -490,9 +511,10 @@ Item { backgroundItem: chartView backgroundRect: Qt.rect(mouseArea.x + toolTip.x, mouseArea.y + toolTip.y, toolTip.width, toolTip.height) - property int idx: Math.min(d.visibleValues, Math.max(0, Math.ceil(mouseArea.mouseX * d.visibleValues / mouseArea.width))) - property var timestamp: new Date(Math.min(d.endTime.getTime(), Math.max(d.startTime, d.startTime.getTime() + (idx * d.sampleRate * 60000)))) + property int idx: Math.min(d.visibleValues, Math.max(0, Math.round(mouseArea.mouseX * d.visibleValues / mouseArea.width))) + property var timestamp: new Date(Math.min(d.endTime.getTime(), Math.max(d.startTime.getTime(), d.startTime.getTime() + (idx * d.sampleRate * 60000)))) property PowerBalanceLogEntry entry: powerBalanceLogs.find(timestamp) +// onTimestampChanged: print("idx changed", idx, "timestamp", timestamp) property int xOnRight: Math.max(0, mouseArea.mouseX) + Style.smallMargins property int xOnLeft: Math.min(mouseArea.mouseX, mouseArea.width) - Style.smallMargins - width diff --git a/nymea-app/ui/mainviews/energy/PowerProductionBalanceHistory.qml b/nymea-app/ui/mainviews/energy/PowerProductionBalanceHistory.qml index 794c01f7..7064a652 100644 --- a/nymea-app/ui/mainviews/energy/PowerProductionBalanceHistory.qml +++ b/nymea-app/ui/mainviews/energy/PowerProductionBalanceHistory.qml @@ -31,16 +31,38 @@ Item { readonly property int visibleValues: range / sampleRate readonly property var startTime: { - var date = new Date(now); + var date = new Date(fixTime(now)); date.setTime(date.getTime() - range * 60000 + 2000); return date; } readonly property var endTime: { - var date = new Date(now); + var date = new Date(fixTime(now)); date.setTime(date.getTime() + 2000) return date; } + + function fixTime(timestamp) { + switch (sampleRate) { + case EnergyLogs.SampleRate1Min: + timestamp.setSeconds(0, 0) + break; + case EnergyLogs.SampleRate15Mins: + timestamp.setMinutes(timestamp.getMinutes() - timestamp.getMinutes() % 15, 0, 0) + break; + case EnergyLogs.SampleRate1Hour: + timestamp.setMinutes(0, 0, 0); + break; + case EnergyLogs.SampleRate3Hours: + timestamp.setHours(timestamp.getHours() % 3, 0, 0, 0); + break; + case EnergyLogs.SampleRate1Day: + timestamp.setHours(0, 0, 0, 0) + break; + } + return timestamp + } + } Connections { @@ -480,7 +502,7 @@ Item { backgroundItem: chartView backgroundRect: Qt.rect(mouseArea.x + toolTip.x, mouseArea.y + toolTip.y, toolTip.width, toolTip.height) - property int idx: Math.min(d.visibleValues, Math.max(0, Math.ceil(mouseArea.mouseX * d.visibleValues / mouseArea.width))) + property int idx: Math.min(d.visibleValues, Math.max(0, Math.round(mouseArea.mouseX * d.visibleValues / mouseArea.width))) property var timestamp: new Date(Math.min(d.endTime.getTime(), Math.max(d.startTime, d.startTime.getTime() + (idx * d.sampleRate * 60000)))) property PowerBalanceLogEntry entry: powerBalanceLogs.find(timestamp)