openstudio-common-measures 0.11.1 → 0.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/test_with_openstudio.yml +94 -48
- data/CHANGELOG.md +29 -0
- data/Jenkinsfile +1 -1
- data/LICENSE.md +1 -1
- data/README.md +5 -0
- data/doc_templates/LICENSE.md +1 -1
- data/lib/measures/AddCostPerAreaToConstruction/LICENSE.md +1 -1
- data/lib/measures/AddCostPerAreaToConstruction/measure.xml +3 -3
- data/lib/measures/AddCostPerFloorAreaToBuilding/LICENSE.md +1 -1
- data/lib/measures/AddCostPerFloorAreaToBuilding/measure.xml +3 -3
- data/lib/measures/AddCostPerFloorAreaToElectricEquipment/LICENSE.md +1 -1
- data/lib/measures/AddCostPerFloorAreaToElectricEquipment/measure.xml +3 -3
- data/lib/measures/AddCostPerFloorAreaToLights/LICENSE.md +1 -1
- data/lib/measures/AddCostPerFloorAreaToLights/measure.xml +3 -3
- data/lib/measures/AddCostPerFloorAreaUnusedToLights/LICENSE.md +1 -1
- data/lib/measures/AddCostPerFloorAreaUnusedToLights/measure.xml +3 -3
- data/lib/measures/AddCostToSupplySideHVACComponentByAirLoop/LICENSE.md +1 -1
- data/lib/measures/AddCostToSupplySideHVACComponentByAirLoop/measure.xml +4 -4
- data/lib/measures/AddCostperAreatoUnusedConstruction/LICENSE.md +1 -1
- data/lib/measures/AddCostperAreatoUnusedConstruction/measure.xml +3 -3
- data/lib/measures/AddExteriorLights/LICENSE.md +1 -1
- data/lib/measures/AddExteriorLights/measure.xml +3 -3
- data/lib/measures/AddMeter/LICENSE.md +1 -1
- data/lib/measures/AddMeter/measure.xml +3 -3
- data/lib/measures/AddOutputDiagnostics/LICENSE.md +1 -1
- data/lib/measures/AddOutputDiagnostics/measure.xml +3 -3
- data/lib/measures/AddOutputVariable/LICENSE.md +1 -1
- data/lib/measures/AddOutputVariable/measure.xml +3 -3
- data/lib/measures/AddSimplePvToShadingSurfacesByType/LICENSE.md +1 -1
- data/lib/measures/AddSimplePvToShadingSurfacesByType/measure.xml +3 -3
- data/lib/measures/AddThermalComfortModelTypes/LICENSE.md +1 -1
- data/lib/measures/AddThermalComfortModelTypes/measure.xml +3 -3
- data/lib/measures/AdjustSystemEfficiencies/LICENSE.md +1 -1
- data/lib/measures/AdjustSystemEfficiencies/measure.xml +3 -3
- data/lib/measures/AdjustThermostatSetpointsByDegrees/LICENSE.md +1 -1
- data/lib/measures/AdjustThermostatSetpointsByDegrees/measure.xml +3 -3
- data/lib/measures/ChangeBuildingLocation/LICENSE.md +1 -1
- data/lib/measures/ChangeBuildingLocation/measure.xml +3 -3
- data/lib/measures/EnableIdealAirLoadsForAllZones/LICENSE.md +1 -1
- data/lib/measures/EnableIdealAirLoadsForAllZones/measure.xml +3 -3
- data/lib/measures/ExportScheduleCSV/LICENSE.md +1 -1
- data/lib/measures/ExportScheduleCSV/measure.xml +3 -3
- data/lib/measures/ImportEnvelopeAndInternalLoadsFromIdf/LICENSE.md +1 -1
- data/lib/measures/ImportEnvelopeAndInternalLoadsFromIdf/measure.xml +3 -3
- data/lib/measures/MeterFlodPlot/LICENSE.md +1 -1
- data/lib/measures/MeterFlodPlot/measure.xml +3 -3
- data/lib/measures/ModifyEnergyPlusCoilCoolingDXSingleSpeedObjects/LICENSE.md +1 -1
- data/lib/measures/ModifyEnergyPlusCoilCoolingDXSingleSpeedObjects/measure.xml +3 -3
- data/lib/measures/ModifyEnergyPlusFanVariableVolumeObjects/LICENSE.md +1 -1
- data/lib/measures/ModifyEnergyPlusFanVariableVolumeObjects/measure.xml +3 -3
- data/lib/measures/PredictedMeanVote/LICENSE.md +1 -1
- data/lib/measures/PredictedMeanVote/measure.xml +3 -3
- data/lib/measures/RemoveInternalLoadsDirectlyAssignedToSpaces/LICENSE.md +1 -1
- data/lib/measures/RemoveInternalLoadsDirectlyAssignedToSpaces/measure.xml +3 -3
- data/lib/measures/RemoveUnusedDefaultProfiles/LICENSE.md +1 -1
- data/lib/measures/RemoveUnusedDefaultProfiles/measure.xml +3 -3
- data/lib/measures/ReplaceExteriorWindowConstruction/LICENSE.md +1 -1
- data/lib/measures/ReplaceExteriorWindowConstruction/measure.xml +3 -3
- data/lib/measures/ReplaceModel/LICENSE.md +1 -1
- data/lib/measures/ReplaceModel/measure.xml +3 -3
- data/lib/measures/ReplaceThermostatSchedules/LICENSE.md +1 -1
- data/lib/measures/ReplaceThermostatSchedules/measure.xml +5 -5
- data/lib/measures/ReportModelChanges/LICENSE.md +1 -1
- data/lib/measures/ReportModelChanges/measure.xml +3 -3
- data/lib/measures/RunPeriod/LICENSE.md +1 -1
- data/lib/measures/RunPeriod/measure.xml +3 -3
- data/lib/measures/RunPeriodMultiple/LICENSE.md +1 -1
- data/lib/measures/RunPeriodMultiple/measure.xml +3 -3
- data/lib/measures/ServerDirectoryCleanup/LICENSE.md +1 -1
- data/lib/measures/ServerDirectoryCleanup/measure.xml +3 -3
- data/lib/measures/SetCOPforSingleSpeedDXCoolingUnits/LICENSE.md +1 -1
- data/lib/measures/SetCOPforSingleSpeedDXCoolingUnits/measure.xml +5 -5
- data/lib/measures/SetCOPforTwoSpeedDXCoolingUnits/LICENSE.md +1 -1
- data/lib/measures/SetCOPforTwoSpeedDXCoolingUnits/measure.xml +5 -5
- data/lib/measures/SetEnergyPlusInfiltrationFlowRatePerFloorArea/LICENSE.md +1 -1
- data/lib/measures/SetEnergyPlusInfiltrationFlowRatePerFloorArea/measure.xml +3 -3
- data/lib/measures/SetEnergyPlusLightObjectsLPD/LICENSE.md +1 -1
- data/lib/measures/SetEnergyPlusLightObjectsLPD/measure.xml +3 -3
- data/lib/measures/SetEnergyPlusMinimumOutdoorAirFlowRate/LICENSE.md +1 -1
- data/lib/measures/SetEnergyPlusMinimumOutdoorAirFlowRate/measure.xml +3 -3
- data/lib/measures/SetGasBurnerEfficiency/LICENSE.md +1 -1
- data/lib/measures/SetGasBurnerEfficiency/measure.xml +5 -5
- data/lib/measures/SetLifecycleCostParameters/LICENSE.md +1 -1
- data/lib/measures/SetLifecycleCostParameters/measure.xml +3 -3
- data/lib/measures/SetLightingLoadsByLPD/LICENSE.md +1 -1
- data/lib/measures/SetLightingLoadsByLPD/measure.xml +5 -5
- data/lib/measures/SetSpaceInfiltrationByExteriorSurfaceArea/LICENSE.md +1 -1
- data/lib/measures/SetSpaceInfiltrationByExteriorSurfaceArea/measure.xml +3 -3
- data/lib/measures/SetThermostatSchedules/LICENSE.md +1 -1
- data/lib/measures/SetThermostatSchedules/measure.xml +5 -5
- data/lib/measures/ShiftScheduleProfileTime/LICENSE.md +1 -1
- data/lib/measures/ShiftScheduleProfileTime/measure.xml +5 -5
- data/lib/measures/SwapLightsDefinition/LICENSE.md +1 -1
- data/lib/measures/SwapLightsDefinition/measure.xml +3 -3
- data/lib/measures/UnmetLoadHoursTroubleshooting/LICENSE.md +1 -1
- data/lib/measures/UnmetLoadHoursTroubleshooting/measure.xml +3 -3
- data/lib/measures/VentilationQAQC/LICENSE.md +1 -1
- data/lib/measures/VentilationQAQC/measure.xml +3 -3
- data/lib/measures/XcelEDAReportingandQAQC/LICENSE.md +1 -1
- data/lib/measures/XcelEDAReportingandQAQC/measure.xml +3 -3
- data/lib/measures/XcelEDATariffSelectionandModelSetup/LICENSE.md +1 -1
- data/lib/measures/XcelEDATariffSelectionandModelSetup/measure.xml +3 -3
- data/lib/measures/ZoneReport/LICENSE.md +1 -1
- data/lib/measures/ZoneReport/measure.rb +59 -34
- data/lib/measures/ZoneReport/measure.xml +9 -9
- data/lib/measures/ZoneReport/resources/report.html.in +11 -7
- data/lib/measures/add_ems_emissions_reporting/LICENSE.md +1 -1
- data/lib/measures/add_ems_emissions_reporting/measure.xml +3 -3
- data/lib/measures/add_ems_to_control_ev_charging/LICENSE.md +1 -1
- data/lib/measures/add_ems_to_control_ev_charging/measure.xml +3 -3
- data/lib/measures/add_ev_load/LICENSE.md +1 -1
- data/lib/measures/add_ev_load/measure.xml +3 -3
- data/lib/measures/add_rooftop_pv/LICENSE.md +1 -1
- data/lib/measures/add_rooftop_pv/measure.rb +21 -1
- data/lib/measures/add_rooftop_pv/measure.xml +4 -4
- data/lib/measures/add_zone_mixing_object/LICENSE.md +1 -1
- data/lib/measures/add_zone_mixing_object/measure.xml +3 -3
- data/lib/measures/add_zone_ventilation_design_flow_rate_object/LICENSE.md +1 -1
- data/lib/measures/add_zone_ventilation_design_flow_rate_object/measure.xml +3 -3
- data/lib/measures/air_wall_zone_mixing/LICENSE.md +1 -1
- data/lib/measures/air_wall_zone_mixing/measure.xml +3 -3
- data/lib/measures/create_csv_output/LICENSE.md +1 -1
- data/lib/measures/create_csv_output/measure.xml +3 -3
- data/lib/measures/envelope_and_internal_load_breakdown/LICENSE.md +1 -1
- data/lib/measures/envelope_and_internal_load_breakdown/measure.xml +4 -4
- data/lib/measures/envelope_and_internal_load_breakdown/resources/report.html.erb +4 -0
- data/lib/measures/example_report/LICENSE.md +1 -1
- data/lib/measures/example_report/measure.xml +4 -4
- data/lib/measures/example_report/resources/report.html.erb +4 -0
- data/lib/measures/gem_env_report/LICENSE.md +1 -1
- data/lib/measures/gem_env_report/measure.xml +3 -3
- data/lib/measures/generic_qaqc/LICENSE.md +1 -1
- data/lib/measures/generic_qaqc/measure.xml +4 -4
- data/lib/measures/generic_qaqc/resources/report.html.erb +4 -0
- data/lib/measures/get_site_from_building_component_library/LICENSE.md +1 -1
- data/lib/measures/get_site_from_building_component_library/measure.xml +3 -3
- data/lib/measures/hvac_psychrometric_chart/LICENSE.md +1 -1
- data/lib/measures/hvac_psychrometric_chart/measure.xml +4 -4
- data/lib/measures/hvac_psychrometric_chart/resources/report.html.erb +4 -0
- data/lib/measures/inject_idf_objects/LICENSE.md +1 -1
- data/lib/measures/inject_idf_objects/measure.xml +3 -3
- data/lib/measures/openstudio_results/LICENSE.md +1 -1
- data/lib/measures/openstudio_results/README.md +8 -0
- data/lib/measures/openstudio_results/measure.rb +11 -0
- data/lib/measures/openstudio_results/measure.xml +25 -6
- data/lib/measures/openstudio_results/resources/report.html.erb +19 -5
- data/lib/measures/output_table_summary_reports/LICENSE.md +13 -0
- data/lib/measures/output_table_summary_reports/README.md +32 -0
- data/lib/measures/output_table_summary_reports/README.md.erb +42 -0
- data/lib/measures/output_table_summary_reports/measure.rb +78 -0
- data/lib/measures/output_table_summary_reports/measure.xml +110 -0
- data/lib/measures/remove_orphan_objects_and_unused_resources/LICENSE.md +1 -1
- data/lib/measures/remove_orphan_objects_and_unused_resources/measure.xml +3 -3
- data/lib/measures/set_electric_equipment_loads_by_epd/LICENSE.md +1 -1
- data/lib/measures/set_electric_equipment_loads_by_epd/measure.xml +5 -5
- data/lib/measures/set_exterior_walls_and_floors_to_adiabatic/LICENSE.md +1 -1
- data/lib/measures/set_exterior_walls_and_floors_to_adiabatic/measure.xml +3 -3
- data/lib/measures/set_run_period/LICENSE.md +1 -1
- data/lib/measures/set_run_period/measure.xml +3 -3
- data/lib/measures/set_space_infiltration_per_exterior_area/LICENSE.md +1 -1
- data/lib/measures/set_space_infiltration_per_exterior_area/measure.xml +3 -3
- data/lib/measures/shadow_calculation/LICENSE.md +1 -1
- data/lib/measures/shadow_calculation/measure.xml +3 -3
- data/lib/measures/simulation_control/LICENSE.md +13 -0
- data/lib/measures/simulation_control/measure.rb +5 -0
- data/lib/measures/simulation_control/measure.xml +10 -4
- data/lib/measures/tariff_selection_block/LICENSE.md +1 -1
- data/lib/measures/tariff_selection_block/measure.xml +3 -3
- data/lib/measures/tariff_selection_flat/LICENSE.md +1 -1
- data/lib/measures/tariff_selection_flat/measure.xml +3 -3
- data/lib/measures/tariff_selection_generic/LICENSE.md +1 -1
- data/lib/measures/tariff_selection_generic/measure.xml +3 -3
- data/lib/measures/tariff_selection_time_and_date_dependant/LICENSE.md +1 -1
- data/lib/measures/tariff_selection_time_and_date_dependant/measure.xml +3 -3
- data/lib/measures/view_data/LICENSE.md +1 -1
- data/lib/measures/view_data/measure.xml +3 -3
- data/lib/measures/view_model/LICENSE.md +1 -1
- data/lib/measures/view_model/measure.xml +3 -3
- data/lib/openstudio/common_measures/version.rb +1 -1
- data/openstudio-common-measures.gemspec +6 -2
- metadata +69 -7
@@ -9,6 +9,9 @@ require 'erb'
|
|
9
9
|
|
10
10
|
# start the measure
|
11
11
|
class ZoneReport < OpenStudio::Measure::ReportingMeasure
|
12
|
+
attr_reader :component_loads
|
13
|
+
attr_reader :zone_collection
|
14
|
+
|
12
15
|
# define the name that a user will see, this method may be deprecated as
|
13
16
|
# the display name in PAT comes from the name field in measure.xml
|
14
17
|
def name
|
@@ -213,6 +216,18 @@ class ZoneReport < OpenStudio::Measure::ReportingMeasure
|
|
213
216
|
end
|
214
217
|
model = model.get
|
215
218
|
|
219
|
+
# check if the Component Load Summary reports have been produced by EnergyPlus,
|
220
|
+
# which are needed for the Peak Heating Load and Peak Cooling Load tables
|
221
|
+
@component_loads = {}
|
222
|
+
if model.getOutputTableSummaryReports.summaryReports.any? { |r| r.include?('SizingPeriod') }
|
223
|
+
@component_loads[:report] = true
|
224
|
+
else
|
225
|
+
@component_loads[:report] = false
|
226
|
+
message = 'WARNING: The Component Load Summary reports were not produced by EnergyPlus, which are required by the Peak Heating Load and Peak Cooling Load tables.'
|
227
|
+
@component_loads[:message] = message
|
228
|
+
runner.registerWarning(message)
|
229
|
+
end
|
230
|
+
|
216
231
|
@sqlFile = runner.lastEnergyPlusSqlFile
|
217
232
|
if @sqlFile.empty?
|
218
233
|
runner.registerError('Cannot find last sql file.')
|
@@ -306,8 +321,10 @@ class ZoneReport < OpenStudio::Measure::ReportingMeasure
|
|
306
321
|
|
307
322
|
vals = {}
|
308
323
|
|
309
|
-
vals[:va] = getDetailsData('
|
310
|
-
vals[:
|
324
|
+
#vals[:va] = getDetailsData('Input Verification and Results Summary', 'Entire Facility', 'Zone Summary', "#{zoneMetrics[:name].upcase}", 'Lighting[W/m2]', 'W/m2', 'W/ft^2').round(2)
|
325
|
+
#vals[:va] = getDetailsData('Initialization Summary', 'Entire Facility', 'Zone Internal Gains Nominal', "#{zoneMetrics[:name].upcase}", 'Interior Lighting', 'W/m2', 'W/ft^2').round(2)
|
326
|
+
# vals[:va] = getDetailsData('LightingSummary', 'Entire Facility', 'Interior Lighting', "#{zoneMetrics[:name]}%", 'Lighting Power Density', 'W/m2', 'W/ft^2').round(2)
|
327
|
+
# vals[:vb] = getDetailsData('LightingSummary', 'Entire Facility', 'Interior Lighting', "#{zoneMetrics[:name]}%", 'Full Load Hours/Week', 'hr', 'hr').round(2)
|
311
328
|
|
312
329
|
vals[:vc] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Electricity', "InteriorLights:Electricity:Zone:#{zoneMetrics[:name]}", 'Electricity Annual Value', 'GJ', 'kWh').round(2)
|
313
330
|
|
@@ -318,47 +335,56 @@ class ZoneReport < OpenStudio::Measure::ReportingMeasure
|
|
318
335
|
vals[:vf] = getDetailsData('InputVerificationandResultsSummary', 'Entire Facility', 'Zone Summary', zoneMetrics[:name], 'Conditioned (Y/N)', '', 's')
|
319
336
|
if vals[:vf] == '' then vals[:vf] = 'No' end
|
320
337
|
|
321
|
-
vals[:vg] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Heating', zoneMetrics[:name], 'User Design Load', 'W', 'kBtu/hr').round(2)
|
322
|
-
vals[:vh] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Heating', zoneMetrics[:name], 'User Design Air Flow', 'm3/s', 'ft^3/s').round(2)
|
323
|
-
vals[:vi] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Cooling', zoneMetrics[:name], 'User Design Load', 'W', 'kBtu/hr').round(2)
|
324
|
-
vals[:vj] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Cooling', zoneMetrics[:name], 'User Design Air Flow', 'm3/s', 'ft^3/s').round(2)
|
338
|
+
vals[:vg] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Sensible Heating', zoneMetrics[:name], 'User Design Load', 'W', 'kBtu/hr').round(2)
|
339
|
+
vals[:vh] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Sensible Heating', zoneMetrics[:name], 'User Design Air Flow', 'm3/s', 'ft^3/s').round(2)
|
340
|
+
vals[:vi] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Sensible Cooling', zoneMetrics[:name], 'User Design Load', 'W', 'kBtu/hr').round(2)
|
341
|
+
vals[:vj] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Sensible Cooling', zoneMetrics[:name], 'User Design Air Flow', 'm3/s', 'ft^3/s').round(2)
|
325
342
|
|
326
343
|
vals[:vk] = getDetailsData('OutdoorAirSummary', 'Entire Facility', 'Average Outdoor Air During Occupied Hours', zoneMetrics[:name], 'Mechanical Ventilation', 'ach', 'ach').round(2)
|
327
344
|
vals[:vl] = getDetailsData('OutdoorAirSummary', 'Entire Facility', 'Average Outdoor Air During Occupied Hours', zoneMetrics[:name], 'Infiltration', 'ach', 'ach').round(2)
|
328
345
|
|
329
346
|
vals[:vm] = getDetailsData('InputVerificationandResultsSummary', 'Entire Facility', 'Zone Summary', zoneMetrics[:name], 'People', 'm2 per person', 'ft^2/person').round(2)
|
330
347
|
|
331
|
-
vals[:vn] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Cooling', zoneMetrics[:name], 'Date/Time Of Peak', '', 's')
|
332
|
-
vals[:vo] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Heating', zoneMetrics[:name], 'Date/Time Of Peak', '', 's')
|
348
|
+
vals[:vn] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Sensible Cooling', zoneMetrics[:name], 'Date/Time Of Peak {TIMESTAMP}', '', 's')
|
349
|
+
vals[:vo] = getDetailsData('HVACSizingSummary', 'Entire Facility', 'Zone Sensible Heating', zoneMetrics[:name], 'Date/Time Of Peak {TIMESTAMP}', '', 's')
|
333
350
|
|
334
351
|
vals[:vp] = getDetailsData('SystemSummary', 'Entire Facility', 'Time Setpoint Not Met', zoneMetrics[:name], 'During Heating', 'hr', 'hr')
|
335
352
|
vals[:vq] = getDetailsData('SystemSummary', 'Entire Facility', 'Time Setpoint Not Met', zoneMetrics[:name], 'During Cooling', 'hr', 'hr')
|
336
353
|
|
337
|
-
vals[:vr] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Gas', "InteriorEquipment:
|
354
|
+
vals[:vr] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Natural Gas', "InteriorEquipment:NaturalGas:Zone:#{zoneMetrics[:name]}", 'Natural Gas Annual Value', 'GJ', 'Therm').round(2)
|
338
355
|
vals[:vs] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Electricity', "InteriorEquipment:Electricity:Zone:#{zoneMetrics[:name]}", 'Electricity Annual Value', 'GJ', 'kWh').round(2)
|
339
356
|
|
340
|
-
vals[:vt] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Gas', "InteriorEquipment:
|
341
|
-
vals[:vu] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Gas', "InteriorEquipment:
|
357
|
+
vals[:vt] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Natural Gas', "InteriorEquipment:NaturalGas:Zone:#{zoneMetrics[:name]}", 'Natural Gas Maximum Value', 'W', 'kBtu/hr').round(2)
|
358
|
+
vals[:vu] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Natural Gas', "InteriorEquipment:NaturalGas:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum {TIMESTAMP}', '', 's')
|
342
359
|
|
343
360
|
vals[:vv] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Electricity', "InteriorLights:Electricity:Zone:#{zoneMetrics[:name]}", 'Electricity Maximum Value', 'W', 'kW').round(2)
|
344
|
-
vals[:vw] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Electricity', "InteriorLights:Electricity:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum', '', 's')
|
361
|
+
vals[:vw] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Electricity', "InteriorLights:Electricity:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum {TIMESTAMP}', '', 's')
|
362
|
+
|
363
|
+
# calculate lighting values based on EnergyMeters, which has data by zone
|
364
|
+
# instead of Lighting Summary, which has data by space
|
365
|
+
|
366
|
+
# W/ft2
|
367
|
+
vals[:va] = (vals[:vv] * 1000 / zoneMetrics[:area]).round(2)
|
368
|
+
|
369
|
+
# kWh / kW = full load hours
|
370
|
+
vals[:vb] = (vals[:vc] / vals[:vv]).round(2)
|
345
371
|
|
346
372
|
# X unused
|
347
373
|
|
348
374
|
vals[:vy] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Electricity', "InteriorEquipment:Electricity:Zone:#{zoneMetrics[:name]}", 'Electricity Maximum Value', 'W', 'kW').round(2)
|
349
|
-
vals[:vz] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Electricity', "InteriorEquipment:Electricity:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum', '', 's')
|
375
|
+
vals[:vz] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Electricity', "InteriorEquipment:Electricity:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum {TIMESTAMP}', '', 's')
|
350
376
|
|
351
|
-
vals[:vaa] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "InteriorEquipment:
|
352
|
-
vals[:vab] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "InteriorEquipment:
|
353
|
-
vals[:vac] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "InteriorEquipment:
|
377
|
+
# vals[:vaa] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "InteriorEquipment:DistrictHeatingWater:Zone:#{zoneMetrics[:name]}", 'Annual Value', 'GJ', 'kBtu').round(2)
|
378
|
+
# vals[:vab] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "InteriorEquipment:DistrictHeatingWater:Zone:#{zoneMetrics[:name]}", 'Maximum Value', 'W', 'kBtu/hr').round(2)
|
379
|
+
# vals[:vac] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "InteriorEquipment:DistrictHeatingWater:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum {TIMESTAMP}', '', 's')
|
354
380
|
|
355
|
-
vals[:vad] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Heating:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Annual Value', 'GJ', 'kBtu').round(2)
|
356
|
-
vals[:vae] = (getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Heating:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Maximum Value', 'W', 'kBtu/hr') / zoneMetrics[:area]).round(2)
|
357
|
-
vals[:vaf] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Heating:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum', '', 's')
|
381
|
+
# vals[:vad] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Heating:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Annual Value', 'GJ', 'kBtu').round(2)
|
382
|
+
# vals[:vae] = (getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Heating:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Maximum Value', 'W', 'kBtu/hr') / zoneMetrics[:area]).round(2)
|
383
|
+
# vals[:vaf] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Heating:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum {TIMESTAMP}', '', 's')
|
358
384
|
|
359
|
-
vals[:vag] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Cooling:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Annual Value', 'GJ', 'kBtu').round(2)
|
360
|
-
vals[:vah] = (getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Cooling:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Maximum Value', 'W', 'kBtu/hr') / zoneMetrics[:area]).round(2)
|
361
|
-
vals[:vai] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Cooling:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum', '', 's')
|
385
|
+
# vals[:vag] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Cooling:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Annual Value', 'GJ', 'kBtu').round(2)
|
386
|
+
# vals[:vah] = (getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Cooling:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Maximum Value', 'W', 'kBtu/hr') / zoneMetrics[:area]).round(2)
|
387
|
+
# vals[:vai] = getDetailsData('EnergyMeters', 'Entire Facility', 'Annual and Peak Values - Other', "Cooling:EnergyTransfer:Zone:#{zoneMetrics[:name]}", 'Timestamp of Maximum {TIMESTAMP}', '', 's')
|
362
388
|
|
363
389
|
vals[:vaj] = zoneHeatComponentCalc('People', zoneMetrics)
|
364
390
|
vals[:vak] = zoneHeatComponentCalc('Lights', zoneMetrics)
|
@@ -385,7 +411,7 @@ class ZoneReport < OpenStudio::Measure::ReportingMeasure
|
|
385
411
|
vals[:vbf] = zoneHeatComponentCalc('Fenestration Conduction', zoneMetrics)
|
386
412
|
vals[:vbg] = zoneHeatComponentCalc('Fenestration Solar', zoneMetrics)
|
387
413
|
|
388
|
-
vals[:vbh] = getDetailsData('
|
414
|
+
vals[:vbh] = getDetailsData('Zone Component Load Summary', (zoneMetrics[:name]).to_s, 'Heating Peak Conditions', 'Time of Peak Load', 'Value', '', 's')
|
389
415
|
|
390
416
|
vals[:vbi] = zoneCoolComponentCalc('People', zoneMetrics)
|
391
417
|
vals[:vbj] = zoneCoolComponentCalc('Lights', zoneMetrics)
|
@@ -412,7 +438,7 @@ class ZoneReport < OpenStudio::Measure::ReportingMeasure
|
|
412
438
|
vals[:vce] = zoneCoolComponentCalc('Fenestration Conduction', zoneMetrics)
|
413
439
|
vals[:vcf] = zoneCoolComponentCalc('Fenestration Solar', zoneMetrics)
|
414
440
|
|
415
|
-
vals[:vcg] = getDetailsData('
|
441
|
+
vals[:vcg] = getDetailsData('Zone Component Load Summary', (zoneMetrics[:name]).to_s, 'Cooling Peak Conditions', 'Time of Peak Load', 'Value', '', 's')
|
416
442
|
|
417
443
|
# vals = loadTestVals( vals )
|
418
444
|
|
@@ -480,11 +506,11 @@ class ZoneReport < OpenStudio::Measure::ReportingMeasure
|
|
480
506
|
end
|
481
507
|
|
482
508
|
def zoneHeatComponentCalc(component, zoneMetrics)
|
483
|
-
(getDetailsData('
|
509
|
+
(getDetailsData('Zone Component Load Summary', (zoneMetrics[:name]).to_s, 'Estimated Heating Peak Load Components', component, 'Total', 'W', 'Btu/hr') / zoneMetrics[:area]).round(2)
|
484
510
|
end
|
485
511
|
|
486
512
|
def zoneCoolComponentCalc(component, zoneMetrics)
|
487
|
-
(getDetailsData('
|
513
|
+
(getDetailsData('Zone Component Load Summary', (zoneMetrics[:name]).to_s, 'Estimated Cooling Peak Load Components', component, 'Total', 'W', 'Btu/hr') / zoneMetrics[:area]).round(2)
|
488
514
|
end
|
489
515
|
|
490
516
|
def stacked_bars(zoneMetrics)
|
@@ -579,7 +605,7 @@ class ZoneReport < OpenStudio::Measure::ReportingMeasure
|
|
579
605
|
graph['data'] = stacked_vals
|
580
606
|
|
581
607
|
@graph_data << graph
|
582
|
-
end
|
608
|
+
end
|
583
609
|
|
584
610
|
def getPctLoad(val, total)
|
585
611
|
if val != '' && total != 0
|
@@ -621,7 +647,7 @@ end
|
|
621
647
|
# and final_units should be open studio style (m^2, m^3, ...)
|
622
648
|
# If the data is not found or cannot be converted a warning is registered and "" or 0.0 is returned.
|
623
649
|
def getDetailsData(report, forstring, table, row, column, units, final_units)
|
624
|
-
if report == '
|
650
|
+
if report == 'Zone Component Load Summary'
|
625
651
|
forstring.upcase!
|
626
652
|
end
|
627
653
|
|
@@ -637,12 +663,13 @@ end
|
|
637
663
|
|
638
664
|
if query_results.empty?
|
639
665
|
|
640
|
-
|
666
|
+
# todo - is there any valid reason data might not be found? If not then make error isntead of warning
|
667
|
+
@runner.registerWarning("Could not get data for report:#{report} For:#{forstring} table:#{table} row:#{row} column:#{column}.")
|
641
668
|
return final_units == 's' ? '' : 0.0
|
642
669
|
|
643
670
|
else
|
644
671
|
r = query_results.get
|
645
|
-
if report == '
|
672
|
+
if report == 'Zone Component Load Summary'
|
646
673
|
@testData["#{@currentZoneName}_#{table}_#{row}"] = r
|
647
674
|
end
|
648
675
|
|
@@ -652,7 +679,7 @@ end
|
|
652
679
|
converted = OpenStudio.convert(r.to_f, eplus_to_openstudio(units), final_units)
|
653
680
|
if converted.empty?
|
654
681
|
@runner.registerError("Could not convert #{r} from #{units} to #{final_units}")
|
655
|
-
return
|
682
|
+
return false
|
656
683
|
else
|
657
684
|
return converted.get.round(2)
|
658
685
|
end
|
@@ -671,14 +698,12 @@ end
|
|
671
698
|
|
672
699
|
if query_results.empty?
|
673
700
|
@runner.registerError("Could not get data for requested Column #{colName}.")
|
674
|
-
return
|
701
|
+
return false
|
675
702
|
else
|
676
703
|
return query_results
|
677
704
|
end
|
678
705
|
end
|
679
706
|
|
680
|
-
# Accessor to support unit tests
|
681
|
-
attr_reader :zone_collection
|
682
707
|
end
|
683
708
|
|
684
709
|
# this allows the measure to be use by the application
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.1</schema_version>
|
4
4
|
<name>zone_report</name>
|
5
5
|
<uid>81ac119f-4841-434c-9e11-824310fe1cb7</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>a5a25c05-02b3-4b8d-bf91-59fac3fddaa4</version_id>
|
7
|
+
<version_modified>2025-08-01T14:35:26Z</version_modified>
|
8
8
|
<xml_checksum>2C8A3EEF</xml_checksum>
|
9
9
|
<class_name>ZoneReport</class_name>
|
10
10
|
<display_name>Zone Report</display_name>
|
@@ -33,7 +33,7 @@
|
|
33
33
|
<filename>LICENSE.md</filename>
|
34
34
|
<filetype>md</filetype>
|
35
35
|
<usage_type>license</usage_type>
|
36
|
-
<checksum>
|
36
|
+
<checksum>CBFF29F5</checksum>
|
37
37
|
</file>
|
38
38
|
<file>
|
39
39
|
<filename>README.md</filename>
|
@@ -50,19 +50,19 @@
|
|
50
50
|
<file>
|
51
51
|
<version>
|
52
52
|
<software_program>OpenStudio</software_program>
|
53
|
-
<identifier>
|
54
|
-
<min_compatible>
|
53
|
+
<identifier>3.9.0</identifier>
|
54
|
+
<min_compatible>3.9.0</min_compatible>
|
55
55
|
</version>
|
56
56
|
<filename>measure.rb</filename>
|
57
57
|
<filetype>rb</filetype>
|
58
58
|
<usage_type>script</usage_type>
|
59
|
-
<checksum>
|
59
|
+
<checksum>DE6FAD49</checksum>
|
60
60
|
</file>
|
61
61
|
<file>
|
62
62
|
<filename>report.html.in</filename>
|
63
63
|
<filetype>in</filetype>
|
64
64
|
<usage_type>resource</usage_type>
|
65
|
-
<checksum>
|
65
|
+
<checksum>4D3102CA</checksum>
|
66
66
|
</file>
|
67
67
|
<file>
|
68
68
|
<filename>USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw</filename>
|
@@ -74,13 +74,13 @@
|
|
74
74
|
<filename>ZoneReport_Test.rb</filename>
|
75
75
|
<filetype>rb</filetype>
|
76
76
|
<usage_type>test</usage_type>
|
77
|
-
<checksum>
|
77
|
+
<checksum>28CD8E93</checksum>
|
78
78
|
</file>
|
79
79
|
<file>
|
80
80
|
<filename>gas_electric_mark_load.osm</filename>
|
81
81
|
<filetype>osm</filetype>
|
82
82
|
<usage_type>test</usage_type>
|
83
|
-
<checksum>
|
83
|
+
<checksum>1FAF2250</checksum>
|
84
84
|
</file>
|
85
85
|
</files>
|
86
86
|
</measure>
|
@@ -216,7 +216,7 @@ var graph_data = <%= @graph_data %>;
|
|
216
216
|
<ul class="nav nav-pills nav-stacked" role="navigation">
|
217
217
|
<% counter = 0 %>
|
218
218
|
<% zone_collection.each do |z| %>
|
219
|
-
|
219
|
+
|
220
220
|
<li>
|
221
221
|
<a href="#zone_<%= counter %>"><%= z[:name] %></a>
|
222
222
|
</li>
|
@@ -224,18 +224,22 @@ var graph_data = <%= @graph_data %>;
|
|
224
224
|
<% end %>
|
225
225
|
</ul>
|
226
226
|
</div>
|
227
|
-
</div>
|
227
|
+
</div>
|
228
228
|
|
229
229
|
<div class="col-md-9" style="padding-top:25px;" role="main">
|
230
|
-
|
230
|
+
|
231
231
|
<h1>Zone Equipment Report</h1>
|
232
232
|
|
233
|
+
<% if component_loads[:report] == false %>
|
234
|
+
<i><%= component_loads[:message] %></i>
|
235
|
+
<% end %>
|
236
|
+
|
233
237
|
<% counter = 0 %>
|
234
238
|
<% zone_collection.each do |z| %>
|
235
239
|
<h3 id="zone_<%= counter %>"><%= z[:name] %></h3>
|
236
|
-
|
240
|
+
|
237
241
|
<h4>Zone Equipment Summary</h4>
|
238
|
-
|
242
|
+
|
239
243
|
<table class="table table-striped table-bordered table-condensed zoneGrid">
|
240
244
|
<% report_sort_order = {"Heating" => 0, "Backup Heating" => 1, "Cooling" => 2, "Fans" => 3} %>
|
241
245
|
<% z[:equipment].sort_by{|k,v| report_sort_order[k]}.each do |reporting_type, equipments| %>
|
@@ -260,9 +264,9 @@ var graph_data = <%= @graph_data %>;
|
|
260
264
|
<% end %>
|
261
265
|
<% end %>
|
262
266
|
</table>
|
263
|
-
|
267
|
+
|
264
268
|
<h4>Zone Sizing and Load Summary</h4>
|
265
|
-
|
269
|
+
|
266
270
|
<table class="table table-striped table-bordered table-condensed zoneGrid">
|
267
271
|
<tr>
|
268
272
|
<td>Zone Name</td><td><%=z[:name]%></td><td>Zone Size (ft2)</td><td><%=z[:area]%></td>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2025 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.1</schema_version>
|
4
4
|
<name>add_ems_emissions_reporting</name>
|
5
5
|
<uid>e8fe9153-5e70-4769-afa0-6da0045aa529</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>186ed140-c7da-411f-bf36-87d862ecb885</version_id>
|
7
|
+
<version_modified>2025-08-01T14:35:28Z</version_modified>
|
8
8
|
<xml_checksum>976EB6EB</xml_checksum>
|
9
9
|
<class_name>AddEMSEmissionsReporting</class_name>
|
10
10
|
<display_name>Add EMS to Report Emissions</display_name>
|
@@ -450,7 +450,7 @@
|
|
450
450
|
<filename>LICENSE.md</filename>
|
451
451
|
<filetype>md</filetype>
|
452
452
|
<usage_type>license</usage_type>
|
453
|
-
<checksum>
|
453
|
+
<checksum>CBFF29F5</checksum>
|
454
454
|
</file>
|
455
455
|
<file>
|
456
456
|
<filename>README.md</filename>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2025 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.1</schema_version>
|
4
4
|
<name>add_ems_to_control_ev_charging</name>
|
5
5
|
<uid>df97997f-d02a-4e35-af7a-5aed16cb5772</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>57045cd7-f87b-4f65-b493-2f420a8df85c</version_id>
|
7
|
+
<version_modified>2025-08-01T14:35:28Z</version_modified>
|
8
8
|
<xml_checksum>976EB6EB</xml_checksum>
|
9
9
|
<class_name>AddEMSToControlEVCharging</class_name>
|
10
10
|
<display_name>Add EMS to Control EV Charging</display_name>
|
@@ -53,7 +53,7 @@
|
|
53
53
|
<filename>LICENSE.md</filename>
|
54
54
|
<filetype>md</filetype>
|
55
55
|
<usage_type>license</usage_type>
|
56
|
-
<checksum>
|
56
|
+
<checksum>CBFF29F5</checksum>
|
57
57
|
</file>
|
58
58
|
<file>
|
59
59
|
<filename>README.md</filename>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2025 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.1</schema_version>
|
4
4
|
<name>add_ev_load</name>
|
5
5
|
<uid>a23e0493-7357-48ca-b089-4d902efd6b50</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>2d6e7c7b-d342-478c-b85a-262b092eccd8</version_id>
|
7
|
+
<version_modified>2025-08-01T14:35:27Z</version_modified>
|
8
8
|
<xml_checksum>9A202986</xml_checksum>
|
9
9
|
<class_name>AddEVLoad</class_name>
|
10
10
|
<display_name>Add_EV_Load</display_name>
|
@@ -139,7 +139,7 @@
|
|
139
139
|
<filename>LICENSE.md</filename>
|
140
140
|
<filetype>md</filetype>
|
141
141
|
<usage_type>license</usage_type>
|
142
|
-
<checksum>
|
142
|
+
<checksum>CBFF29F5</checksum>
|
143
143
|
</file>
|
144
144
|
<file>
|
145
145
|
<filename>README.md</filename>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2025 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|
@@ -84,12 +84,19 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
|
|
84
84
|
|
85
85
|
# create the inverter
|
86
86
|
inverter = OpenStudio::Model::ElectricLoadCenterInverterSimple.new(model)
|
87
|
-
inverter.
|
87
|
+
inverter.setName("Rooftop PV Inverter")
|
88
|
+
inverter.setInverterEfficiency(args["inverter_efficiency"])
|
89
|
+
inverter.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
|
88
90
|
runner.registerInfo("Created inverter with efficiency of #{inverter.inverterEfficiency}")
|
89
91
|
|
90
92
|
# create the distribution system
|
91
93
|
elcd = OpenStudio::Model::ElectricLoadCenterDistribution.new(model)
|
94
|
+
elcd.setName("Rooftop PV ELCD")
|
92
95
|
elcd.setInverter(inverter)
|
96
|
+
# This is the default, but much better to do it explicitly since it's
|
97
|
+
# critical
|
98
|
+
elcd.setGeneratorOperationSchemeType("Baseload")
|
99
|
+
elcd.setElectricalBussType("DirectCurrentWithInverter")
|
93
100
|
|
94
101
|
# create shared shading transmittance schedule
|
95
102
|
target_transmittance = 1.0 - args['fraction_of_surface'].to_f
|
@@ -102,6 +109,10 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
|
|
102
109
|
pv_shading_transmittance_schedule = OpenstudioStandards::Schedules.create_simple_schedule(model, inputs)
|
103
110
|
runner.registerInfo("Created transmittance schedule for PV shading surfaces with constant value of #{target_transmittance}")
|
104
111
|
|
112
|
+
# Efficiency is rated at a solar irradiance intensity of 1000 W/m^2
|
113
|
+
# So if cell_efficiency is 0.18, that means 180 W/m^2
|
114
|
+
rated_solar_irradiance_w_per_m2 = 1000.0
|
115
|
+
|
105
116
|
model.getSurfaces.each do |surface|
|
106
117
|
next if !surface.space.is_initialized
|
107
118
|
if (surface.surfaceType == 'RoofCeiling') && (surface.outsideBoundaryCondition == 'Outdoors')
|
@@ -125,9 +136,18 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
|
|
125
136
|
# create the panel
|
126
137
|
panel = OpenStudio::Model::GeneratorPhotovoltaic.simple(model)
|
127
138
|
panel.setSurface(shading_surface)
|
139
|
+
panel.setName("Rooftop PV - #{surface.nameString}")
|
128
140
|
performance = panel.photovoltaicPerformance.to_PhotovoltaicPerformanceSimple.get
|
129
141
|
performance.setFractionOfSurfaceAreaWithActiveSolarCells(args['fraction_of_surface'])
|
130
142
|
performance.setFixedEfficiency(args['cell_efficiency'])
|
143
|
+
performance.setName("Rooftop PV - #{surface.nameString} - Performance Simple")
|
144
|
+
|
145
|
+
rated_electric_power_output_w = args["cell_efficiency"] * rated_solar_irradiance_w_per_m2 * args["fraction_of_surface"] * shading_surface.grossArea
|
146
|
+
|
147
|
+
# Set it on the panel, so it's written to the ElectricLoadCenter:Generators
|
148
|
+
# object that the OS ForwardTranslator creates, and reported in the
|
149
|
+
# eplustbl.html (otherwise it shows rated power = 0.0W in L-1. Renewable Energy Source Summary)
|
150
|
+
panel.setRatedElectricPowerOutput(rated_electric_power_output_w)
|
131
151
|
|
132
152
|
# connect panel to electric load center distribution
|
133
153
|
elcd.addGenerator(panel)
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.1</schema_version>
|
4
4
|
<name>add_rooftop_pv</name>
|
5
5
|
<uid>34550614-0c87-44db-9252-0ca0915b1e64</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>782e0e4a-7795-4904-b3f7-3e7dffe12469</version_id>
|
7
|
+
<version_modified>2025-08-01T14:35:28Z</version_modified>
|
8
8
|
<xml_checksum>178163B6</xml_checksum>
|
9
9
|
<class_name>AddRooftopPV</class_name>
|
10
10
|
<display_name>Add Rooftop PV</display_name>
|
@@ -91,7 +91,7 @@
|
|
91
91
|
<filename>LICENSE.md</filename>
|
92
92
|
<filetype>md</filetype>
|
93
93
|
<usage_type>license</usage_type>
|
94
|
-
<checksum>
|
94
|
+
<checksum>CBFF29F5</checksum>
|
95
95
|
</file>
|
96
96
|
<file>
|
97
97
|
<filename>README.md</filename>
|
@@ -114,7 +114,7 @@
|
|
114
114
|
<filename>measure.rb</filename>
|
115
115
|
<filetype>rb</filetype>
|
116
116
|
<usage_type>script</usage_type>
|
117
|
-
<checksum>
|
117
|
+
<checksum>47313383</checksum>
|
118
118
|
</file>
|
119
119
|
<file>
|
120
120
|
<filename>add_rooftop_pv_test.rb</filename>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2025 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.1</schema_version>
|
4
4
|
<name>add_zone_mixing_object</name>
|
5
5
|
<uid>6ed65817-1d97-43da-a4c2-1d738eafcde5</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>7a54e78b-517d-4b0e-80bb-d56bc8e5b8b4</version_id>
|
7
|
+
<version_modified>2025-08-01T14:35:28Z</version_modified>
|
8
8
|
<xml_checksum>61000E02</xml_checksum>
|
9
9
|
<class_name>AddZoneMixingObject</class_name>
|
10
10
|
<display_name>Add Zone Mixing Object</display_name>
|
@@ -73,7 +73,7 @@
|
|
73
73
|
<filename>LICENSE.md</filename>
|
74
74
|
<filetype>md</filetype>
|
75
75
|
<usage_type>license</usage_type>
|
76
|
-
<checksum>
|
76
|
+
<checksum>CBFF29F5</checksum>
|
77
77
|
</file>
|
78
78
|
<file>
|
79
79
|
<filename>README.md</filename>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2025 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.1</schema_version>
|
4
4
|
<name>add_zone_ventilation_design_flow_rate_object</name>
|
5
5
|
<uid>c31e2212-720d-413f-bdb9-f38e198dcfa3</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>a8948f1e-81b8-4947-99ff-3b53b584c6d6</version_id>
|
7
|
+
<version_modified>2025-08-01T14:35:24Z</version_modified>
|
8
8
|
<xml_checksum>3B6B95A6</xml_checksum>
|
9
9
|
<class_name>AddZoneVentilationDesignFlowRateObject</class_name>
|
10
10
|
<display_name>Add Zone Ventilation Design Flow Rate Object</display_name>
|
@@ -108,7 +108,7 @@
|
|
108
108
|
<filename>LICENSE.md</filename>
|
109
109
|
<filetype>md</filetype>
|
110
110
|
<usage_type>license</usage_type>
|
111
|
-
<checksum>
|
111
|
+
<checksum>CBFF29F5</checksum>
|
112
112
|
</file>
|
113
113
|
<file>
|
114
114
|
<filename>README.md</filename>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2025 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.1</schema_version>
|
4
4
|
<name>air_wall_zone_mixing</name>
|
5
5
|
<uid>fd04f73e-a530-4144-9e1e-c1878b1394bc</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>27c88398-8d73-47e2-80d4-47297cb98024</version_id>
|
7
|
+
<version_modified>2025-08-01T14:35:27Z</version_modified>
|
8
8
|
<xml_checksum>772B7164</xml_checksum>
|
9
9
|
<class_name>AirWallZoneMixing</class_name>
|
10
10
|
<display_name>Air Wall Zone Mixing</display_name>
|
@@ -73,7 +73,7 @@ Zone mixing will only be added where there is an air wall and where the matched
|
|
73
73
|
<filename>LICENSE.md</filename>
|
74
74
|
<filetype>md</filetype>
|
75
75
|
<usage_type>license</usage_type>
|
76
|
-
<checksum>
|
76
|
+
<checksum>CBFF29F5</checksum>
|
77
77
|
</file>
|
78
78
|
<file>
|
79
79
|
<filename>README.md</filename>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2025 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<schema_version>3.1</schema_version>
|
4
4
|
<name>create_csv_output</name>
|
5
5
|
<uid>99d3a7e5-4bd5-407f-b5eb-7c59660ca980</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
6
|
+
<version_id>746b6aa2-67d3-4f0d-8f32-dcdf17f54bca</version_id>
|
7
|
+
<version_modified>2025-08-01T14:35:28Z</version_modified>
|
8
8
|
<xml_checksum>9BF1E6AC</xml_checksum>
|
9
9
|
<class_name>CreateCSVOutput</class_name>
|
10
10
|
<display_name>CreateCSVOutput</display_name>
|
@@ -65,7 +65,7 @@
|
|
65
65
|
<filename>LICENSE.md</filename>
|
66
66
|
<filetype>md</filetype>
|
67
67
|
<usage_type>license</usage_type>
|
68
|
-
<checksum>
|
68
|
+
<checksum>CBFF29F5</checksum>
|
69
69
|
</file>
|
70
70
|
<file>
|
71
71
|
<filename>README.md</filename>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
OpenStudio(R), Copyright (c) 2008,
|
1
|
+
OpenStudio(R), Copyright (c) 2008, 2025 Alliance for Sustainable Energy, LLC.
|
2
2
|
|
3
3
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
4
4
|
|