def get_results_windows(sql_files): # set initial values that will be computed based on results total_floor_area, total_energy = 0, 0 end_uses = OrderedDict() # loop through the sql files in the directory and add the energy use for result_file in sql_files: # parse the SQL file sql_obj = SQLiteResult(result_file) # get the total floor area of the model area_dict = sql_obj.tabular_data_by_name('Building Area') areas = tuple(area_dict.values()) total_floor_area += areas[0][0] # get the energy use eui_dict = sql_obj.tabular_data_by_name('End Uses By Subcategory') for catgory, vals in eui_dict.items(): total_use = sum([val for val in vals[:12]]) if total_use != 0: total_energy += total_use cat, sub_cat = catgory.split(':') eu_cat = cat if sub_cat == 'General' or sub_cat == 'Other' else sub_cat try: end_uses[eu_cat] += total_use except KeyError: end_uses[eu_cat] = total_use # assemble all of the results into a final dictionary eui = round(total_energy / total_floor_area, 3) gross_floor = round(total_floor_area, 3) end_use_pairs = OrderedDict([(key, round(val / total_floor_area, 3)) for key, val in end_uses.items()]) return eui, gross_floor, end_use_pairs
def get_results_windows(sql_files): # set initial values that will be computed based on results total_floor_area, total_energy = 0, 0 all_uses = \ ('heating', 'cooling', 'interior_lighting', 'exterior_lighting', 'interior_equipment', 'exterior_equipment', 'fans', 'pumps', 'heat_rejection', 'humidification', 'heat_recovery', 'water_systems', 'refrigeration', 'generators') end_uses = OrderedDict() for use in all_uses: end_uses[use] = 0 # loop through the sql files in the directory and add the energy use for result_file in sql_files: # parse the SQL file sql_obj = SQLiteResult(result_file) # get the total floor area of the model area_dict = sql_obj.tabular_data_by_name('Building Area') areas = tuple(area_dict.values()) total_floor_area += areas[0][0] # get the energy use eui_dict = sql_obj.tabular_data_by_name('End Uses') euis = tuple(eui_dict.values()) total_energy += sum([val for val in euis[-2][:12]]) end_uses['heating'] += sum([val for val in euis[0][:12]]) end_uses['cooling'] += sum([val for val in euis[1][:12]]) end_uses['interior_lighting'] += sum([val for val in euis[2][:12]]) end_uses['exterior_lighting'] += sum([val for val in euis[3][:12]]) end_uses['interior_equipment'] += sum([val for val in euis[4][:12]]) end_uses['exterior_equipment'] += sum([val for val in euis[5][:12]]) end_uses['fans'] += sum([val for val in euis[6][:12]]) end_uses['pumps'] += sum([val for val in euis[7][:12]]) end_uses['heat_rejection'] += sum([val for val in euis[8][:12]]) end_uses['humidification'] += sum([val for val in euis[9][:12]]) end_uses['heat_recovery'] += sum([val for val in euis[10][:12]]) end_uses['water_systems'] += sum([val for val in euis[11][:12]]) end_uses['refrigeration'] += sum([val for val in euis[12][:12]]) end_uses['generators'] += sum([val for val in euis[13][:12]]) # assemble all of the results into a final dictionary eui = round(total_energy / total_floor_area, 3) gross_floor = round(total_floor_area, 3) end_use_pairs = OrderedDict([(key, round(val / total_floor_area, 3)) for key, val in end_uses.items() if val != 0]) return eui, gross_floor, end_use_pairs
def test_sqlite_tabular_data(): """Test the tabular_data_by_name method.""" sql_path = './tests/assets/sql/eplusout_monthly.sql' sql_obj = SQLiteResult(sql_path) data = sql_obj.tabular_data_by_name( 'Utility Use Per Conditioned Floor Area') assert len(data) == 4 assert len(data['Lighting']) == 6 col_names = sql_obj.tabular_column_names( 'Utility Use Per Conditioned Floor Area') assert len(col_names) == 6 assert 'Electricity Intensity' in col_names[0]
def tabular_data(result_sql, table_name, output_file): """Get all the data within a table of a Summary Report using the table name. \b Args: result_sql: Full path to an SQLite file that was generated by EnergyPlus. table_name: Text string for the name of a table within a summary report. (eg. 'General'). """ try: sql_obj = SQLiteResult(result_sql) table_dict = sql_obj.tabular_data_by_name(str(table_name)) output_file.write(json.dumps(list(table_dict.values()))) except Exception as e: _logger.exception('Failed to retrieve table data from sql file.\n{}'.format(e)) sys.exit(1) else: sys.exit(0)
def tabular_metadata(result_sql, table_name, output_file): """Get a dictionary with the names of a table's rows and columns. \b Args: result_sql: Full path to an SQLite file that was generated by EnergyPlus. table_name: Text string for the name of a table within a summary report. (eg. 'General'). """ try: sql_obj = SQLiteResult(result_sql) table_dict = sql_obj.tabular_data_by_name(str(table_name)) row_names = list(table_dict.keys()) col_names = sql_obj.tabular_column_names(str(table_name)) output_file.write(json.dumps( {'row_names': row_names, 'column_names': col_names})) except Exception as e: _logger.exception('Failed to retrieve table data from sql file.\n{}'.format(e)) sys.exit(1) else: sys.exit(0)
raise ImportError('\nFailed to import ladybug:\n\t{}'.format(e)) try: from honeybee.config import folders except ImportError as e: raise ImportError('\nFailed to import honeybee:\n\t{}'.format(e)) try: from ladybug_rhino.grasshopper import all_required_inputs, list_to_data_tree except ImportError as e: raise ImportError('\nFailed to import ladybug_rhino:\n\t{}'.format(e)) if all_required_inputs(ghenv.Component): if os.name == 'nt': # we are on windows; use IronPython like usual sql_obj = SQLiteResult(_sql) # create the SQL result parsing object results = sql_obj.tabular_data_by_name(_table_name) values = list_to_data_tree(list(results.values())) row_names = list(results.keys()) col_names = sql_obj.tabular_column_names(_table_name) else: # we are on Mac; sqlite3 module doesn't work in Mac IronPython # Execute the honybee CLI to obtain the results via CPython cmds = [ folders.python_exe_path, '-m', 'honeybee_energy', 'result', 'tabular-data', _sql, _table_name ] process = subprocess.Popen(cmds, stdout=subprocess.PIPE) stdout = process.communicate() results = json.loads(stdout[0]) values = list_to_data_tree(results) cmds = [
def energy_use_intensity(result_paths, si, output_file): """Get information about energy use intensity and an EUI breakdown by end use. \b Args: result_paths: Path to one or more SQLite files that were generated by EnergyPlus or folders containing such files. Folders can be from a single EnergyPlus simulation or may contain multiple SQLite files. EUI will be computed across all files provided. """ try: # set initial values that will be computed based on results total_floor_area, conditioned_floor_area, total_energy = 0, 0, 0 all_uses = \ ('heating', 'cooling', 'interior_lighting', 'exterior_lighting', 'interior_equipment', 'exterior_equipment', 'fans', 'pumps', 'heat_rejection', 'humidification', 'heat_recovery', 'water_systems', 'refrigeration', 'generators') end_uses = {} for use in all_uses: end_uses[use] = 0 # create a list of sql file path that were either passed directly or are # contained within passed folders sql_paths = [] for file_or_folder_path in result_paths: if os.path.isdir(file_or_folder_path): for file_path in os.listdir(file_or_folder_path): if file_path.endswith('.sql'): sql_paths.append(os.path.join(file_or_folder_path, file_path)) elif file_or_folder_path.endswith('.sql'): sql_paths.append(file_or_folder_path) # loop through the sql files and add the energy use for sql_path in sql_paths: # parse the SQL file sql_obj = SQLiteResult(sql_path) # get the total floor area of the model area_dict = sql_obj.tabular_data_by_name('Building Area') areas = tuple(area_dict.values()) total_floor_area += areas[0][0] conditioned_floor_area += areas[1][0] # get the energy use eui_dict = sql_obj.tabular_data_by_name('End Uses') euis = tuple(eui_dict.values()) total_energy += sum([val for val in euis[-2][:12]]) end_uses['heating'] += sum([val for val in euis[0][:12]]) end_uses['cooling'] += sum([val for val in euis[1][:12]]) end_uses['interior_lighting'] += sum([val for val in euis[2][:12]]) end_uses['exterior_lighting'] += sum([val for val in euis[3][:12]]) end_uses['interior_equipment'] += sum([val for val in euis[4][:12]]) end_uses['exterior_equipment'] += sum([val for val in euis[5][:12]]) end_uses['fans'] += sum([val for val in euis[6][:12]]) end_uses['pumps'] += sum([val for val in euis[7][:12]]) end_uses['heat_rejection'] += sum([val for val in euis[8][:12]]) end_uses['humidification'] += sum([val for val in euis[9][:12]]) end_uses['heat_recovery'] += sum([val for val in euis[10][:12]]) end_uses['water_systems'] += sum([val for val in euis[11][:12]]) end_uses['refrigeration'] += sum([val for val in euis[12][:12]]) end_uses['generators'] += sum([val for val in euis[13][:12]]) # assemble all of the results into a final dictionary result_dict = { 'eui': round(total_energy / total_floor_area, 3), 'total_floor_area': total_floor_area, 'conditioned_floor_area': conditioned_floor_area, 'total_energy': round(total_energy, 3) } result_dict['end_uses'] = {key: round(val / total_floor_area, 3) for key, val in end_uses.items() if val != 0} # convert data to IP if requested if not si: eui_typ, a_typ, e_typ = EnergyIntensity(), Area(), Energy() result_dict['eui'] = \ round(eui_typ.to_ip([result_dict['eui']], 'kWh/m2')[0][0], 3) result_dict['total_floor_area'] = \ round(a_typ.to_ip([result_dict['total_floor_area']], 'm2')[0][0], 3) result_dict['conditioned_floor_area'] = \ round(a_typ.to_ip( [result_dict['conditioned_floor_area']], 'm2')[0][0], 3) result_dict['total_energy'] = \ round(e_typ.to_ip([result_dict['total_energy']], 'kWh')[0][0], 3) result_dict['end_uses'] = \ {key: round(eui_typ.to_ip([val], 'kWh/m2')[0][0], 3) for key, val in result_dict['end_uses'].items()} # write everthing into the output file output_file.write(json.dumps(result_dict, indent=4)) except Exception as e: _logger.exception('Failed to compute EUI from sql files.\n{}'.format(e)) sys.exit(1) else: sys.exit(0)