ladybug-tools / honeybee-legacy

:bee: Honeybee is a free and open source plugin to connect Grasshopper3D to EnergyPlus, Radiance, Daysim and OpenStudio for building energy and daylighting simulation
http://ladybug.tools
Other
126 stars 145 forks source link

Add OpenStudio 3Phase DL + energy simulation #290

Open mostaphaRoudsari opened 9 years ago

mostaphaRoudsari commented 9 years ago

Once version 1.7 is out we can get this started.

@rpg777 there is so much that can be done here, in particular for visualization. I'm freaking excited about this.

rpg777 commented 9 years ago

Me too, Mo! There is much to be done, but a major foundation has been laid with last week's commits. We have some bug fixing and documenting to do, but once 1.7.0 is released we are looking to build on this. Onward!!

ljbrackney commented 9 years ago

Go Mo! Go!

mostaphaRoudsari commented 9 years ago

Haha! I wish github had a like button. :) :+1:

mostaphaRoudsari commented 9 years ago

Here is the code how to integrate Radiance measure into the process in Ruby:

require 'openstudio'

# adapted from RunManagerWatcher_Test
# https://github.com/NREL/OpenStudio/blob/bf5f68c76b79a69deaff25aae05cbb8a798b31b1/openstudiocore/ruby/openstudio/runmanager/test/RunManagerWatcher_Test.rb#L54

# set up paths
rmDBPath = './run.db'
osmPath = './in.osm'
epwPath = 'C:/EnergyPlusV8-3-0/WeatherData/USA_CO_Golden-NREL.724666_TMY3.epw'
epPath = 'C:/EnergyPlusV8-3-0/'
radPath = 'C:/Program Files (x86)/Radiance/bin'
rubyPath = OpenStudio::getOpenStudioEmbeddedRubyPath() / OpenStudio::Path.new('bin')
outDir = './run/'

# create test model
epw = OpenStudio::EpwFile.new(epwPath)
model = OpenStudio::Model::exampleModel()
OpenStudio::Model::WeatherFile.setWeatherFile(model, epw)
model.save(osmPath, true)

# make run manager workflow
wf = OpenStudio::Runmanager::Workflow.new()

# arguments to the measure, leaving empty will just use defaults
args = OpenStudio::Ruleset::OSArgumentVector.new()

# make a ruby job to run the measure
measure = OpenStudio::BCLMeasure::radianceMeasure() # this method is not available until 1.9.0
rjb = OpenStudio::Runmanager::RubyJobBuilder.new(measure, args)
rjb.setIncludeDir(OpenStudio::getOpenStudioRubyIncludePath())
wf.addJob(rjb.toWorkItem())

# add energyplus jobs
wf.addJob(OpenStudio::Runmanager::JobType.new("ModelToIdf"))
wf.addJob(OpenStudio::Runmanager::JobType.new("EnergyPlus"))

# set up tool info to pass to run manager
tools = OpenStudio::Runmanager::ConfigOptions::makeTools(epPath, OpenStudio::Path.new(), radPath, rubyPath, OpenStudio::Path.new())

# add tools to workflow, has to happen after jobs are added
wf.add(tools)
wf.addParam(OpenStudio::Runmanager::JobParam.new("flatoutdir"))

# turn the workflow definition into a specific instance
jobtree = wf.create(outDir, osmPath, epwPath)

# make a run manager
rm = OpenStudio::Runmanager::RunManager.new(rmDBPath, true, true)

# run the job tree
rm.enqueue(jobtree, true)
rm.setPaused(false)

# wait until done
rm.waitForFinished()              

jobErrors = jobtree.errors()

print "Errors and Warnings:"
jobErrors.errors().each do |msg|
  puts msg
end

if jobErrors.succeeded()
  puts "Yay!"
else
  puts "Boo!"
end
mostaphaRoudsari commented 9 years ago

Starting runManager makes Rhino crash and gives me this error. I checked and Qt libraries are under OpenStudio folder.

