lib/openstudio/extension/core/CreateResults.rb in openstudio-extension-0.1.6 vs lib/openstudio/extension/core/CreateResults.rb in openstudio-extension-0.2.0

- old
+ new

@@ -43,37 +43,19 @@ # @param start_day [Integer] the start day for the peak demand window # @param start_hr [Integer] the start hour for the peak demand window, using 24-hr clock # @param end_mo [String] the end month for the peak demand window # @param end_day [Integer] the end day for the peak demand window # @param end_hr [Integer] the end hour for the peak demand window, using 24-hr clock - # @param electricity_consumption_tou_periods [Array<Hash>] optional array of hashes to add - # time-of-use electricity consumption values to the annual consumption information. - # Periods may overlap, but should be listed in the order in which they must be checked, - # where the value will be assigned to the first encountered period it falls into. - # An example hash looks like this: - # { - # 'tou_name' => 'system_peak', - # 'tou_id' => 1, - # 'skip_weekends' => true, - # 'skip_holidays' => true, - # 'start_mo' => 'July', - # 'start_day' => 1, - # 'start_hr' => 14, - # 'end_mo' => 'August', - # 'end_day' => 31, - # 'end_hr' => 18 - # } # @return [OpenStudio::AttributeVector] a vector of results needed by EDAPT def create_results(skip_weekends = true, skip_holidays = true, start_mo = 'June', start_day = 1, start_hr = 14, end_mo = 'September', end_day = 30, - end_hr = 18, - electricity_consumption_tou_periods = []) + end_hr = 18) # get the current version of OS being used to determine if sql query # changes are needed (for when E+ changes). os_version = OpenStudio::VersionString.new(OpenStudio.openStudioVersion) @@ -513,87 +495,10 @@ @runner.registerError('Peak Demand timeseries (Electricity:Facility at zone timestep) could not be found, cannot determine the informatino needed to calculate savings or incentives.') demand_elems << OpenStudio::Attribute.new('electricity_peak_demand', 0.0, 'kW') @runner.registerValue('annual_demand_electricity_peak_demand', 0.0, 'kW') end - # Describe the TOU periods - electricity_consumption_tou_periods.each do |tou_pd| - @runner.registerInfo("TOU period #{tou_pd['tou_id']} represents #{tou_pd['tou_name']} and covers #{tou_pd['start_mo']}-#{tou_pd['start_day']} to #{tou_pd['end_mo']}-#{tou_pd['end_day']} from #{tou_pd['start_hr']} to #{tou_pd['end_hr']}, skip weekends = #{tou_pd['skip_weekends']}, skip holidays = #{tou_pd['skip_holidays']}") - end - - # electricity time-of-use periods - elec = @sql.timeSeries(ann_env_pd, 'Zone Timestep', 'Electricity:Facility', '') - if elec.is_initialized && day_types - elec = elec.get - # Put timeseries into array - elec_vals = [] - ann_elec_vals = elec.values - for i in 0..(ann_elec_vals.size - 1) - elec_vals << ann_elec_vals[i] - end - - # Put values into array - elec_times = [] - ann_elec_times = elec.dateTimes - for i in 0..(ann_elec_times.size - 1) - elec_times << ann_elec_times[i] - end - - # Loop through the time/value pairs and find the peak - # excluding the times outside of the Xcel peak demand window - electricity_tou_vals = Hash.new(0) - elec_times.zip(elec_vals).each_with_index do |vs, ind| - date_time = vs[0] - joules = vs[1] - day_type = day_types[ind] - time = date_time.time - date = date_time.date - - # puts("#{val_kW}kW; #{date}; #{time}; #{day_of_week.valueName}") - - # Determine which TOU period this hour falls into - tou_period_assigned = false - electricity_consumption_tou_periods.each do |tou_pd| - pd_start_date = OpenStudio::DateTime.new(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(tou_pd['start_mo']), tou_pd['start_day'], timeseries_yr), OpenStudio::Time.new(0, 0, 0, 0)) - pd_end_date = OpenStudio::DateTime.new(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(tou_pd['end_mo']), tou_pd['end_day'], timeseries_yr), OpenStudio::Time.new(0, 24, 0, 0)) - pd_start_time = OpenStudio::Time.new(0, tou_pd['start_hr'], 0, 0) - pd_end_time = OpenStudio::Time.new(0, tou_pd['end_hr'], 0, 0) - # Skip times outside of the correct months - next if date_time < pd_start_date || date_time > pd_end_date - # Skip times before some time and after another time - next if time < pd_start_time || time > pd_end_time - # Skip weekends if asked - if tou_pd['skip_weekends'] - # Sunday = 1, Saturday = 7 - next if day_type == 1 || day_type == 7 - end - # Skip holidays if asked - if tou_pd['skip_holidays'] - # Holiday = 8 - next if day_type == 8 - end - # If here, this hour falls into the specified period - tou_period_assigned = true - electricity_tou_vals[tou_pd['tou_id']] += joules - break - end - # Ensure that the value fell into a period - unless tou_period_assigned - @runner.registerError("Did not find a TOU period covering #{time} on #{date}, kWh will not be included in any TOU period.") - end - end - # Register values for any time-of-use period with kWh - electricity_tou_vals.each do |tou_pd_id, joules_in_pd| - gj_in_pd = OpenStudio.convert(joules_in_pd, 'J', 'GJ').get - kwh_in_pd = OpenStudio.convert(joules_in_pd, 'J', 'kWh').get - @runner.registerValue("annual_consumption_electricity_tou_#{tou_pd_id}", gj_in_pd, 'GJ') - @runner.registerInfo("TOU period #{tou_pd_id} annual electricity consumption = #{kwh_in_pd} kWh.") - end - else - @runner.registerError('Electricity timeseries (Electricity:Facility at zone timestep) could not be found, cannot determine the information needed to calculate savings or incentives.') - end - # electricity_annual_avg_peak_demand val = @sql.electricityTotalEndUses if val.is_initialized ann_elec_gj = OpenStudio::Quantity.new(val.get, gigajoule_unit) ann_hrs = OpenStudio::Quantity.new(hrs_sim, hrs_unit) @@ -678,91 +583,9 @@ @runner.registerValue('annual_demand_district_cooling_peak_demand', district_cooling_peak_demand, 'kW') @runner.registerInfo("District Cooling Peak Demand = #{district_cooling_peak_demand.round(2)}kW on #{ann_dist_clg_peak_demand_time}") else demand_elems << OpenStudio::Attribute.new('district_cooling_peak_demand', 0.0, 'kW') @runner.registerValue('annual_demand_district_cooling_peak_demand', 0.0, 'kW') - end - - # district cooling time-of-use periods - dist_clg = @sql.timeSeries(ann_env_pd, 'Zone Timestep', 'DistrictCooling:Facility', '') - if dist_clg.is_initialized && day_types - dist_clg = dist_clg.get - # Put timeseries into array - dist_clg_vals = [] - ann_dist_clg_vals = dist_clg.values - for i in 0..(ann_dist_clg_vals.size - 1) - dist_clg_vals << ann_dist_clg_vals[i] - end - - # Put values into array - dist_clg_times = [] - ann_dist_clg_times = dist_clg.dateTimes - for i in 0..(ann_dist_clg_times.size - 1) - dist_clg_times << ann_dist_clg_times[i] - end - - # Loop through the time/value pairs and find the peak - # excluding the times outside of the Xcel peak demand window - dist_clg_tou_vals = Hash.new(0) - dist_clg_times.zip(dist_clg_vals).each_with_index do |vs, ind| - date_time = vs[0] - joules = vs[1] - day_type = day_types[ind] - time = date_time.time - date = date_time.date - - # puts("#{val_kW}kW; #{date}; #{time}; #{day_of_week.valueName}") - - # Determine which TOU period this hour falls into - tou_period_assigned = false - electricity_consumption_tou_periods.each do |tou_pd| - pd_start_date = OpenStudio::DateTime.new(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(tou_pd['start_mo']), tou_pd['start_day'], timeseries_yr), OpenStudio::Time.new(0, 0, 0, 0)) - pd_end_date = OpenStudio::DateTime.new(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(tou_pd['end_mo']), tou_pd['end_day'], timeseries_yr), OpenStudio::Time.new(0, 24, 0, 0)) - pd_start_time = OpenStudio::Time.new(0, tou_pd['start_hr'], 0, 0) - pd_end_time = OpenStudio::Time.new(0, tou_pd['end_hr'], 0, 0) - # Skip times outside of the correct months - next if date_time < pd_start_date || date_time > pd_end_date - # Skip times before some time and after another time - next if time < pd_start_time || time > pd_end_time - # Skip weekends if asked - if tou_pd['skip_weekends'] - # Sunday = 1, Saturday = 7 - next if day_type == 1 || day_type == 7 - end - # Skip holidays if asked - if tou_pd['skip_holidays'] - # Holiday = 8 - next if day_type == 8 - end - # If here, this hour falls into the specified period - tou_period_assigned = true - dist_clg_tou_vals[tou_pd['tou_id']] += joules - break - end - # Ensure that the value fell into a period - unless tou_period_assigned - @runner.registerError("Did not find a TOU period covering #{time} on #{date}, kWh will not be included in any TOU period.") - end - end - # Register values for any time-of-use period with kWh - dist_clg_tou_vals.each do |tou_pd_id, joules_in_pd| - gj_in_pd = OpenStudio.convert(joules_in_pd, 'J', 'GJ').get - kwh_in_pd = OpenStudio.convert(joules_in_pd, 'J', 'kWh').get - @runner.registerValue("annual_consumption_district_cooling_tou_#{tou_pd_id}", gj_in_pd, 'GJ') - @runner.registerInfo("TOU period #{tou_pd_id} annual district cooling consumption = #{kwh_in_pd} kWh.") - end - else - # If TOU periods were specified but this model has no district cooling, report zeroes - if electricity_consumption_tou_periods.size > 0 - # Get the TOU ids - tou_ids = [] - electricity_consumption_tou_periods.each do |tou_pd| - tou_ids << tou_pd['tou_id'] - end - tou_ids.uniq.each do |tou_id| - @runner.registerValue("annual_consumption_district_cooling_tou_#{tou_id}", 0.0, 'GJ') - end - end end else @runner.registerError('Could not find an annual run period') return OpenStudio::Attribute.new('report', result_elems)