67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
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
|
|
"""
|