Browse Source

fix correlation edge case

subDesTagesMitExtraKaese 2 years ago
parent
commit
c1ae8a02fb
1 changed files with 10 additions and 2 deletions
  1. 10 2
      box-pc/plc-connector/middlewares/time_correlation.py

+ 10 - 2
box-pc/plc-connector/middlewares/time_correlation.py

@@ -9,13 +9,18 @@ class TimeCorrelation:
   def __init__(self, parent):
     self.state = {}
     self.timestamp = None
+    self.old_values = []
 
   def execute(self, values: list):
+    # combine new values with old values and sort them by timestamp and series
+    values = sorted(self.old_values + values, key=lambda x: (x.timestamp, x.series))
+
     results = []
-    for i, measurement in enumerate(values):
+    # iterate over old values
+    for i, measurement in enumerate(values[:len(self.old_values)]):
       self.state[type(measurement).__name__] = measurement
 
-      if self.timestamp and self.timestamp > measurement.timestamp + timedelta(milliseconds=100):
+      if self.timestamp and self.timestamp > measurement.timestamp:
         logger.error(f"Timestamps are not in order: {measurement.series} is {self.timestamp - measurement.timestamp} to late")
       
       if len(values) > i+1 and values[i+1].timestamp == measurement.timestamp:
@@ -29,4 +34,7 @@ class TimeCorrelation:
         measurement_480v = self.state.get("Measurement480v", None),
         measurement_plant = self.state.get("CompactLogixState", None) or self.state.get("S7State", None)
       ))
+
+    # store new values for next iteration
+    self.old_values = values[len(self.old_values):]
     return results