Class: URBANopt::Reporting::DefaultReports::ReportingPeriod

Inherits:
Object
  • Object
show all
Defined in:
lib/urbanopt/reporting/default_reports/reporting_period.rb

Overview

ReportingPeriod includes all the results of a specific reporting period.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash = {}) ⇒ ReportingPeriod

ReportingPeriod class initializes the reporting period attributes: :id , :name , :multiplier , :start_date , :end_date , :month , :day_of_month , :year , :total_site_energy_kwh , :total_source_energy_kwh , :site_EUI_kwh_per_m2, :site_EUI_kbtu_per_ft2, :source_EUI_kwh_per_m2, :source_EUI_kbtu_per_ft2, :net_site_energy_kwh , :net_source_energy_kwh , :total_utility_cost_dollar , :net_utility_cost_dollar , :utility_costs_dollar , :electricity_kwh , :natural_gas_kwh , :propane_kwh , :fuel_oil_kwh , :other_fuels_kwh , :district_cooling_kwh , :district_heating_kwh , :water_qbft , :electricity_produced_kwh , :end_uses , :energy_production_kwh , :photovoltaic_kwh , :fuel_type , :total_cost_dollar , :usage_cost_dollar , :demand_cost_dollar , :comfort_result , :time_setpoint_not_met_during_occupied_cooling , :time_setpoint_not_met_during_occupied_heating , :time_setpoint_not_met_during_occupied_hours , :hours_out_of_comfort_bounds_PMV , :hours_out_of_comfort_bounds_PPD , :emissions, :future_annual_emissions_mt, :future_hourly_emissions_mt, :historical_annual_emissions_mt, :historical_hourly_emissions_mt, :future_annual_emissions_intensity_kg_per_ft2, :future_hourly_emissions_intensity_kg_per_ft2, :historical_annual_emissions_intensity_kg_per_ft2, :historical_hourly_emissions_intensity_kg_per_ft2

parameters:

hash - Hash - A hash which may contain a deserialized reporting_period.



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 76

def initialize(hash = {})
  hash.delete_if { |k, v| v.nil? }
  hash = defaults.merge(hash)

  @id = hash[:id]
  @name = hash[:name]
  @multiplier = hash[:multiplier]
  @start_date = Date.new(hash[:start_date])
  @end_date = Date.new(hash[:end_date])

  @total_site_energy_kwh = hash[:total_site_energy_kwh]
  @total_source_energy_kwh = hash[:total_source_energy_kwh]
  @site_EUI_kwh_per_m2 = hash[:site_EUI_kwh_per_m2]
  @site_EUI_kbtu_per_ft2 = hash[:site_EUI_kbtu_per_ft2]
  @source_EUI_kwh_per_m2 = hash[:source_EUI_kwh_per_m2]
  @source_EUI_kbtu_per_ft2 = hash[:source_EUI_kbtu_per_ft2]
  @net_site_energy_kwh = hash[:net_site_energy_kwh]
  @net_source_energy_kwh = hash[:net_source_energy_kwh]
  @net_utility_cost_dollar = hash[:net_utility_cost_dollar]
  @total_utility_cost_dollar = hash[:total_utility_cost_dollar]
  @electricity_kwh = hash[:electricity_kwh]
  @natural_gas_kwh = hash[:natural_gas_kwh]
  @propane_kwh = hash[:propane_kwh]
  @fuel_oil_kwh = hash[:fuel_oil_kwh]
  @other_fuels_kwh = hash[:other_fuels_kwh]
  @district_cooling_kwh = hash[:district_cooling_kwh]
  @district_heating_kwh = hash[:district_heating_kwh]
  @water_qbft = hash[:water_qbft]
  @electricity_produced_kwh = hash[:electricity_produced_kwh]
  @end_uses = EndUses.new(hash[:end_uses])

  @energy_production_kwh = hash[:energy_production_kwh]

  @utility_costs_dollar = hash[:utility_costs_dollar]

  @comfort_result = hash[:comfort_result]

  @emissions = hash[:emissions]

  # initialize class variables @@validator and @@schema
  @@validator ||= Validator.new
  @@schema ||= @@validator.schema
end

Instance Attribute Details

#comfort_resultObject

Returns the value of attribute comfort_result.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def comfort_result
  @comfort_result
end

#day_of_monthObject

Returns the value of attribute day_of_month.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def day_of_month
  @day_of_month
end

#demand_cost_dollarObject