image

image

@macumber any idea why this is happening? I'm going to load the libraries from OpenStudio installation and see if it's making any difference.

mostaphaRoudsari commented 9 years ago

Changing the library path didn't help. The same error happens. @macumber do I need to install Qt separately? I just uninstalled it a couple of weeks ago assuming it is already shipped with OpenStudio. [sad face!]

mostaphaRoudsari commented 9 years ago

Also tried to update to OpenStudio 1.9.2 and it's still the same.

OpenStudio.RunManager() is enough to get the error.

macumber commented 9 years ago

Two ideas, first is that Qt plugins must be located in the right directory relative to the Qt dlls, the windows plugin is located at C:\Program Files\OpenStudio 1.9.0\bin\platforms in our installer. More info about Qt plugins is at http://doc.qt.io/qt-5/deployment-plugins.html.

Second is that RunManager can be initialized without the GUI system by setting the 2nd and 3rd arguments to false, see here https://github.com/NREL/OpenStudio/blob/v1.4.2/openstudiocore/src/runmanager/lib/RunManager.hpp#L83

mostaphaRoudsari commented 9 years ago

Thanks @macumber! Running with no GUI works for now. I can initiate a run manager. Let's see if I can get the whole process to work. :moon:

mostaphaRoudsari commented 9 years ago

@macumber two updates:

  1. I think I hit the wall again with this old issue that we had about Ruleset in C# bindings. I can't get the arguments. I believe this is also what stopped @axelstudios and @kbenne from developing a similar code 2 years ago at the hackathon. We actually still have the code here. I don't remember the details of what was the conclusion on this.
  2. I assumed that I can pass empty arguments and default will be set so I moved on but then OpenStudio.BCLMeasure.radianceMeasure() crashes Rhino. Boom!

Any ideas for either of this? :|

macumber commented 9 years ago

On item 1 you are correct, we are working on a solution to this but don't have anything good right now. On item 2 you are also correct, you should be able to just use the defaults. Do you get any information after the crash? Any log messages? Can you point me to the code where you are assembling the RunManager workflow?

macumber commented 9 years ago

Are you saying that just calling OpenStudio.BCLMeasure.radianceMeasure() causes the crash? Or is it when you try to run the workflow? If it is the first option, then the issue is something to do with calling getApplicationRunDirectory from within Rhino

https://github.com/NREL/OpenStudio/blob/develop/openstudiocore/src/utilities/bcl/BCLMeasure.cpp#L389

https://github.com/NREL/OpenStudio/blob/develop/openstudiocore/src/utilities/core/ApplicationPathHelpers.cxx.in#L133

mostaphaRoudsari commented 9 years ago

yes. Just

import OpenStudio
OpenStudio.BCLMeasure.radianceMeasure()

crashes Rhino. I'm trying to find the crash log.

mostaphaRoudsari commented 9 years ago

I also tried to use the path OpenStudio.BCLMeasure("pathToMeasure") but then it gives me an error that the ruby file is not a measure!

macumber commented 9 years ago

The OpenStudio.BCLMeasure("pathToMeasure") method takes the path to the directory containing the measure, not the path to the ruby file, have you tried that? For the radianceMeasure method to work you would have to have the radiance measure in the same location relative to the openstudio_utilities.dll as it is in the OpenStudio installer. Are you using the complete OpenStudio installer?

mostaphaRoudsari commented 9 years ago

Yes. I do have the full installation. Let me try the path. Thanks for the after midnight live support! :)

macumber commented 9 years ago

It's only 11 here :-)

mostaphaRoudsari commented 9 years ago

I think your guess is right! Here is the dump file summary:

image

I'm checking the other solution now.

mostaphaRoudsari commented 9 years ago

Good news! OpenStudio.BCLMeasure(OpenStudio.Path(r"C:\Program Files\OpenStudio 1.9.2\share\openstudio-1.9.2\pat\Measures\RadianceMeasure")) works fine!

