Skip to content

Commit 57ce41e

Browse files
authored
Convert site electricity sensor from Joules to watts (#464)
1 parent 37821f5 commit 57ce41e

File tree

2 files changed

+37
-4
lines changed
  • alfalfa_worker/jobs/openstudio/lib

2 files changed

+37
-4
lines changed

alfalfa_worker/jobs/openstudio/lib/alfalfa-lib-gem/lib/utils.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def get_idd_type(object)
2828
# @return [String]
2929
def create_ems_str(id)
3030
id = id.gsub(/[\s-]/, '_')
31+
id = id.gsub(/[^\w]/, '_')
3132
id = "_#{id}" if (id =~ /[0-9].*/) == 0
3233
id
3334
end

alfalfa_worker/jobs/openstudio/lib/workflow/measures/alfalfa_site_sensors/measure.rb

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
# start the measure
33
class AlfalfaSiteSensors < OpenStudio::Measure::EnergyPlusMeasure
44

5+
6+
FuelMeter = Struct.new(:fuel, :adjustment_factor)
7+
58
include OpenStudio::Alfalfa::EnergyPlusMixin
69
# human readable name
710
def name
@@ -26,9 +29,13 @@ def arguments(workspace)
2629
return args
2730
end
2831

29-
def create_output_meter(name)
32+
def create_output_meter(name, adjustment_factor=1)
3033
sensor_name = "#{create_ems_str(name)}_sensor"
3134
output_name = "#{create_ems_str(name)}_output"
35+
adjusted_name = "#{create_ems_str(name)}_sensor_adjusted"
36+
program_calling_manager_name = "#{create_ems_str(name)}_calling_point"
37+
program_name = "#{create_ems_str(name)}_program"
38+
3239
new_meter_string = "
3340
Output:Meter,
3441
#{name};
@@ -45,7 +52,32 @@ def create_output_meter(name)
4552
new_sensor_object = OpenStudio::IdfObject.load(new_sensor_string).get
4653
@workspace.addObject(new_sensor_object)
4754

48-
create_ems_output_variable(output_name, sensor_name)
55+
new_global_variable_string= "
56+
EnergyManagementSystem:GlobalVariable,
57+
#{adjusted_name}; !- Name
58+
"
59+
60+
new_global_variable_object = OpenStudio::IdfObject.load(new_global_variable_string).get
61+
@workspace.addObject(new_global_variable_object)
62+
63+
new_program_string = "
64+
EnergyManagementSystem:Program,
65+
#{program_name}, !- Name
66+
SET #{adjusted_name} = #{sensor_name}*#{adjustment_factor};
67+
"
68+
new_program_object = OpenStudio::IdfObject.load(new_program_string).get
69+
@workspace.addObject(new_program_object)
70+
71+
new_calling_manager_string = "
72+
EnergyManagementSystem:ProgramCallingManager,
73+
#{program_calling_manager_name}, !- Name
74+
EndOfZoneTimestepAfterZoneReporting, !- EnergyPlus Model Calling Point
75+
#{program_name};
76+
"
77+
new_calling_manager_object = OpenStudio::IdfObject.load(new_calling_manager_string).get
78+
@workspace.addObject(new_calling_manager_object)
79+
80+
create_ems_output_variable(output_name, adjusted_name)
4981
end
5082

5183
# define what happens when the measure is run
@@ -58,11 +90,11 @@ def run(workspace, runner, user_arguments)
5890
end
5991

6092
fuels = [
61-
'Electricity'
93+
FuelMeter.new('Electricity', 1.0/60)
6294
]
6395

6496
fuels.each do |fuel|
65-
register_output(create_output_meter("#{fuel}:Facility")).display_name = "Whole Building #{fuel}"
97+
register_output(create_output_meter("#{fuel.fuel}:Facility", fuel.adjustment_factor)).display_name = "Whole Building #{fuel.fuel}"
6698
end
6799

68100
report_inputs_outputs

0 commit comments

Comments
 (0)