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

Room by Room Specific LPD Issue

asked 2017-06-20 13:39:10 -0500

updated 2017-06-20 13:42:19 -0500

So in the image below I have 1 of the rooms out of around 100. The way I am going about doing the LPD is by making custom lighting definitions of all the fixtures in my building. Then I would insert them in at the space level and give it a multiplier for the fixture count in each room. Doing this is very time consuming and it takes around 2 to 3 seconds for it to load and appear in the room. So then I though why not insert all the lighting definitions at the space type level and assign that multiplier to 0. Then go back into my space level and change the multiplier there but the problem is that you can not make any changes since it is in green text. The lighting definitions are using lighting power and I am assuming that is the wattage. The top 3 entries on the picture are inserted in the space level so they are editable but the others are at the space type which are not editable at the space level. I have a feeling I am might be doing it wrong way since the OS results are showing the lighting under my HVAC VAV zone levels.

image description

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2017-06-20 18:52:26 -0500

updated 2017-06-21 02:56:11 -0500

Spaces inherit loads data from the Space Type definition. Once set load in space types, you cannot change them in the individual spaces interface.

On a practical level, adding individual lights to each space is incredibly time intensive. If you want exact room-by-room wattages, I would suggest removing lighting definitions from your spaces types and adding a single light object per room which sums the lighting power in that room, calculated from a spreadsheet. You can automate this by exporting the space name and total wattage to a .csv file, then using a custom OpenStudio measure to read the .csv, loop through your spaces, and add the light object with the given wattage.

edit flag offensive delete link more


On the other hand, using a measure as you described would be a great way to make adding individual fixtures less time-intensive!

Eric Ringold's avatar Eric Ringold  ( 2017-06-20 19:15:12 -0500 )edit

answered 2017-06-21 03:13:57 -0500

updated 2017-06-21 03:26:19 -0500

To build upon @mdahlhausen's answer in more specific terms, here's what I've been doing to automate this stuff:

  • Create a spreadsheet with columns ["model_space_name", "watt", "hours"].
    • You can have several lines that have the same "model_space_name", the space will then get multiple Lights objects.
    • You could also include your multiplier here if you wanted to... In my spreadsheet I actually have more columns, for eg Fixture (eg 'Fluorescent Linear T8 590mm, 2-18 Watt, electronic ballast'), Count, W/fixture and I calculate "watt" by doing Count times W/fixture
  • Use Roo to parse the Excel spreadsheet
    • I find this convenient exactly because I have multiple columns and formulas and I don't need to export a CSV each time I change it.
    • You could also just export your spreadsheet to CSV and use the built-in CSV module if you find this easier.
  • Define a ScheduleRuset in my model to use as a default profile. That would be SecondarySchool Bldg Light in your example, let's call it light_sch going forward
  • Loop on parsed rows (from Excel),
    • use model.getSpaceByName(row["model_space_name"]).get to get the corresponding space, and create a new lighting object (you need to create a OpenStudio::Model::LightsDefinition and a OpenStudio::Model::Lights that references it).
    • The real key point here is to scale to the SecondarySchool Bldg Light to get the correct number of hours while maintaining the same profile. For this, I leverage openstudio-standards' ScheduleRuleset.annual_equivalent_full_load_hrs. I store the initial eflh = light_sch.annual_equivalent_full_load_hrs. For the lighting objects, I clone this schedule, get the ScheduleDay attached to it (it helps if there's only one...) and scale each value entered accordingly by looping on day_sch.times.with_index (new_value = old_value * daily_h * 365 / eflh.to_f).
    • Neat trick: I rename the cloned schedule like #{} - #{daily_h} hrs/day, so that in the loop I can test whether I already created it or not to avoid duplicating it many times unnecessarily.
edit flag offensive delete link more


Thanks Julien! I've been using RubyXL to do spreadsheet parsing; Roo seems to have a bit better support. I'll make the switch.

mdahlhausen's avatar mdahlhausen  ( 2017-06-21 11:35:52 -0500 )edit

When you say to use "model.getSpaceByName(row["model_space_name"]).get" or any other commands where do you enter that in?

edgarr's avatar edgarr  ( 2017-06-22 10:46:51 -0500 )edit

Your Answer

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

Add Answer

Training Workshops

Question Tools

1 follower


Asked: 2017-06-20 13:39:10 -0500

Seen: 264 times

Last updated: Jun 21 '17