Returns the value of attribute demand_cost_dollar.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def demand_cost_dollar
  @demand_cost_dollar
end

#district_cooling_kwhObject

Returns the value of attribute district_cooling_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def district_cooling_kwh
  @district_cooling_kwh
end

#district_heating_kwhObject

Returns the value of attribute district_heating_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def district_heating_kwh
  @district_heating_kwh
end

#electricity_kwhObject

Returns the value of attribute electricity_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def electricity_kwh
  @electricity_kwh
end

#electricity_produced_kwhObject

Returns the value of attribute electricity_produced_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def electricity_produced_kwh
  @electricity_produced_kwh
end

#emissionsObject

Returns the value of attribute emissions.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def emissions
  @emissions
end

#end_dateObject

Returns the value of attribute end_date.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def end_date
  @end_date
end

#end_usesObject

Returns the value of attribute end_uses.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def end_uses
  @end_uses
end

#energy_production_kwhObject

Returns the value of attribute energy_production_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def energy_production_kwh
  @energy_production_kwh
end

#fuel_oil_kwhObject

Returns the value of attribute fuel_oil_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def fuel_oil_kwh
  @fuel_oil_kwh
end

#fuel_typeObject

Returns the value of attribute fuel_type.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def fuel_type
  @fuel_type
end

#future_annual_emissions_intensity_kg_per_ft2Object

Returns the value of attribute future_annual_emissions_intensity_kg_per_ft2.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def future_annual_emissions_intensity_kg_per_ft2
  @future_annual_emissions_intensity_kg_per_ft2
end

#future_annual_emissions_mtObject

Returns the value of attribute future_annual_emissions_mt.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def future_annual_emissions_mt
  @future_annual_emissions_mt
end

#future_hourly_emissions_intensity_kg_per_ft2Object

Returns the value of attribute future_hourly_emissions_intensity_kg_per_ft2.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def future_hourly_emissions_intensity_kg_per_ft2
  @future_hourly_emissions_intensity_kg_per_ft2
end

#future_hourly_emissions_mtObject

Returns the value of attribute future_hourly_emissions_mt.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def future_hourly_emissions_mt
  @future_hourly_emissions_mt
end

#historical_annual_emissions_intensity_kg_per_ft2Object

Returns the value of attribute historical_annual_emissions_intensity_kg_per_ft2.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def historical_annual_emissions_intensity_kg_per_ft2
  @historical_annual_emissions_intensity_kg_per_ft2
end

#historical_annual_emissions_mtObject

Returns the value of attribute historical_annual_emissions_mt.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def historical_annual_emissions_mt
  @historical_annual_emissions_mt
end

#historical_hourly_emissions_intensity_kg_per_ft2Object

Returns the value of attribute historical_hourly_emissions_intensity_kg_per_ft2.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def historical_hourly_emissions_intensity_kg_per_ft2
  @historical_hourly_emissions_intensity_kg_per_ft2
end

#historical_hourly_emissions_mtObject

Returns the value of attribute historical_hourly_emissions_mt.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def historical_hourly_emissions_mt
  @historical_hourly_emissions_mt
end

#hours_out_of_comfort_bounds_PMVObject

Returns the value of attribute hours_out_of_comfort_bounds_PMV.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def hours_out_of_comfort_bounds_PMV
  @hours_out_of_comfort_bounds_PMV
end

#hours_out_of_comfort_bounds_PPDObject

Returns the value of attribute hours_out_of_comfort_bounds_PPD.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def hours_out_of_comfort_bounds_PPD
  @hours_out_of_comfort_bounds_PPD
end

#idObject

Returns the value of attribute id.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def id
  @id
end

#monthObject

Returns the value of attribute month.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def month
  @month
end

#multiplierObject

Returns the value of attribute multiplier.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def multiplier
  @multiplier
end

#nameObject

Returns the value of attribute name.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def name
  @name
end

#natural_gas_kwhObject

Returns the value of attribute natural_gas_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def natural_gas_kwh
  @natural_gas_kwh
end

#net_site_energy_kwhObject

Returns the value of attribute net_site_energy_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def net_site_energy_kwh
  @net_site_energy_kwh
end

#net_source_energy_kwhObject

Returns the value of attribute net_source_energy_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def net_source_energy_kwh
  @net_source_energy_kwh
end

#net_utility_cost_dollarObject

Returns the value of attribute net_utility_cost_dollar.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def net_utility_cost_dollar
  @net_utility_cost_dollar
end

#other_fuels_kwhObject

