Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 15 additions & 22 deletions lib/BOSS/boss.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,44 +20,36 @@ class Boss
# @param output_dir [String]
# @param epw_file_path [String] if provided, full/path/to/my.epw
# @param standard_to_be_used [String]
def initialize(xml_file_path, output_dir, epw_file_path, standard_to_be_used)
@xml_file_path = xml_file_path
@output_dir = output_dir
@epw_file_path = epw_file_path
@standard_to_be_used = standard_to_be_used

def self.write_baseline_osw(xml_file_path, output_dir, epw_file_path, standard_to_be_used)
# check file exists
if !File.exist?(xml_file_path)
message = "File '#{xml_file_path}' does not exist"
OpenStudio.logFree(OpenStudio::Error, 'BOSS.initialize', message)
OpenStudio.logFree(OpenStudio::Error, 'BOSS.write_baseline_osw', message)
raise message
end

# open file
# open file and prepare to read it
xml_data = File.read(xml_file_path)
bsync_doc = REXML::Document.new(xml_data, ignore_whitespace_nodes: :all)
bsync_reader = BOSS::BuildingSyncReader.new(bsync_doc, epw_file_path, standard_to_be_used)

@bsync_reader = BOSS::BuildingSyncReader.new(bsync_doc, epw_file_path, standard_to_be_used)
end

def write_baseline_osw
# start with an empty baseline workflow
file = File.read(EMPTY_BASELINE_OSW_PATH)
baseline_osw = JSON.parse(file, symbolize_names: true)

# populate the baseline measures
OSWArgPopulator::populate_set_run_period_args(baseline_osw, @bsync_reader)
OSWArgPopulator::populate_change_building_location_args(baseline_osw, @bsync_reader)
OSWArgPopulator::populate_set_run_period_args(baseline_osw, bsync_reader)
OSWArgPopulator::populate_change_building_location_args(baseline_osw, bsync_reader)

OSWArgPopulator::populate_create_bar_from_building_type_ratios_args(baseline_osw, @bsync_reader)
OSWArgPopulator::populate_create_typical_building_from_model_args(baseline_osw, @bsync_reader)
OSWArgPopulator::populate_create_bar_from_building_type_ratios_args(baseline_osw, bsync_reader)
OSWArgPopulator::populate_create_typical_building_from_model_args(baseline_osw, bsync_reader)

OSWArgPopulator::populate_set_lighting_loads_by_LPD_args(baseline_osw, @bsync_reader)
OSWArgPopulator::populate_set_electric_equipment_loads_by_epd_args(baseline_osw, @bsync_reader)
OSWArgPopulator::populate_openstudio_results_args(baseline_osw, @bsync_reader)
OSWArgPopulator::populate_set_lighting_loads_by_LPD_args(baseline_osw, bsync_reader)
OSWArgPopulator::populate_set_electric_equipment_loads_by_epd_args(baseline_osw, bsync_reader)
OSWArgPopulator::populate_openstudio_results_args(baseline_osw, bsync_reader)

# write to file
workflow_dir = File.join(@output_dir, 'baseline')
workflow_dir = File.join(output_dir, 'baseline')
FileUtils.mkdir_p(workflow_dir)
osw_path = File.join(workflow_dir, 'in.osw')
File.open(osw_path, 'w') do |file|
Expand All @@ -66,9 +58,10 @@ def write_baseline_osw
osw_path
end

def run_baseline_osw
# @param osw_dir [String] path to osws
def self.run_baseline_osw(osw_dir)
# assert we have a baseline osm
baseline_osw_path = File.join(@output_dir, 'baseline', 'in.osw')
baseline_osw_path = File.join(osw_dir, 'baseline', 'in.osw')

# assert baseline exist
if !File.file?(baseline_osw_path)
Expand Down
14 changes: 5 additions & 9 deletions lib/boss_cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,19 @@ class CLI < Thor
option :run, :aliases => "-r", :desc => "if set, will also run the baseline"
def write_baseline_osw(buildingsync_file)
standard_version = options[:standard_version] || ASHRAE90_1
boss = BOSS::Boss.new(buildingsync_file, options[:output_path], options[:epw_path], standard_version)
osw_path = boss.write_baseline_osw
osw_path = BOSS::Boss.write_baseline_osw(buildingsync_file, options[:output_path], options[:epw_path], standard_version)
puts "Baseline OSW written to: #{osw_path}"
if options[:run]
puts "running!"
boss.run_baseline_osw
BOSS::Boss.run_baseline_osw(options[:output_path])
end
end

desc "run_osw BUILDINGSYNC_FILE", "runs an existing baseline osw from the output path."
desc "run_osw", "runs an existing baseline osw from the output path."
option :output_path, :required => true, :aliases => "-o", :desc => "path where the baseline osw exists (expects baseline/in.osw)."
option :epw_path, :aliases => "-w", :desc => "path to weather file. If not given, one is derived from the BUILDINGSYNC_FILE."
option :standard_version, :aliases => "-v", :desc => "building standard to use (eg ASHRAE90.1 or CaliforniaTitle24). Defaults to ASHRAE90.1"
def run_osw(buildingsync_file)
def run_osw
standard_version = options[:standard_version] || ASHRAE90_1
boss = BOSS::Boss.new(buildingsync_file, options[:output_path], options[:epw_path], standard_version)
boss.run_baseline_osw
BOSS::Boss.run_baseline_osw(options[:output_path])
end
end
end
6 changes: 2 additions & 4 deletions spec/tests/integration/write_and_run_osws_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,9 @@
output_path = File.join(SPEC_OUTPUT_DIR, schema_version, "write_and_run_baseline_osw" , "#{File.basename(xml_path, File.extname(xml_path))}")
puts output_path

boss = BOSS::Boss.new(xml_path, output_path, epw_path, standard)

# Action
boss.write_baseline_osw
boss.run_baseline_osw
BOSS::Boss.write_baseline_osw(xml_path, output_path, epw_path, standard)
BOSS::Boss.run_baseline_osw(output_path)

# Assertion
puts output_path
Expand Down
Loading