def print_to_console(file_name, device_map, integral_array, integration_period, device_cate_map): # Each Device and state print("\nDevice Info:") with open(file_name, 'r') as i_file: # ignore sample rate line i_file.readline() # parse device_name,state,sequence for line in i_file: info = line.rstrip().split(',') device, state, i_string = info[0], info[1], info[2] state_np = np.array(list(i_string), dtype=float) # total entered period and the whole day day_p = sum(state_np) / 86400 * 100 enter_p = sum(state_np) / len(state_np) * 100 energy = make_integral_array( (state_np * device_map[device][state]['power']), integration_period)[-1] print( f'Device Name: {device:<50s}\t\tState: {state:<20s} Taken Entered Period: {enter_p:>7.3f}%\tTaken Whole Day Period: {day_p:>7.3f}%\tDaily Usage: {energy:>8.2f} Wh' ) # Total Usage print('\nDaily Energy Usage:') for device_name in device_cate_map: power = make_integral_array(device_cate_map[device_name]['power'], integration_period) print(f"Device:\t\t{device_name:<50s} {power[-1]:>8.3f} Wh") # Output total energy used per device print(f'Total : {integral_array[-1]:>63.3f} Wh')
def analyze_data(file_name: str, integration_period: int, device_map: dict, profile_id: str, batch_file_name: str): OUTPUT_FOLDER = 'simulationfiles/calculationoutputs/' + batch_file_name.split( '.')[0] + OUTPUT_TIME #Error Handling: File Exist file_location = file_name exist_flag = Path(file_location) if exist_flag.exists() == False: print("Error: CSV File does not exist") print("Program Quit") sys.exit(1) #Error Handling: File Parsing try: # {device_name:{cate:[np array of value]}} device_cate_map = parse_inputfile(file_name, device_map) except: print("Error: Unable to parse CSV file") print("Program Quit") sys.exit(1) # Total Power Array total_power_array = None for device in device_cate_map: total_power_array = device_cate_map[device]['power'] \ if total_power_array is None\ else total_power_array+device_cate_map[device]['power'] # Integral Array, Energy Consumption Array integral_array = make_integral_array(total_power_array, integration_period) # Total Power and Total Energy #make_power_graph(total_power_array, integration_period, 'Time (hr)', 'Power (W)', 'Total Power Consumed','power',1, sub=(1,2,1)) #make_power_graph(integral_array, integration_period, 'Time (hr)', 'Energy (WHr)', 'Total Energy Used','Energy',1, sub=(1,2,2)) # add up default power array graph_row = f'{1+1+len(ENABLED_LIST)}' graph_col = f'{len(device_cate_map)}' counter = 0 for util in ['power'] + ['energy'] + ENABLED_LIST: for device_name in device_cate_map: counter += 1 # to make sure only bottom graph has x label if counter <= int(graph_row) * int(graph_col) - len( device_cate_map): if util == 'power': make_power_graph(device_cate_map[device_name][util], \ integration_period, \ '', \ util, \ f'{device_name}', \ 'power',\ 2, \ sub=(graph_row,graph_col,int(f'{counter}'))) elif util == 'energy': make_power_graph(make_integral_array(device_cate_map[device_name]['power'], integration_period), \ integration_period, \ '', \ 'Energy (WHr)', \ '', \ 'Energy',\ 2, \ sub=(graph_row,graph_col,int(f'{counter}'))) else: make_graph(device_cate_map[device_name][util],\ integration_period,\ '',\ util,\ '',\ 2,\ sub=(graph_row,graph_col,int(f'{counter}'))) else: make_graph(device_cate_map[device_name][util], \ integration_period, \ 'Time (hr)', \ util, \ '', \ 2, \ sub=(graph_row,graph_col,int(f'{counter}'))) # write to csv if not os.path.exists(OUTPUT_FOLDER): os.mkdir(OUTPUT_FOLDER) write_to_csv(OUTPUT_FOLDER + '/' + profile_id + OUTPUT_CSV, integration_period, device_cate_map) # print to console print_to_console(file_name, device_map, integral_array, integration_period, device_cate_map) # show graphs #show_graph() save_graph(OUTPUT_FOLDER, profile_id, batch_file_name, True) reset()