import logging from datetime import timedelta from structures.correlated import CorrelatedMeasurements logger = logging.getLogger(__name__) class TimeCorrelation: def __init__(self, parent): self.state = {} self.timestamp = None def execute(self, values: list): results = [] for i, measurement in enumerate(values): self.state[type(measurement).__name__] = measurement if self.timestamp and self.timestamp > measurement.timestamp + timedelta(milliseconds=100): 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: continue self.timestamp = measurement.timestamp results.append(CorrelatedMeasurements( timestamp = measurement.timestamp, source = ','.join([x.source for x in self.state.values()]), measurement_24v = self.state.get("Measurement24v", None), measurement_480v = self.state.get("Measurement480v", None), measurement_plant = self.state.get("CompactLogixState", None) or self.state.get("S7State", None) )) return results