Returns the value of attribute other_fuels_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def other_fuels_kwh
  @other_fuels_kwh
end

#photovoltaicObject

Returns the value of attribute photovoltaic.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def photovoltaic
  @photovoltaic
end

#propane_kwhObject

Returns the value of attribute propane_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def propane_kwh
  @propane_kwh
end

#site_EUI_kbtu_per_ft2Object

Returns the value of attribute site_EUI_kbtu_per_ft2.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def site_EUI_kbtu_per_ft2
  @site_EUI_kbtu_per_ft2
end

#site_EUI_kwh_per_m2Object

Returns the value of attribute site_EUI_kwh_per_m2.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def site_EUI_kwh_per_m2
  @site_EUI_kwh_per_m2
end

#source_EUI_kbtu_per_ft2Object

Returns the value of attribute source_EUI_kbtu_per_ft2.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def source_EUI_kbtu_per_ft2
  @source_EUI_kbtu_per_ft2
end

#source_EUI_kwh_per_m2Object

Returns the value of attribute source_EUI_kwh_per_m2.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def source_EUI_kwh_per_m2
  @source_EUI_kwh_per_m2
end

#start_dateObject

Returns the value of attribute start_date.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def start_date
  @start_date
end

#time_setpoint_not_met_during_occupied_coolingObject

Returns the value of attribute time_setpoint_not_met_during_occupied_cooling.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def time_setpoint_not_met_during_occupied_cooling
  @time_setpoint_not_met_during_occupied_cooling
end

#time_setpoint_not_met_during_occupied_heatingObject

Returns the value of attribute time_setpoint_not_met_during_occupied_heating.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def time_setpoint_not_met_during_occupied_heating
  @time_setpoint_not_met_during_occupied_heating
end

#time_setpoint_not_met_during_occupied_hoursObject

Returns the value of attribute time_setpoint_not_met_during_occupied_hours.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def time_setpoint_not_met_during_occupied_hours
  @time_setpoint_not_met_during_occupied_hours
end

#total_cost_dollarObject

Returns the value of attribute total_cost_dollar.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def total_cost_dollar
  @total_cost_dollar
end

#total_site_energy_kwhObject

Returns the value of attribute total_site_energy_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def total_site_energy_kwh
  @total_site_energy_kwh
end

#total_source_energy_kwhObject

Returns the value of attribute total_source_energy_kwh.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def total_source_energy_kwh
  @total_source_energy_kwh
end

#total_utility_cost_dollarObject

Returns the value of attribute total_utility_cost_dollar.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def total_utility_cost_dollar
  @total_utility_cost_dollar
end

#usage_cost_dollarObject

Returns the value of attribute usage_cost_dollar.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def usage_cost_dollar
  @usage_cost_dollar
end

#utility_costs_dollarObject

Returns the value of attribute utility_costs_dollar.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def utility_costs_dollar
  @utility_costs_dollar
end

#water_qbftObject

Returns the value of attribute water_qbft.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def water_qbft
  @water_qbft
end

#yearObject

Returns the value of attribute year.



56
57
58
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 56

def year
  @year
end

Class Method Details

.add_values(existing_value, new_value) ⇒ Object

Adds up existing_value and new_values if not nill.

parameter:

existing_value - Float - A value corresponding to a ReportingPeriod attribute.

new_value - Float - A value corresponding to a ReportingPeriod attribute.



236
237
238
239
240
241
242
243
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 236

def self.add_values(existing_value, new_value)
  if existing_value && new_value
    existing_value += new_value
  elsif new_value
    existing_value = new_value
  end
  return existing_value
end

.merge_reporting_period(existing_period, new_period) ⇒ Object

Merges an existing_period with a new_period if not nil.

Parameters:

existing_period - ReportingPeriod - An object of ReportingPeriod class.

new_period - ReportingPeriod - An object of ReportingPeriod class.



253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 253

