]> git.basschouten.com Git - openhab-addons.git/commitdiff
[rrd4j] Reuse the state for identical values (#16379)
authorjoerg1985 <16140691+joerg1985@users.noreply.github.com>
Thu, 8 Feb 2024 06:49:03 +0000 (07:49 +0100)
committerGitHub <noreply@github.com>
Thu, 8 Feb 2024 06:49:03 +0000 (07:49 +0100)
Signed-off-by: Jörg Sautter <joerg.sautter@gmx.net>
bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java

index 0fedb56922ff3b553fa6551045b7da66ff7993af..c8ee865a1cdd2856594bd2e6a270a5fb77a24337 100644 (file)
@@ -491,9 +491,21 @@ public class RRD4jPersistenceService implements QueryablePersistenceService {
             long ts = result.getFirstTimestamp();
             ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochSecond(ts), ZoneId.systemDefault());
             long step = result.getRowCount() > 1 ? result.getStep() : 0;
+
+            double prevValue = Double.NaN;
+            State prevState = null;
             for (double value : result.getValues(DATASOURCE_STATE)) {
                 if (!Double.isNaN(value) && (((ts >= start) && (ts <= end)) || (start == end))) {
-                    RRD4jItem rrd4jItem = new RRD4jItem(itemName, toState.apply(value), zdt);
+                    State state;
+
+                    if (prevValue == value) {
+                        state = prevState;
+                    } else {
+                        prevState = state = toState.apply(value);
+                        prevValue = value;
+                    }
+
+                    RRD4jItem rrd4jItem = new RRD4jItem(itemName, state, zdt);
                     items.add(rrd4jItem);
                 }
                 zdt = zdt.plusSeconds(step);