OlliTut/plot_data.py
2021-08-10 23:51:50 +02:00

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
"""