From 08feff2678018c2f4c6a5a0a55e59a11bd6c644f Mon Sep 17 00:00:00 2001 From: Chris Mackey Date: Tue, 2 May 2017 23:09:19 -0400 Subject: [PATCH] Now Works with OneBuilding --- ...Ladybug_Open EPW And STAT Weather Files.py | 64 ++++++------------ ...bug_Open EPW And STAT Weather Files.ghuser | Bin 7546 -> 7167 bytes 2 files changed, 19 insertions(+), 45 deletions(-) diff --git a/src/Ladybug_Open EPW And STAT Weather Files.py b/src/Ladybug_Open EPW And STAT Weather Files.py index 9bfcbf6..86791b9 100644 --- a/src/Ladybug_Open EPW And STAT Weather Files.py +++ b/src/Ladybug_Open EPW And STAT Weather Files.py @@ -37,7 +37,7 @@ """ ghenv.Component.Name = "Ladybug_Open EPW And STAT Weather Files" ghenv.Component.NickName = 'EPW+STAT' -ghenv.Component.Message = 'VER 0.0.64\nFEB_05_2017' +ghenv.Component.Message = 'VER 0.0.64\nMAY_02_2017' ghenv.Component.IconDisplayMode = ghenv.Component.IconDisplayMode.application ghenv.Component.Category = "Ladybug" ghenv.Component.SubCategory = "0 | Ladybug" @@ -55,33 +55,7 @@ import System -def updateUrl(oldurl): - """Update old url to new url""" - # old: http://apps1.eere.energy.gov/buildings/energyplus/weatherdata/4_north_and_central_america_wmo_region_4/1_usa/USA_PA_Philadelphia.Intl.AP.724080_TMY3.zip - # new: https://www.energyplus.net/weather-download/north_and_central_america_wmo_region_4/USA/PA/USA_PA_Philadelphia.Intl.AP.724080_TMY3/all - - if not oldurl: return - - oldurl = oldurl.replace("https://energyplus.net", "https://www.energyplus.net") - if not _weatherFileURL.endswith('.zip'): return oldurl - - oldurl = oldurl \ - .replace("http://apps1.eere.energy.gov/buildings/energyplus/weatherdata", \ - "https://www.energyplus.net/weather-download") - linkdata = oldurl.split("/") - # update region name - linkdata[4] = ("_").join(linkdata[4].split("_")[1:]) - city, state = linkdata[-1].split("_")[:2] - if oldurl.find("CAN_")==-1 and oldurl.find("USA_")==-1: - state = '' - linkdata.insert(5, "") - - linkdata[5] = city + "/" + state - linkdata[-1] = linkdata[-1].replace(".zip","/all") - - updatedLink = "/".join(linkdata) - return updatedLink - + def checkTheInputs(_weatherFileURL): # import the classes if sc.sticky.has_key('ladybug_release'): @@ -98,14 +72,8 @@ def checkTheInputs(_weatherFileURL): return -1 lb_defaultFolder = sc.sticky["Ladybug_DefaultFolder"] - - - - #Check the inputs to make sure that a valid DOE URL has been connected. - _weatherFileURL = updateUrl(_weatherFileURL) - - if _weatherFileURL and \ - _weatherFileURL.startswith('https://www.energyplus.net/weather-download/') and _weatherFileURL.endswith('all'): + + if _weatherFileURL and (_weatherFileURL.startswith('https://') or _weatherFileURL.startswith('http://')): folderName = _weatherFileURL.split('/')[-2] checkData = True else: @@ -163,17 +131,23 @@ def unzip(source_filename, dest_dir): path = os.path.join(path, word) zf.extract(member, path) -def addresses(filename, directory): - filenamewords = filename.replace(".zip", "") - epw = filenamewords + '.epw' - stat = filenamewords + '.stat' +def addresses(directory): + epw, stat = None, None + for file in os.listdir(directory): + if file.endswith('.epw'): + epw = directory + '/' + file + elif file.endswith('.stat'): + stat = directory + '/' + file + return epw, stat def checkIfAlreadyDownloaded(workingDir, url): - zipFileAddress = workingDir + url.split('/')[-2] + '.zip' - epw, stat = addresses(zipFileAddress, workingDir) - if os.path.isfile(epw) == True and os.path.isfile(stat) == True: - return True, epw, stat + if os.path.isdir(workingDir): + epw, stat = addresses(workingDir) + if os.path.isfile(epw) == True and os.path.isfile(stat) == True: + return True, epw, stat + else: + return False, None, None else: return False, None, None @@ -199,5 +173,5 @@ def checkIfAlreadyDownloaded(workingDir, url): #Unzip the file and load it into Grasshopper!!!! if checkData == True and checkData2 == False and zipFileAddress: unzip(zipFileAddress, workingDir) - epwFile, statFile = addresses(zipFileAddress, workingDir) + epwFile, statFile = addresses(workingDir) else: pass \ No newline at end of file diff --git a/userObjects/Ladybug_Open EPW And STAT Weather Files.ghuser b/userObjects/Ladybug_Open EPW And STAT Weather Files.ghuser index a90a2ee8fd13a8a0df7deddeef717ccc323782d4..58b9abdd145881a7a4518c20d2890b30fbe0184d 100644 GIT binary patch literal 7167 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 B643wv literal 7546 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