def self.merge_reporting_period(existing_period, new_period)
  # modify the existing_period by summing up the results
  existing_period.total_site_energy_kwh = add_values(existing_period.total_site_energy_kwh, new_period.total_site_energy_kwh)
  existing_period.total_source_energy_kwh = add_values(existing_period.total_source_energy_kwh, new_period.total_source_energy_kwh)
  existing_period.net_source_energy_kwh = add_values(existing_period.net_source_energy_kwh, new_period.net_source_energy_kwh)
  existing_period.net_utility_cost_dollar = add_values(existing_period.net_utility_cost_dollar, new_period.net_utility_cost_dollar)
  existing_period.total_utility_cost_dollar = add_values(existing_period.total_utility_cost_dollar, new_period.total_utility_cost_dollar)
  existing_period.electricity_kwh = add_values(existing_period.electricity_kwh, new_period.electricity_kwh)
  existing_period.natural_gas_kwh = add_values(existing_period.natural_gas_kwh, new_period.natural_gas_kwh)
  existing_period.propane_kwh = add_values(existing_period.propane_kwh, new_period.propane_kwh)
  existing_period.fuel_oil_kwh = add_values(existing_period.fuel_oil_kwh, new_period.fuel_oil_kwh)
  existing_period.other_fuels_kwh = add_values(existing_period.other_fuels_kwh, new_period.other_fuels_kwh)
  existing_period.district_cooling_kwh = add_values(existing_period.district_cooling_kwh, new_period.district_cooling_kwh)
  existing_period.district_heating_kwh = add_values(existing_period.district_heating_kwh, new_period.district_heating_kwh)
  existing_period.water_qbft = add_values(existing_period.water_qbft, new_period.water_qbft)
  existing_period.electricity_produced_kwh = add_values(existing_period.electricity_produced_kwh, new_period.electricity_produced_kwh)

  # merge end uses
  new_end_uses = new_period.end_uses
  existing_period.end_uses&.merge_end_uses!(new_end_uses)

  if existing_period.energy_production_kwh && existing_period.energy_production_kwh[:electricity_produced_kwh]
    existing_period.energy_production_kwh[:electricity_produced_kwh][:photovoltaic_kwh] = add_values(existing_period.energy_production_kwh[:electricity_produced][:photovoltaic], new_period.energy_production_kwh[:electricity_produced_kwh][:photovoltaic_kwh])
  end

  existing_period.utility_costs_dollar&.each_with_index do |item, i|
    existing_period.utility_costs_dollar[i][:fuel_type] = existing_period.utility_costs_dollar[i][:fuel_type]
    existing_period.utility_costs_dollar[i][:total_cost] = add_values(existing_period.utility_costs_dollar[i][:total_cost], new_period.utility_costs_dollar[i][:total_cost])
    existing_period.utility_costs_dollar[i][:usage_cost] = add_values(existing_period.utility_costs_dollar[i][:usage_cost], new_period.utility_costs_dollar[i][:usage_cost])
    existing_period.utility_costs_dollar[i][:demand_cost] = add_values(existing_period.utility_costs_dollar[i][:demand_cost], new_period.utility_costs_dollar[i][:demand_cost])
  end

  if existing_period.comfort_result
    existing_period.comfort_result[:time_setpoint_not_met_during_occupied_cooling] = add_values(existing_period.comfort_result[:time_setpoint_not_met_during_occupied_cooling], new_period.comfort_result[:time_setpoint_not_met_during_occupied_cooling])
    existing_period.comfort_result[:time_setpoint_not_met_during_occupied_heating] = add_values(existing_period.comfort_result[:time_setpoint_not_met_during_occupied_heating], new_period.comfort_result[:time_setpoint_not_met_during_occupied_heating])
    existing_period.comfort_result[:time_setpoint_not_met_during_occupied_hours] = add_values(existing_period.comfort_result[:time_setpoint_not_met_during_occupied_hours], new_period.comfort_result[:time_setpoint_not_met_during_occupied_hours])
    existing_period.comfort_result[:hours_out_of_comfort_bounds_PMV] = add_values(existing_period.comfort_result[:hours_out_of_comfort_bounds_PMV], new_period.comfort_result[:hours_out_of_comfort_bounds_PMV])
    existing_period.comfort_result[:hours_out_of_comfort_bounds_PPD] = add_values(existing_period.comfort_result[:hours_out_of_comfort_bounds_PPD], new_period.comfort_result[:hours_out_of_comfort_bounds_PPD])
  end

  if existing_period.emissions
    existing_period.emissions[:future_annual_emissions_mt] = add_values(existing_period.emissions[:future_annual_emissions_mt], new_period.emissions[:future_annual_emissions_mt])
    existing_period.emissions[:future_hourly_emissions_mt] = add_values(existing_period.emissions[:future_hourly_emissions_mt], new_period.emissions[:future_hourly_emissions_mt])
    existing_period.emissions[:historical_annual_emissions_mt] = add_values(existing_period.emissions[:historical_annual_emissions_mt], new_period.emissions[:historical_annual_emissions_mt])
    existing_period.emissions[:historical_hourly_emissions_mt] = add_values(existing_period.emissions[:historical_hourly_emissions_mt], new_period.emissions[:historical_hourly_emissions_mt])

    existing_period.emissions[:future_annual_emissions_intensity_kg_per_ft2] = add_values(existing_period.emissions[:future_annual_emissions_intensity_kg_per_ft2], new_period.emissions[:future_annual_emissions_intensity_kg_per_ft2])
    existing_period.emissions[:future_hourly_emissions_intensity_kg_per_ft2] = add_values(existing_period.emissions[:future_hourly_emissions_intensity_kg_per_ft2], new_period.emissions[:future_hourly_emissions_intensity_kg_per_ft2])
    existing_period.emissions[:historical_annual_emissions_intensity_kg_per_ft2] = add_values(existing_period.emissions[:historical_annual_emissions_intensity_kg_per_ft2], new_period.emissions[:historical_annual_emissions_intensity_kg_per_ft2])
    existing_period.emissions[:historical_hourly_emissions_intensity_kg_per_ft2] = add_values(existing_period.emissions[:historical_hourly_emissions_intensity_kg_per_ft2], new_period.emissions[:historical_hourly_emissions_intensity_kg_per_ft2])
  end

  return existing_period