mostaphaRoudsari commented 9 years ago

This code doesn't give an error but also doesn't generate any meaningful results. Only run.db file is generated. I can't see EnergyPlus or Radiance running in processes. There should be a better way to get the report of what's really happening once RunManager is running. Thanks @macumber for your help so far. We should be pretty close I assume.

import os
import scriptcontext as sc

#openStudioLibFolder = "C:\\Users\\" + os.getenv("USERNAME") + "\\Dropbox\\ladybug\\honeybee\\openStudio\\CSharp64bits"
openStudioLibFolder = r"C:\Program Files\OpenStudio 1.9.2\CSharp\openstudio"

# openstudio is there
# I need to add a function to check the version and compare with available version
openStudioIsReady = True
import clr
clr.AddReferenceToFileAndPath(openStudioLibFolder+"\\openStudio.dll")

import sys
if openStudioLibFolder not in sys.path:
    sys.path.append(openStudioLibFolder)

import OpenStudio

rmDBPath = OpenStudio.Path('C:/ladybug/run2.db')
osmPath = OpenStudio.Path(r'c:\ladybug\unnamed\OpenStudio\unnamed.osm')
epwPath = OpenStudio.Path('C:/EnergyPlusV8-3-0/WeatherData/USA_CO_Golden-NREL.724666_TMY3.epw')
epPath = OpenStudio.Path('C:/EnergyPlusV8-3-0/')
radPath = OpenStudio.Path('C:/Radiance/bin')
rubyPath = OpenStudio.Path(r'C:\Program Files\OpenStudio 1.9.2\ruby-install\ruby\bin')
outDir = OpenStudio.Path('C:/ladybug/osmtest/')

wf = OpenStudio.Workflow()

measure = OpenStudio.BCLMeasure(OpenStudio.Path(r"C:\Program Files\OpenStudio 1.9.2\share\openstudio-1.9.2\pat\Measures\RadianceMeasure"))
args = OpenStudio.OSArgumentVector()
rjb = OpenStudio.RubyJobBuilder(measure, args)
rjb.setIncludeDir(OpenStudio.Path(rubyPath))
wf.addJob(rjb.toWorkItem())

# add energyplus jobs
wf.addJob(OpenStudio.JobType("ModelToIdf"))
wf.addJob(OpenStudio.JobType("EnergyPlus"))

# set up tool info to pass to run manager
tools = OpenStudio.ConfigOptions.makeTools(epPath, OpenStudio.Path(), radPath, rubyPath, OpenStudio.Path())

# add tools to workflow, has to happen after jobs are added
wf.add(tools)
wf.addParam(OpenStudio.JobParam("flatoutdir"))

# turn the workflow definition into a specific instance
jobtree = wf.create(outDir, osmPath, epwPath)

# make a run manager
rm = OpenStudio.RunManager(rmDBPath, True, True, False, False)

# run the job tree
rm.enqueue(jobtree, True)
rm.setPaused(True)

# wait until done
rm.waitForFinished()              

jobErrors = jobtree.errors()

print "Errors and Warnings:"
for msg in jobErrors.errors():
  print msg

if jobErrors.succeeded():
  print "Yay!"
else:
  print "Boo!"
macumber commented 9 years ago

If you are not seeing anything happening in your out dir then I would suspect this line rm.setPaused(True), that is pausing RunManager you need to call rm.setPaused(False) to unpause it and start the run.

The other thing I would mention is that EnergyPlus and Radiance are shipped with OpenStudio, you should use the versions that are bundled with OpenStudio for any OpenStudio runs.

Final thing is that you might want to add the ExpandObjects and EnergyPlusPreProcess to your workflow, the workflow that OpenStudio uses is here:

https://github.com/NREL/OpenStudio/blob/develop/openstudiocore/src/runmanager/lib/Workflow.cpp#L822

rpg777 commented 9 years ago

I'm sorry, wasn't rm.setPaused(False) (like, totally,) the obvious way to say "run"? =) Waiting with baited breath here, to find out how you make out!

