From 8c6513f5cd3b7054f92d4405c3643a35ba5b0939 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Thu, 11 Feb 2021 23:43:48 +0100
Subject: [PATCH] #45 - SensorLineChartTile: refactored settings for warning
 for outdated values

---
 config/pageSettings-example.json              |  7 +++-
 src/logic/tile/tiles/SensorLineChartTile.html |  4 +--
 src/logic/tile/tiles/SensorLineChartTile.py   | 33 ++++++++++++++-----
 3 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/config/pageSettings-example.json b/config/pageSettings-example.json
index bb2e9b5..d957d27 100644
--- a/config/pageSettings-example.json
+++ b/config/pageSettings-example.json
@@ -18,7 +18,12 @@
                     "numberOfHoursToShow": 4,
                     "decimals": 1,
                     "lineColor": "rgba(254, 151, 0, 1)",
-                    "fillColor": "rgba(254, 151, 0, 0.2)"
+                    "fillColor": "rgba(254, 151, 0, 0.2)",
+                    "showAxes": false,
+                    "outdatedValueWarning": {
+                        "enable": false,
+                        "limitInSeconds": -1
+                    }
                 },
                 "x": 0,
                 "y": 0,
diff --git a/src/logic/tile/tiles/SensorLineChartTile.html b/src/logic/tile/tiles/SensorLineChartTile.html
index 4293a18..eac8c46 100644
--- a/src/logic/tile/tiles/SensorLineChartTile.html
+++ b/src/logic/tile/tiles/SensorLineChartTile.html
@@ -95,10 +95,10 @@
                     <div class="value">{{ latest }}{{ unit }}</div>
                 {% endif %}
             </div>
-            {% if timeAgo %}
+            {% if timeSinceLastValue %}
                 <div class="warning">
                     <i class="material-icons icon-warning">warning</i>
-                    <div class="warning-text">{{ timeAgo }}</div>
+                    <div class="warning-text">{{ timeSinceLastValue }}</div>
                 </div>
             {% endif %}
             <div class="header-right">
diff --git a/src/logic/tile/tiles/SensorLineChartTile.py b/src/logic/tile/tiles/SensorLineChartTile.py
index 48e3005..cef3315 100644
--- a/src/logic/tile/tiles/SensorLineChartTile.py
+++ b/src/logic/tile/tiles/SensorLineChartTile.py
@@ -32,7 +32,10 @@ class SensorLineChartTile(Tile):
         "lineColor": "rgba(254, 151, 0, 1)",
         "fillColor": "rgba(254, 151, 0, 0.2)",
         "showAxes": True,
-        "outdatedValueWarningLimitInSeconds": 300  # use -1 to disable warning
+        "outdatedValueWarning": {
+            "enable": False,
+            "limitInSeconds": 300
+        }
     }
 
     UNIT_BY_SENSOR_TYPE = {
@@ -176,13 +179,8 @@ class SensorLineChartTile(Tile):
             days = int(self._settings['numberOfHoursToShow'] / 24)
             title = f'{title} - {days} days'
 
-        now = datetime.now()
-        timeAgo = ''
-        outdatedValueWarningLimitInSeconds = self._settings['outdatedValueWarningLimitInSeconds']
-        if outdatedValueWarningLimitInSeconds > 0:
-            timeDifference = now - data['latestTime']
-            if timeDifference.total_seconds() > outdatedValueWarningLimitInSeconds:
-                timeAgo = format(timeDifference)
+        warningSettings = self._settings['outdatedValueWarning']
+        timeSinceLastValue = self.__get_time_since_last_value(warningSettings, data)
 
         return Tile.render_template(os.path.dirname(__file__), __class__.__name__,
                                     x=data['x'],
@@ -200,7 +198,24 @@ class SensorLineChartTile(Tile):
                                     ghostTraceX=data['ghostTraceX'],
                                     ghostTraceY=data['ghostTraceY'],
                                     showAxes=self._settings['showAxes'],
-                                    timeAgo=timeAgo)
+                                    timeSinceLastValue=timeSinceLastValue)
+
+    def __get_time_since_last_value(self, warningSettings: Dict, data):
+        timeAgo = ''
+
+        if not warningSettings['enable']:
+            return timeAgo
+
+        now = datetime.now()
+
+        limitInSeconds = warningSettings['limitInSeconds']
+
+        if limitInSeconds > 0:
+            timeDifference = now - data['latestTime']
+            if timeDifference.total_seconds() > limitInSeconds:
+                timeAgo = format(timeDifference)
+
+        return timeAgo
 
     def __format_date(self, dateTime: str):
         parsedDateTime = datetime.strptime(dateTime, self.DATE_FORMAT)
-- 
GitLab