end

.merge_reporting_periods(existing_periods, new_periods) ⇒ Object

Merges multiple reporting periods together.

  • If existing_periods and new_periods ids are equal,

modify the existing_periods by merging the new periods results

  • If existing periods are empty, initialize with new_periods.

  • Raise an error if the existing periods are not identical with new periods (cannot have different reporting period ids).

parameters:

existing_periods - Array - An array of ReportingPeriod objects.

new_periods - Array - An array of ReportingPeriod objects.



321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 321

def self.merge_reporting_periods(existing_periods, new_periods)
  id_list_existing = []
  id_list_new = []
  id_list_existing = existing_periods.collect(&:id)
  id_list_new = new_periods.collect(&:id)

  if id_list_existing == id_list_new

    existing_periods.each_index do |index|
      # if +existing_periods+ and +new_periods+ ids are equal,
      # modify the existing_periods by merging the new periods results
      existing_periods[index] = merge_reporting_period(existing_periods[index], new_periods[index])
    end

  elsif existing_periods.empty?

    # if existing periods are empty, initialize with new_periods
    # the = operator would link existing_periods and new_periods to the same object in memory
    # we want to initialize with a deep clone of new_periods
    existing_periods = Marshal.load(Marshal.dump(new_periods))

  else
    # raise an error if the existing periods are not identical with new periods (cannot have different reporting period ids)
    raise 'cannot merge different reporting periods'

  end

  return existing_periods
end

Instance Method Details

#defaultsObject

Assigns default values if values do not exist.



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 123

def defaults
  hash = {}

  hash[:id] = nil
  hash[:name] = nil
  hash[:multiplier] = nil
  hash[:start_date] = Date.new.to_hash
  hash[:end_date] = Date.new.to_hash

  hash[:total_site_energy_kwh] = nil
  hash[:total_source_energy_kwh] = nil
  hash[:site_EUI_kwh_per_m2] = nil
  hash[:site_EUI_kbtu_per_ft2] = nil
  hash[:source_EUI_kwh_per_m2] = nil
  hash[:source_EUI_kbtu_per_ft2] = nil
  hash[:net_site_energy_kwh] = nil
  hash[:net_source_energy_kwh] = nil
  hash[:net_utility_cost_dollar] = nil
  hash[:total_utility_cost_dollar] = nil
  hash[:electricity_kwh] = nil
  hash[:natural_gas_kwh] = nil
  hash[:propane_kwh] = nil
  hash[:fuel_oil_kwh] = nil
  hash[:other_fuels_kwh] = nil
  hash[:district_cooling_kwh] = nil
  hash[:district_heating_kwh] = nil

  hash[:electricity_produced_kwh] = nil
  hash[:end_uses] = EndUses.new.to_hash
  hash[:energy_production_kwh] = { electricity_produced: { photovoltaic: nil } }
  hash[:utility_costs_dollar] = [{ fuel_type: nil, total_cost_dollar: nil, usage_cost_dollar: nil, demand_cost_dollar: nil }]
  hash[:comfort_result] = { time_setpoint_not_met_during_occupied_cooling: nil, time_setpoint_not_met_during_occupied_heating: nil,
                            time_setpoint_not_met_during_occupied_hours: nil, hours_out_of_comfort_bounds_PMV: nil, hours_out_of_comfort_bounds_PPD: nil }
  hash[:emissions] = { future_annual_emissions_mt: nil, future_hourly_emissions_mt: nil, historical_annual_emissions_mt: nil, historical_hourly_emissions_mt: nil,
                       future_annual_emissions_intensity_kg_per_ft2: nil, future_hourly_emissions_kg_per_ft2: nil, historical_annual_emissions_kg_per_ft2: nil, historical_hourly_emissions_kg_per_ft2: nil }

  return hash