mostaphaRoudsari commented 9 years ago

=). I started to work on some other stuff this morning but then you guys made it very hard to concentrate! ;P

Here is the update: Actually I noticed that line last night/morning and I commented it out but it didn't make a difference. Now I realize that I need to start it since I set it to false in the initialization line rm = OpenStudio.RunManager(rmDBPath, True, True, False, False)

Setting `rm.setPaused(False)`` creates the folder and copies the files

image

But then look like RunManager is looking for the ruby folder under CSharp directory instead of the root. Where can I change that? Here is the error: Unable to find required file while creating LocalProcess: C:/Program Files/OpenStudio 1.9.2/CSharp/Ruby/openstudio/runmanager/rubyscripts/UserScriptAdapter.rb: C:/ladybug/ostest/0-UserScript/in.rb basepath:

and here is the path inside the created param.json file:

image

Too keep the party going I copied the Ruby folder under the CSharp folder so RunManager can find it and here we go! It runs the analysis and create the folders...

image

But radiance folder is empty! It might be because I don't have any light sensor in my model (or is it?). Regardless of that where is the .rad file itself?

and here is the new error from RunManager:

Errors and Warnings:
Process exited with a non-zero exit code of: 1

I think we are making progress :)

mostaphaRoudsari commented 9 years ago

One more thing to add. Once the script is executed, Ruby interpreter starts working and EnergyPlus goes after that. No Radiance.

mostaphaRoudsari commented 9 years ago

Some more updates! I added an illuminance grid manually and tested the file and it didn't make a difference! Then I used the testmodel.osm that comes with daylighting measure and boom!

image

The error with RunManager is still there. I will compare the models and check the results to see what I really have there. :balloon:

macumber commented 9 years ago

Probably need to start pinging @rpg777 if the issues are model dependent

mostaphaRoudsari commented 9 years ago

Already started doing that! =) Here is the short summary of what works and what fails:

I think next step is to run the measure from OpenStudio and see if it works.

@macumber regardless of this measure if we can get the argument part fixed looks like we should be able to load OpenStudio measures to Honeybee which is huge. Also I can write a parser to parse the measure file and expose the arguments but I'm not sure if I can set the values. Is this something that can happen anytime soon? It can be very huge for our users.

Also now that you're shipping EnergyPlus and Radiance with OpenStudio we may want to ask the users just to install OpenStudio. You will get more downloads and we will have less headache for installation.

macumber commented 9 years ago

All sounds good to me :-) The measure arguments are in the measure.xml file next to the measure.rb file, so you can get them from there. The only complication is that measure arguments that depend on the specific model (e.g. list of all zones in the model) won't be right. That is the piece that we need to add in the coming year. As for setting the argument values that should be easy, let me know if you run into issues.

An awesome project for a hackathon would be a grasshopper component where you can drop a measure and then the component exposes all the arguments as a normal grasshopper component would have :-)

mostaphaRoudsari commented 9 years ago

Ok. I'm back on this one. The measure fails even when I run it from OpenStudio:

image

@rpg777 let me know if this image tells you anything otherwise I need to check the commands line by line to see where does it fail.

@macumber I assume that it will be actually ok. We already have OpenStudio model data in Honeybee and we can extract the data as needed. What's the prize for that hackathon? I might be able to win it by tomorrow morning! ;)

chriswmackey commented 9 years ago

@mostpharoudsari and @macumber ,

I just wanted to say that you gentlemen are epic. The suspense of this issue has been thrilling. Keep kicking ass!

mostaphaRoudsari commented 9 years ago

@macumber I think I won the hackathon :). Click on the image to watch the video.

image Now let's see if I can use this data to set measure arguments!

macumber commented 9 years ago

winner

This is awesome :-) I've always envisioned having a line represent the OpenStudio model (I guess it could be the model in memory or a path) and then stringing the OpenStudio model into the measure and having it come out so you could chain it into another measure. Is that even possible?

mostaphaRoudsari commented 9 years ago

Thanks! and yes that's exactly how it will be working (that's how honeybee works in general). To me it's always like how javascript objects are and let you chain multiple changes together. I need to have a more solid import from OpenStudio to be able to show the changes in the model in each step similar to what we do with Honeybee.

I also have an update on Radiance side. I copied all the lines into a batch file and started testing the process! It is still running but except a couple of warning it works fine.

image

I suspect the issue is that the path to Radiance folder was set wrong in OpenStudio app. Now that you're shipping EnergyPlus and Radiance with OpenStudio why does it still searches for EP and Radiance path?

I will report back the final results of daylighting model. Now I think there is something wrong with RunManager that I couldn't run the analysis since the path was set right in the script. I'll keep you posted!

mostaphaRoudsari commented 9 years ago

Path looks fine! Now I have no idea why it goes wrong. image

macumber commented 9 years ago

I think I will have to try to get my environment set up to help on this. This year we will be replacing RunManager with something that should make all this easier to do (and no more scanning for stuff we install). However, we will have to keep you in the loop to make sure that it actually does make things easier and not worse.

mostaphaRoudsari commented 9 years ago

@macumber sounds great to me! I'm happy that the current workflow is almost working. There is still minor bugs here an there but that should be fine. As a side note it should be hard to write something that is harder to figure out than runmanager! ;)

@rpg777 please see the warnings and errors from running the batch file here:

radiancemeasureerrors

rpg777 commented 9 years ago

Wow @macumber and @mostaphaRoudsari, you guys have been busy! Sorry I'm just tuning back in here. I have good news but you may want to kill me for not sharing this sooner. That last error you're seeing, about the "unexpected EOF", is most likely being caused by (fixed) bug in Radiance, simple as that. You need to be using NREL binaries vintage 5.0.a.5 https://github.com/NREL/Radiance/releases/tag/5.0.a.5 or newer, or if you're rolling your own, anything based on code after this commit: https://github.com/NREL/Radiance/commit/f9e6adb85c54838b7f9bda102c4fc320d2b746f5

The warning(s) about "ignoring output files in sender" can be ignored.

macumber commented 9 years ago

@kbenne @henryHorsey @axelstudios @nllong this is a good example for who wants a better interface to OpenStudio measures and also it's just cool :-)

mostaphaRoudsari commented 9 years ago

Hi @rpg777. Thank you for your input. We're 33% there. The only place that I was using an older version of Radiance was the batch file. Updating the Radiance did the job. For the other two cases, running from inside Grasshopper and OpenStudio the analysis fails. 1 works out of 3 = 33.33333334% Any idea what might be the reason?

How can I get a better report from run manager than Failed or Process exited with a non-zero exit code.. In both cases the it fails in the first step to create the .oct file. I believe there is something as simple as looking to the wrong path causing all this. I'm teaching a workshop on Friday and I'm hoping to be able to show off the OpenStudio workflow once they go through the painful process of Daysim > EnergyPlus. Let's make this happen :)

Also a suggestion about .ill files. Any chance that you can make them look the same as Daysim's .ill files? If that's too much work this is also fine we can check the header and understand if it's an OpenStudio/Radiance .ill file or the one from Daysim. Cheers.

rpg777 commented 9 years ago

@mostaphaRoudsari, can you point me to an archive of the failed jobs and I can dig around? Running locally, the stderr and stdout logs that end up in the radiance run directory are generally the best places to look for clues. We may still have some Windows/unix path issue going on here, but this crap all works even on Windows with the latest version of the measure (which I ASSume you are using, and is what is on develop right now). Yes, let's make this happen!! We are close it seems.

As for the .ill files, let's how far off the two formats are. We have some post processing crap that expects the current format, but if it's not drastically different, I'd say that aligning the formats would be a Good Thing[TM]. I didn't even know Daysim called its output *.ill too. Random coincidence!

mostaphaRoudsari commented 9 years ago

@rpg777, I was not using the latest measure from develop folder so I updated and tried again.

The error is an easy one > unknown type "BSDF" I'm sure that I have the latest version of Radiance installed so this should not happen. Right? Any thoughts?

In case you still need the files you can download it from here.

Here is the is the error report:

DL is deprecated, please use Fiddle

oconv: fatal - (materials\materials.rad): unknown type "BSDF"

oconv: fatal - (materials\materials.rad): unknown type "BSDF"

rcontrib: fatal - (model_WG0.oct): truncated octree

oconv: fatal - (model_dc.oct): truncated octree

rcontrib: fatal - (!oconv -f -i model_dc.oct skies\dc_sky.rad): not an octree

rfluxmtx: warning - ignoring output file in sender ('output/dc/WG1.vmx')

rfluxmtx: opening pipe to: rcontrib -fo+ -ab 2 -ad 512 -as 256 -dj 1 -dp 1 -dt 0 -dc 1 -lw 0.001 -n 3 -fda -c 10000 -bn 1 -b "if(-Dx*0-Dy*0-Dz*1,0,-1)" -m groundglow -f reinhartb.cal -p MF=1,rNx=0,rNy=0,rNz=-1,Ux=0,Uy=1,Uz=0,RHS=+1 -bn Nrbins -b rbin -m skyglow -y 145 "!oconv -f -i model_dc.oct skies\dc_sky.rad"

rfluxmtx: sampling 145 directions

oconv: fatal - (model_dc.oct): truncated octree

rcontrib: fatal - (!oconv -f -i model_dc.oct skies\dc_sky.rad): not an octree

rfluxmtx: warning - ignoring output file in sender ('output/dc/WG2.vmx')

rfluxmtx: opening pipe to: rcontrib -fo+ -ab 2 -ad 512 -as 256 -dj 1 -dp 1 -dt 0 -dc 1 -lw 0.001 -n 3 -fda -c 10000 -bn 1 -b "if(-Dx*0-Dy*0-Dz*1,0,-1)" -m groundglow -f reinhartb.cal -p MF=1,rNx=0,rNy=0,rNz=-1,Ux=0,Uy=1,Uz=0,RHS=+1 -bn Nrbins -b rbin -m skyglow -y 145 "!oconv -f -i model_dc.oct skies\dc_sky.rad"

rfluxmtx: sampling 145 directions

materials\materials_vmx.rad

scene\shades\WG1_SHADE.rad

scene\shades\WG2_SHADE.rad

oconv: fatal - (materials\materials.rad): unknown type "BSDF"

oconv: fatal - (model_vmx.oct): truncated octree

rcontrib: fatal - (!oconv -f -i model_vmx.oct receivers_vmx.rad): not an octree

rfluxmtx: running: rcontrib -fo+ -ab 6 -ad 4050 -as 256 -dj 1 -dp 1 -dt 0 -dc 1 -lw 0.001 -n 3 -ds .15 -I -y 45 -faa -c 1 -o output/dc/WG1.vmx -f klems_full.cal -p RHS=+1 -bn Nkbins -b kbin(0,1,0,0,0,1) -m WG1_SHADE -o output/dc/WG2.vmx -p RHS=+1 -bn Nkbins -b kbin(-1,0,0,0,0,1) -m WG2_SHADE "!oconv -f -i model_vmx.oct receivers_vmx.rad"

oconv: fatal - (materials\materials.rad): unknown type "BSDF"

rcontrib: fatal - (model_wc.oct): truncated octree

system - cannot open file 'C:\Program Files\OpenStudio 1.9.2\share\openstudio-1.9.2\pat\Measures\RadianceMeasure\tests\Radiance_Daylighting_Measure\0-UserScript\radiance\output\dc\WG0.vmx': No such file or directory

<stdin>: cannot load matrix

rmtxop: operation failed on '-'

fatal - unexpected EOF in header

<stdin>: cannot load matrix

rmtxop: operation failed on '-'

fatal - unexpected EOF in header

<stdin>: cannot load matrix

rmtxop: operation failed on '-'

fatal - unexpected EOF in header

<stdin>: cannot load matrix

rmtxop: operation failed on '-'

fatal - unexpected EOF in header

<stdin>: cannot load matrix

rmtxop: operation failed on '-'

system - cannot open file 'output\dc\window_controls.vmx': No such file or directory

<stdin>: cannot load matrix

rmtxop: operation failed on '-'

C:/Program Files/OpenStudio 1.9.2/share/openstudio-1.9.2/pat/Measures/RadianceMeasure/tests/Radiance_Daylighting_Measure/0-UserScript/user_script.rb:630:in `initialize': No such file or directory -  (Errno::ENOENT)

    from C:/Program Files/OpenStudio 1.9.2/share/openstudio-1.9.2/pat/Measures/RadianceMeasure/tests/Radiance_Daylighting_Measure/0-UserScript/user_script.rb:630:in `open'

    from C:/Program Files/OpenStudio 1.9.2/share/openstudio-1.9.2/pat/Measures/RadianceMeasure/tests/Radiance_Daylighting_Measure/0-UserScript/user_script.rb:630:in `block in runSimulation'

    from C:/Program Files/OpenStudio 1.9.2/share/openstudio-1.9.2/pat/Measures/RadianceMeasure/tests/Radiance_Daylighting_Measure/0-UserScript/user_script.rb:589:in `each'

    from C:/Program Files/OpenStudio 1.9.2/share/openstudio-1.9.2/pat/Measures/RadianceMeasure/tests/Radiance_Daylighting_Measure/0-UserScript/user_script.rb:589:in `runSimulation'

    from C:/Program Files/OpenStudio 1.9.2/share/openstudio-1.9.2/pat/Measures/RadianceMeasure/tests/Radiance_Daylighting_Measure/0-UserScript/user_script.rb:1872:in `run'

    from in.rb:355:in `<main>'

