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 import numpy as np import scipy.io class TracerTask(ATask): def __init__(self, sensor: ATemperatureSensor, heater: AHeater, temp_ctrl: APid, interval, msg_handler: MsgIo): ATask.__init__(self, interval) self.msg_handler = msg_handler msg_handler.set_recv_handler(self.recv) self.sensor = sensor self.heater = heater self.temp_ctrl = temp_ctrl 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) filename = "brewpi." + time.strftime("%Y%m%d%H%M%S", time.localtime()) + ".mat" while True: _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('brewpi.mat', data) scipy.io.savemat(filename, data) timestamp += 1 await asyncio.sleep(self.interval)