end

#to_hashObject

Converts to a Hash equivalent for JSON serialization.

  • Exclude attributes with nil values.

  • Validate reporting_period hash properties against schema.



168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# File 'lib/urbanopt/reporting/default_reports/reporting_period.rb', line 168

def to_hash
  result = {}

  result[:id] = @id if @id
  result[:name] = @name if @name
  result[:multiplier] = @multiplier if @multiplier
  result[:start_date] = @start_date.to_hash if @start_date
  result[:end_date] = @end_date.to_hash if @end_date
  result[:total_site_energy_kwh] = @total_site_energy_kwh if @total_site_energy_kwh
  result[:total_source_energy_kwh] = @total_source_energy_kwh if @total_source_energy_kwh
  result[:site_EUI_kwh_per_m2] = @site_EUI_kwh_per_m2 if @site_EUI_kwh_per_m2
  result[:site_EUI_kbtu_per_ft2] = @site_EUI_kbtu_per_ft2 if @site_EUI_kbtu_per_ft2
  result[:source_EUI_kwh_per_m2] = @source_EUI_kwh_per_m2 if @source_EUI_kwh_per_m2
  result[:source_EUI_kbtu_per_ft2] = @source_EUI_kbtu_per_ft2 if @source_EUI_kbtu_per_ft2
  result[:net_site_energy_kwh] = @net_site_energy_kwh if @net_site_energy_kwh
  result[:net_source_energy_kwh] = @net_source_energy_kwh if @net_source_energy_kwh
  result[:net_utility_cost_dollar] = @net_utility_cost_dollar if @net_utility_cost_dollar
  result[:total_utility_cost_dollar] = @total_utility_cost_dollar if @total_utility_cost_dollar
  result[:electricity_kwh] = @electricity_kwh if @electricity_kwh
  result[:natural_gas_kwh] = @natural_gas_kwh if @natural_gas_kwh
  result[:propane_kwh] = @propane_kwh if @propane_kwh
  result[:fuel_oil_kwh] = @fuel_oil_kwh if @fuel_oil_kwh
  result[:other_fuels_kwh] = @other_fuels_kwh if @other_fuels_kwh
  result[:district_cooling_kwh] = @district_cooling_kwh if @district_cooling_kwh
  result[:district_heating_kwh] = @district_heating_kwh if @district_heating_kwh
  result[:water_qbft] = @water_qbft if @water_qbft
  result[:electricity_produced_kwh] = @electricity_produced_kwh if @electricity_produced_kwh
  result[:end_uses] = @end_uses.to_hash if @end_uses

  energy_production_kwh_hash = @energy_production_kwh if @energy_production_kwh
  energy_production_kwh_hash.delete_if { |k, v| v.nil? }
  energy_production_kwh_hash.each do |eph|
    eph.delete_if { |k, v| v.nil? }
  end

  result[:energy_production_kwh] = energy_production_kwh_hash if @energy_production_kwh

  if @utility_costs_dollar.any?
    result[:utility_costs_dollar] = @utility_costs_dollar
    @utility_costs_dollar.each do |uc|
      uc&.delete_if { |k, v| v.nil? }
    end
  end

  comfort_result_hash = @comfort_result if @comfort_result
  comfort_result_hash.delete_if { |k, v| v.nil? }
  result[:comfort_result] = comfort_result_hash if @comfort_result

  emissions_hash = @emissions if @emissions
  emissions_hash.delete_if { |k, v| v.nil? }
  result[:emissions] = emissions_hash if @emissions

  # validates +reporting_period+ properties against schema for reporting period.
  if @@validator.validate(@@schema[:definitions][:ReportingPeriod][:properties], result).any?
    raise "feature_report properties does not match schema: #{@@validator.validate(@@schema[:definitions][:ReportingPeriod][:properties], result)}"
  end

  return result
end