diff --git a/measurement.py b/measurement.py new file mode 100644 index 0000000..852e794 --- /dev/null +++ b/measurement.py @@ -0,0 +1,31 @@ +import os + + +class Measurement: + def __init__(self, name, sensors, path=None, comment=None): + self.name = name + self.path = os.path.join(path or "./meas_values", self.name) + os.makedirs(self.path) + self.save_version_text(comment) + + self.data_files = {} # sensor_name: file_handler + + def append_data(self, sensor_name, data): + """ + Save data from a sensor. Write it into the corresponding file. + + TODO: file size limit, zip? + data: list of tuples: (timestamp, value) + """ + if sensor_name not in self.data_files: + self.data_files[sensor_name] = open(os.path.join(self.path, f"{sensor_name}_data.csv")) + for timestamp, value in data: + self.data_files[sensor_name].write(f"{timestamp.isoformat()}, {timestamp.timestamp()}, {value}\n") + + def save_version_text(self, comment): + with open(os.path.join(self.path, "version.txt"), "w") as file: + file.write("Version 0.1\n") + if comment: + file.write(comment + "\n") + file.write("More descriptions of relevant parameters\n") + diff --git a/model.py b/model.py index 1a15544..3e2c421 100644 --- a/model.py +++ b/model.py @@ -5,13 +5,15 @@ Data: - dict with sensor data (temp, pressure, current) - dict with drivers (magnetic field control) """ -from sensor import Measurement +from sensor import Sensor class Model: def __init__(self): - self.sensors = {"temp": Measurement()} + self.sensors = {"temp": Sensor()} self.drivers = [] + self.measurement = None + self.plot_data = None pass def start_measuring(self): diff --git a/plot_data.py b/plot_data.py new file mode 100644 index 0000000..c47b480 --- /dev/null +++ b/plot_data.py @@ -0,0 +1,34 @@ +import numpy as np +from datetime import datetime + +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 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) + + for data_tuple in data: + self.queues[sensor_name].append(data_tuple) + + """ + TODO + while true + clean delte all to old values + for q in que: + if q is empty + return + update np array + """ + diff --git a/sensor.py b/sensor.py index ee5e95f..ca0e838 100644 --- a/sensor.py +++ b/sensor.py @@ -6,7 +6,7 @@ from queue import Queue from random import random -class MeasureWork(Thread): +class SensorWorker(Thread): """ Communicates with the measuring hardware. Here we only produce random data. """ def __init__(self, message_queue): @@ -29,15 +29,15 @@ class MeasureWork(Thread): sleep(1) -class Measurement(object): +class Sensor(object): """docstring for Model.""" def __init__(self): - super(Measurement, self).__init__() + super(Sensor, self).__init__() self.data = [] self.t = [] self.measureQueue = Queue() - self.measureThread = MeasureWork(self.measureQueue) + self.measureThread = SensorWorker(self.measureQueue) self.measureThread.start() def start_measuring(self):