QWaitCondition: Destroyed while threads are still waiting

QWaitCondition: Destroyed while threads are still waiting
rpg777 commented 9 years ago

Hey Mo, here's a little ditty from the IDEAkit project, that adds an illuminance map, primary daylighting control, and glare sensor to specific spaces. Gives you an idea of the API calls you need to use to get 'em in there and wired up correctly so the Radiance measure can do its thing. What's missing here is some logic[TM] to get the origin, extents and dimensions of the map and other point details, but I know you can sort that out. =) (You can get or derive those bits from other model objects.)

Bear in mind we also plan to add support for the STADIC dxgridmaker utility, which will allow you to generate the illuminance map points automatically from your model geometry. But this code here will work for you right now:

if adddaylight == 1

    map = OpenStudio::Model::IlluminanceMap.new(model)
    map.setTransformation(maptranslation)
    map.setSpace(space)
    map.setXLength(xlen)
    map.setYLength(ylen)
    map.setNumberofXGridPoints(xdivs)
    map.setNumberofYGridPoints(ydivs)
    map.setName(space.name.get)

    dc = OpenStudio::Model::DaylightingControl.new(model)
    dc.setSpace(space)
    dc.setTransformation(dctranslation)
    dc.setIlluminanceSetpoint(dcsetpoint)
    dc.setPhiRotationAroundZAxis(dcrotationz)
    dc.setName(space.name.get)

    if glorigin
        gl = OpenStudio::Model::GlareSensor.new(model)
        gl.setSpace(space)
        gl.setTransformation(gltranslation)
        gl.setName(space.name.get)
        gl.setNumberofGlareViewVectors(8)
        gl.setPhiRotationAroundZAxis(glrotationz)
    end

    thermalZone = space.thermalZone.get
    thermalZone.setPrimaryDaylightingControl(dc)
    thermalZone.setIlluminanceMap(map)

