import numpy as np from datetime import datetime, timedelta class PlotData(): def __init__(self): self.refresh_rate = 1 # ms self.timeout = 100 # cycles self.data = {"time": np.array([0])} self.start_time = datetime.utcnow() self.queues = {} def clear(self): for key in self.data: self.data[key] = np.array([]) def get(self, key): return self.data.get(key, np.full_like(self.data["time"], np.nan, dtype=np.double)) def append_data(self, sensor_name, data): """ """ if sensor_name not in self.data: self.queues[sensor_name] = [] self.data[sensor_name] = np.full_like(self.data["time"], np.nan, dtype=np.double) for time, dat in zip(data[0], data[1]): self.queues[sensor_name].append((time, dat)) running = True while running: # TODO timeout clean and time clean for sensor, que in self.queues.items(): index = -1 for time, _ in que: if time < self.start_time \ + timedelta(milliseconds=int(self.data["time"][-1]) + self.refresh_rate): index += 1 if index >= 0: self.queues[sensor] = que[index:] #TODO timeout not working as intended #if timeout is reached add empty values on sensors #if self.start_time + timedelta(milliseconds=int(self.data["time"][-1])+self.timeout) < datetime.utcnow(): # for sensor, que in self.queues.items(): # if len(que) == 0: # que.append((self.start_time,np.nan)) for que in self.queues.values(): if len(que) == 0: running = False return for sensor, que in self.queues.items(): self.data[sensor] = np.append(self.data[sensor], que[0][1]) self.queues[sensor] = que[1:] self.data["time"] = np.append(self.data["time"],self.data["time"][-1]+self.refresh_rate) """ TODO while true clean delte all to old values for q in que: if q is empty return update np array """