Hi everyone,
Is there a way to load an OpenStudio measure directly from the Building Component Library (or somewhere else online) to avoid having to load it from a local file?
-Chris
Hi everyone,
Is there a way to load an OpenStudio measure directly from the Building Component Library (or somewhere else online) to avoid having to load it from a local file?
-Chris
We do not support this right now and we probably don’t want to add one since it can be against the licensing and copyright (the pop-up window to agree with terms, …). But you can write your own component to do so. Something like this should work:
Use a GHPython component with a single input and change the input name to url
and set the type to string. Rename output to measure_file
.
This code download the files to c:\ladybug\measures
you can change that to your custom folder.
import System
import zipfile
import shutil
import os
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
def unzip_file(zip_file, target_folder):
with zipfile.ZipFile(zip_file) as zf:
for f in zf.namelist():
if f.endswith('/'):
try:
os.makedirs(f)
except:
pass
else:
zf.extract(f, target_folder)
return f.split('/')[0].split('\\')[0]
def main(url, target_folder):
path, name = os.path.split(url)
name = name.split('?')[0]
temp_folder = os.path.join(target_folder, 'temp')
if not os.path.isdir(temp_folder):
os.mkdir(temp_folder)
zip_file = os.path.join(temp_folder, '%s.zip' % name)
if not os.path.isfile(zip_file):
# download file
client = System.Net.WebClient()
client.DownloadFile(url, zip_file)
client.Dispose()
# unzip file
measure_folder = unzip_file(zip_file, target_folder)
# return path to measure
return '"%s"' % os.path.join(target_folder, measure_folder, 'measure.rb')
target_folder = r'c:\ladybug\measures'
measure_file = main(url, target_folder)