end
rpg777 commented 9 years ago

Yeah, so ah, our measure does not deal with "switchable glazing" correctly. We need to fix that ASAP. In the meantime can you try using the alternate option for shade controls, using the material option rather than the switchable glazing option? Create a new shading control in the plugin and pick one of the standard material types in that menu (blind, shade, or daylight redirecting device). screen shot 2015-11-03 at 11 01 45 am

mostaphaRoudsari commented 9 years ago

@rpg777, I can't create a new shading control for some reason! The button is disabled and then I can't changed the shading type! That is also disabled. Do you want to send me an updated model?

One more question. If this is an issue with switchable glazing why everything is fine if I run very similar commands from a batch file?

image

rpg777 commented 9 years ago

Yeah, you need to create and modify these things in the SketchUp plugin, not the app. And I do not know the answer to your other question. I will look into this.

mostaphaRoudsari commented 9 years ago

Well... The screenshot is from SkectchUp plugin! It's not the main issue here though :)

rpg777 commented 9 years ago

You're right, of course. Sorry, what I mean to say is that you need to use the "Set Shading Controls" user script in the plugin, you cannot use the inspector. I haven't had a chance to look at your model yet so I don't have any other info for you just yet...

macumber commented 9 years ago

Hey Mo, have you seen this tutorial on shading controls in OS?

