Question-and-Answer Resource for the Building Energy Modeling Community
Get s tarted with the Help page
Ask Your Question

converting compact schedule to ruleset schedule

asked 2017-11-05 02:58:59 -0600

Avi gravatar image

updated 2017-11-06 14:30:52 -0600

I am trying to write measure to translate compact Schedule into ruleset schedule which I find painful. Am I trying to do something that was already done? Are there any native OS methods to do that?

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2017-11-25 06:44:50 -0600

Avi gravatar image

updated 2017-11-25 07:01:32 -0600

I ended up writing a measure to convert compact schedule to ruleset schedule. Though not optimal it seems to work.

edit flag offensive delete link more

answered 2017-11-06 11:24:08 -0600

The OsLib_Schedules.rb file in several of the BCL HVAC measures has some code to make a schedule from a set of values.

You can use this to translate a compact schedule to a ruleset schedule.

Example code:

require 'openstudio'

#this is just for testing
model =
new_schedule =,0.5)
new_schedule.setName("Example Compact Schedule")

#createSimpleSchedule code from the OsLib_Schedules library
def createSimpleSchedule(model, options = {})

  defaults = {
      "name" => nil,
      "winterTimeValuePairs" => {24.0 => 0.0},
      "summerTimeValuePairs" => {24.0 => 1.0},
      "defaultTimeValuePairs" => {24.0 => 1.0},

  # merge user inputs with defaults
  options = defaults.merge(options)

  sch_ruleset =
  if options["name"]

  #Winter Design Day
  winter_dsn_day =
  winter_dsn_day = sch_ruleset.winterDesignDaySchedule
  winter_dsn_day.setName("#{} Winter Design Day")
  options["winterTimeValuePairs"].each do |k,v|
    hour = k.truncate
    min = ((k - hour)*60).to_i
    winter_dsn_day.addValue(, hour, min, 0),v)

  #Summer Design Day
  summer_dsn_day =
  summer_dsn_day = sch_ruleset.summerDesignDaySchedule
  summer_dsn_day.setName("#{} Summer Design Day")
  options["summerTimeValuePairs"].each do |k,v|
    hour = k.truncate
    min = ((k - hour)*60).to_i
    summer_dsn_day.addValue(, hour, min, 0),v)

  #All Days
  week_day = sch_ruleset.defaultDaySchedule
  week_day.setName("#{} Schedule Week Day")
  options["defaultTimeValuePairs"].each do |k,v|
    hour = k.truncate
    min = ((k - hour)*60).to_i
    week_day.addValue(, hour, min, 0),v)

  result = sch_ruleset
  return result

end #end of createSimpleSchedule

#get the value from the compact schedule
compact_sch = model.getScheduleCompactByName("Example Compact Schedule").get
compact_sch_val = compact_sch.constantValue.get 

#create options and call createSimpleSchedule
options_generic_schedule = {"name" => "My Generic Ruleset Schedule",
                       "winterTimeValuePairs" => {24.0 => compact_sch_val},
                       "summerTimeValuePairs" => {24.0 => compact_sch_val},
                       "defaultTimeValuePairs" => {24.0 => compact_sch_val}}
generic_ruleset_schedule = createSimpleSchedule(model, options_generic_schedule)
edit flag offensive delete link more


@mdahlhausen Would that work for Compact schedule with values changing all year long?

Avi gravatar image Avi  ( 2017-11-06 12:52:39 -0600 )edit

no; it is just for a singular value. If you want, you can specify the schedule in more detail with the createComplexSchedule code in the OsLib_Schedules library.

mdahlhausen gravatar image mdahlhausen  ( 2017-11-06 12:59:55 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer


Question Tools

1 follower


Asked: 2017-11-05 02:58:59 -0600

Seen: 238 times

Last updated: Nov 25 '17