|
@@ -9,13 +9,18 @@ class TimeCorrelation:
|
|
def __init__(self, parent):
|
|
def __init__(self, parent):
|
|
self.state = {}
|
|
self.state = {}
|
|
self.timestamp = None
|
|
self.timestamp = None
|
|
|
|
+ self.old_values = []
|
|
|
|
|
|
def execute(self, values: list):
|
|
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 = []
|
|
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
|
|
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")
|
|
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:
|
|
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_480v = self.state.get("Measurement480v", None),
|
|
measurement_plant = self.state.get("CompactLogixState", None) or self.state.get("S7State", 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
|
|
return results
|