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)