def __init__(self, messenger: Messenger, node_name='data_collector', file_header='sys_id_data', data_collect_period=1.0, create_new_log=True, log_save_freq=2.0, logger_sleep_time=0.01, **variables): super(Data_Collector_Node, self).__init__(messenger, node_name=node_name) # defining the input variables for var_name, var in variables.items(): if isinstance(var, Var): self.in_var[var_name] = var else: raise TypeError("Variables must be of Var type!") self.data_collect_period = data_collect_period # setting up the data collector log_dir_path = os.path.join(os.getcwd(), 'data_log') # create new entry folder if creating new log if create_new_log or not os.path.exists(log_dir_path): latest_log_dir = None # add a new session folder if continuing from old log else: # use the latest data log all_log_dir = [] for dir in os.listdir(log_dir_path): dir_path = os.path.join(log_dir_path, dir) if os.path.isdir(dir_path): all_log_dir.append(dir_path) if len(all_log_dir) > 0: latest_log_dir = max(all_log_dir, key=os.path.getmtime) else: latest_log_dir = None # create the data_collector self.data_collect = DataLogger(log_dir=log_dir_path, log_header=file_header, log_path=latest_log_dir, sleep_time=logger_sleep_time, save_freq=log_save_freq)
class Data_Collector_Node(Node): def __init__(self, messenger: Messenger, node_name='data_collector', file_header='sys_id_data', data_collect_period=1.0, create_new_log=True, log_save_freq=2.0, logger_sleep_time=0.01, **variables): super(Data_Collector_Node, self).__init__(messenger, node_name=node_name) # defining the input variables for var_name, var in variables.items(): if isinstance(var, Var): self.in_var[var_name] = var else: raise TypeError("Variables must be of Var type!") self.data_collect_period = data_collect_period # setting up the data collector log_dir_path = os.path.join(os.getcwd(), 'data_log') # create new entry folder if creating new log if create_new_log or not os.path.exists(log_dir_path): latest_log_dir = None # add a new session folder if continuing from old log else: # use the latest data log all_log_dir = [] for dir in os.listdir(log_dir_path): dir_path = os.path.join(log_dir_path, dir) if os.path.isdir(dir_path): all_log_dir.append(dir_path) if len(all_log_dir) > 0: latest_log_dir = max(all_log_dir, key=os.path.getmtime) else: latest_log_dir = None # create the data_collector self.data_collect = DataLogger(log_dir=log_dir_path, log_header=file_header, log_path=latest_log_dir, sleep_time=logger_sleep_time, save_freq=log_save_freq) def run(self): self.data_collect.start() loop_count = 0 while self.alive: loop_count += 1 data_packets = defaultdict(OrderedDict) for var_name, var in self.in_var.items(): var_split = var_name.split('.') teensy_name = var_split[0] device_name = var_split[1] point_name = var_split[2] data_packets['%s.%s' % (teensy_name, device_name)][point_name] = copy(var.val) for packet_name, data_packet in data_packets.items(): data_packet['packet_time'] = perf_counter() data_packet['step'] = loop_count self.data_collect.append_data_packet(packet_name, data_packet) sleep(max(self.messenger.estimated_msg_period*2, self.data_collect_period)) self.data_collect.end_data_collection() self.data_collect.join()