コード例 #1
0
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')
コード例 #2
0
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()