import time import asyncio from tasks import ATask from ws.message import MsgIo from components import ATemperatureSensor from components import AHeater from components import APid from tracer import Tracer import numpy as np import scipy.io import os class TracerTask(ATask): def __init__(self, sensor: ATemperatureSensor, heater: AHeater, temp_ctrl: APid, tracer: Tracer, interval, msg_handler: MsgIo, path= './logs'): ATask.__init__(self, interval) if not os.path.exists(path): os.makedirs(path) self.msg_handler = msg_handler msg_handler.set_recv_handler(self.recv) self.sensor = sensor self.heater = heater self.temp_ctrl = temp_ctrl self.tracer = tracer self.path = path async def recv(self, data): pass async def send(self, data): await self.msg_handler.send(data) async def on_process(self): print("{}: Started with interval {} s".format(self.msg_handler.get_key(), self.interval)) timestamp = 0 _timestamp = np.empty(0) _sensor_temp = np.empty(0) _heater_power = np.empty(0) _tc_temp_ist = np.empty(0) _tc_dtemp_ist = np.empty(0) _tc_temp_soll = np.empty(0) _tc_dtemp_soll = np.empty(0) _tc_dtemp_commanded = np.empty(0) name = 'brewpi' filename = os.path.join(self.path, '') + name + ".mat" filename_full = os.path.join(self.path, '') + name + "." + time.strftime("%Y%m%d%H%M%S", time.localtime()) + ".mat" while True: self.tracer.process() _timestamp = np.append(_timestamp, timestamp) _sensor_temp = np.append(_sensor_temp, self.sensor.temperature()) _heater_power = np.append(_heater_power, self.heater.get_power()) _tc_temp_ist = np.append(_tc_temp_ist, self.temp_ctrl.theta_ist) _tc_dtemp_ist = np.append(_tc_dtemp_ist, max(-1, self.temp_ctrl.heatrate_ist)) _tc_temp_soll = np.append(_tc_temp_soll, self.temp_ctrl.theta_soll_set) _tc_dtemp_soll = np.append(_tc_dtemp_soll, self.temp_ctrl.heatrate_soll_set) _tc_dtemp_commanded = np.append(_tc_dtemp_commanded, self.temp_ctrl.heatrate_soll) data = {'time': _timestamp, 'sensor_temp': _sensor_temp, 'heater_power': _heater_power, 'tc_temp_ist': _tc_temp_ist, 'tc_dtemp_ist': _tc_dtemp_ist, 'tc_temp_soll': _tc_temp_soll, 'tc_dtemp_soll': _tc_dtemp_soll, 'tc_dtemp_commanded': _tc_dtemp_commanded} scipy.io.savemat(filename, data) scipy.io.savemat(filename_full, data) timestamp += 1 await asyncio.sleep(self.interval)