http://nrel.github.io/OpenStudio-user-documentation/tutorials/tutorial_shadingcontrols/

Also this radiance one:

On Tue, Nov 3, 2015 at 2:22 PM, Rob Guglielmetti notifications@github.com wrote:

You're right, of course. Sorry, what I mean to say is that you need to use the "Set Shading Controls" user script in the plugin, you cannot use the inspector. I haven't had a chance to look at your model yet so I don't have any other info for you just yet...

— Reply to this email directly or view it on GitHub https://github.com/mostaphaRoudsari/Honeybee/issues/290#issuecomment-153493481 .

macumber commented 9 years ago

D'oh. this radiance one:

http://nrel.github.io/OpenStudio-user-documentation/tutorials/radiance_tutorial/

On Wed, Nov 4, 2015 at 12:00 PM, Dan Macumber macumber@alum.mit.edu wrote:

Hey Mo, have you seen this tutorial on shading controls in OS?

http://nrel.github.io/OpenStudio-user-documentation/tutorials/tutorial_shadingcontrols/

Also this radiance one:

On Tue, Nov 3, 2015 at 2:22 PM, Rob Guglielmetti <notifications@github.com

wrote:

You're right, of course. Sorry, what I mean to say is that you need to use the "Set Shading Controls" user script in the plugin, you cannot use the inspector. I haven't had a chance to look at your model yet so I don't have any other info for you just yet...

— Reply to this email directly or view it on GitHub https://github.com/mostaphaRoudsari/Honeybee/issues/290#issuecomment-153493481 .

mostaphaRoudsari commented 9 years ago

Thanks @macumber. No I didn't know about the first links. Made the changes and @rpg777 guess was right. _It runs with no errors!_ :tada: :balloon:

image

We need to get over 5 more steps before closing this:

  1. Measure looks into the wrong folder for Ruby files. The temporary fix for this was to copy Ruby folder under CSharp folder. @macumber is it a general issues with measures or just the Daylight measure? Is it going to be fixed soon or we should just copy the files first time user runs the analysis.
  2. Fix daylight measure to work for switchable glazing. I leave this for @rpg777
  3. Add test grid to HBZones using API. We have an open issue for it here: #402 @rpg777 and I will solve it soon.
  4. Add shading controls to HBZones using API. There is an example for that ("C:\Program Files\OpenStudio 1.9.2\CSharp\Ruby\openstudio\sketchup_plugin\user_scripts\Alter or Add Model Elements\Add_Shading_Controls.rb")
  5. Visualize the results back to Rhino/Grasshopper. This is the easiest part once we get steps 1-4 to work, and we have already built-in functionalities that can handle this.