class EnvSensor(): def __init__(self, config): self.data = Data() self.config = config self.instrument_class = 'env_sensor' self.name = config['instrument_name'] server_address = (config['interface_config']['host'], config['interface_config']['port']) self.iface = TCPInterface(server_address, self.data) self.iface.start() df_config = { 'base_path': config['datafile_config']['base_path'], 'instrument_class': self.instrument_class, 'instrument_name': self.name, 'write_freq': config['datafile_config']['write_freq'], } self.data_file = DataFile(df_config) self.out_dt = '' self.out_data = {} #self.data = None self.task_list = [] def start(self): print("Starting EnvSensor") #self.attempt_connect = True task = asyncio.ensure_future(self.read_loop()) self.task_list.append(task) self.is_running = True def stop(self): self.iface.stop() #tasks = asyncio.Task.all_tasks() for t in self.task_list: # print('stop:') # print(t) t.cancel() self.task_list.remove(t) # tasks.remove(t) self.is_running = False self.attempt_connect = False async def read_loop(self): last_read = datetime.now() # print(last_read) while True: # print(self.iface.has_data()) if (self.iface.has_data()): # print('here') buffer = self.iface.read()[0] # print(buffer) # print('here2') dt = buffer['DateTime'] # print(dt) #buf = buffer['Data'] # print(buf) # print(buffer['Data']['RH']['value']) # print(buffer['Data']['RH']) buf = buffer['InstrumentData'] # print(buf) meas_list = buf['METADATA']['MeasurementList'] # print(meas_list) self.out_dt = dt #dat = {} out = '' for meas in meas_list: value = buf['DATA'][meas]['value'] units = buf['DATA'][meas]['units'] self.out_data[meas] = { 'value': buf['DATA'][meas]['value'], 'units': buf['DATA'][meas]['units'], } # print(meas) # print(dat) # print(self.out_data) # print(type(value)) # print(units) out += ' {}={:.2f}{}'.format(meas, value, units) # print(out) #t = buffer['Data']['Temperature']['value'] #rh = buffer['Data']['RH']['value'] # print(rh) #print('[{}] -- {} : T={}C, RH={}%'.format(self.name,dt,t,rh)) #print('[{}] -- {} : {}'.format(self.name,dt,out)) self.data_file.append(buffer) last_read = datetime.now() # print(last_read) #buffer = data.get() #print('buffer : ' + buffer) # print('read_buffer:') # print(buffer) delta = (datetime.now() - last_read).total_seconds() # print(delta) if delta > 5.0: self.out_dt = '' self.out_data = {} # pass await asyncio.sleep(0.1)