time_correlation.py 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. import logging
  2. from datetime import timedelta
  3. from structures.correlated import CorrelatedMeasurements
  4. logger = logging.getLogger(__name__)
  5. class TimeCorrelation:
  6. def __init__(self, parent):
  7. self.state = {}
  8. self.timestamp = None
  9. def execute(self, values: list):
  10. results = []
  11. for i, measurement in enumerate(values):
  12. self.state[type(measurement).__name__] = measurement
  13. if self.timestamp and self.timestamp > measurement.timestamp + timedelta(milliseconds=100):
  14. logger.error(f"Timestamps are not in order: {measurement.series} is {self.timestamp - measurement.timestamp} to late")
  15. if len(values) > i+1 and values[i+1].timestamp == measurement.timestamp:
  16. continue
  17. self.timestamp = measurement.timestamp
  18. results.append(CorrelatedMeasurements(
  19. timestamp = measurement.timestamp,
  20. source = ','.join([x.source for x in self.state.values()]),
  21. measurement_24v = self.state.get("Measurement24v", None),
  22. measurement_480v = self.state.get("Measurement480v", None),
  23. measurement_plant = self.state.get("CompactLogixState", None) or self.state.get("S7State", None)
  24. ))
  25. return results