Skip to content

Instantly share code, notes, and snippets.

@jmarrec
Created August 27, 2025 17:36
Show Gist options
  • Save jmarrec/5fd26911e5c321befe738541db3fcc61 to your computer and use it in GitHub Desktop.
Save jmarrec/5fd26911e5c321befe738541db3fcc61 to your computer and use it in GitHub Desktop.
E+ Issue #11123 - Full Reproducer
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "4eb8f501",
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.insert(0, \"/usr/local/EnergyPlus-25-1-0\")\n",
"#sys.path.insert(0, \"/home/julien/Software/Others/EnergyPlus-build-release/Products\")\n",
"from pyenergyplus.api import EnergyPlusAPI\n",
"\n",
"import openstudio\n",
"import sqlite3"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "18192b13",
"metadata": {},
"outputs": [],
"source": [
"SQL_QUERY_TOTAL_SITE_KBTU = \"\"\"\n",
"SELECT Value FROM TabularDataWithStrings\n",
" WHERE ReportName='AnnualBuildingUtilityPerformanceSummary'\n",
" AND ReportForString='Entire Facility'\n",
" AND TableName='Site and Source Energy'\n",
" AND RowName='Total Site Energy'\n",
" AND ColumnName='Total Energy'\n",
" AND Units='GJ'\n",
"\"\"\"\n",
"\n",
"def get_total_site_energy(sql_path):\n",
" assert sql_path.is_file()\n",
" sql_uri = f\"{sql_path.absolute().as_uri()}?mode=ro\"\n",
" with sqlite3.connect(sql_uri, uri=True) as con:\n",
" cursor = con.cursor()\n",
" r = cursor.execute(SQL_QUERY_TOTAL_SITE_KBTU).fetchone()\n",
" assert r\n",
" return float(r[0])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "ccf9c45b",
"metadata": {},
"outputs": [],
"source": [
"EP_ROOT = Path('~/Software/Others/EnergyPlus').expanduser()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "5c4b5081",
"metadata": {},
"outputs": [],
"source": [
"# template_file = Path('RefBldgMediumOfficeNew2004_Chicago.idf')\n",
"\n",
"template_file = EP_ROOT / \"testfiles\" / \"5ZoneAirCooled.idf\"\n",
"assert template_file.is_file()\n",
"base_file = Path('base.idf')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "bf611261",
"metadata": {},
"outputs": [],
"source": [
"DEBUG_EMS = True"
]
},
{
"cell_type": "markdown",
"id": "2d1696a4",
"metadata": {},
"source": [
"# Grab Window names"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "afc3a7b3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['DB-1', 'DF-1', 'WB-1', 'WF-1', 'WL-1', 'WR-1']"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"w = openstudio.Workspace.load(template_file).get()\n",
"WINDOW_NAMES = sorted([x.nameString() for x in w.getObjectsByType('FenestrationSurface:Detailed')])\n",
"WINDOW_NAMES"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d6c56f1a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"()"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"w.getObjectsByType('Output:EnergyManagementSystem')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "8e05978f",
"metadata": {},
"outputs": [],
"source": [
"if len(w.getObjectsByType('Output:EnergyManagementSystem')) == 0:\n",
" out_ems = w.addObject(openstudio.IdfObject(openstudio.IddObjectType(\"Output:EnergyManagementSystem\"))).get()\n",
"\n",
" # Actuator Availability Dictionary Reporting\n",
" out_ems.setString(0, \"Verbose\")\n",
" # Internal Variable Availability Dictionary Reporting\n",
" out_ems.setString(1, \"Verbose\")\n",
" # EnergyPlus Runtime Language Debug Output Level\n",
" out_ems.setString(2, \"Verbose\" if DEBUG_EMS else \"ErrorsOnly\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "212af95e",
"metadata": {},
"outputs": [],
"source": [
"if not w.getObjectByTypeAndName('Construction', 'gsA').is_initialized():\n",
" gsA_cons = w.addObject(openstudio.IdfObject(openstudio.IddObjectType(\"Construction\"))).get()\n",
" gsA_cons.setName(\"gsA\")\n",
"\n",
" gsA_mat = w.addObject(openstudio.IdfObject(openstudio.IddObjectType(\"WindowMaterial:SimpleGlazingSystem\"))).get()\n",
" gsA_mat.setName(\"gsA_mat\")\n",
" gsA_mat.setDouble(1, 5.9) # U-Factor (W/m2*K)\n",
" gsA_mat.setDouble(2, 0.98) # SHGC\n",
" \n",
" gsA_cons.setString(1, gsA_mat.nameString())"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "76072ba9",
"metadata": {},
"outputs": [],
"source": [
"if len(w.getObjectsByType(\"Output:SQLite\")) == 0:\n",
" output_sqlite = w.addObject(openstudio.IdfObject(openstudio.IddObjectType(\"Output:SQLite\"))).get()\n",
" output_sqlite.setString(0, \"SimpleAndTabular\")"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "84dbfa53",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"w.save(base_file, True)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "6672546d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EnergyPlus Starting\n",
"EnergyPlus, Version 25.1.0-68a4a7c774, YMD=2025.08.27 18:29\n",
"Initializing Response Factors\n",
"Calculating CTFs for \"ROOF-1\"\n",
"Calculating CTFs for \"WALL-1\"\n",
"Calculating CTFs for \"FLOOR-SLAB-1\"\n",
"Calculating CTFs for \"INT-WALL-1\"\n",
"Initializing Window Optical Properties\n",
"Initializing Solar Calculations\n",
"Allocate Solar Module Arrays\n",
"Initializing Zone and Enclosure Report Variables\n",
"Initializing Surface (Shading) Report Variables\n",
"Computing Interior Solar Absorption Factors\n",
"Determining Shadowing Combinations\n",
"Computing Window Shade Absorption Factors\n",
"Proceeding with Initializing Solar Calculations\n",
"Initializing Surfaces\n",
"Initializing Outdoor environment for Surfaces\n",
"Setting up Surface Reporting Variables\n",
"Initializing Temperature and Flux Histories\n",
"Initializing Window Shading\n",
"Computing Interior Absorption Factors\n",
"Computing Interior Diffuse Solar Absorption Factors\n",
"Initializing Solar Heat Gains\n",
"Initializing Internal Heat Gains\n",
"Initializing Interior Solar Distribution\n",
"Initializing Interior Convection Coefficients\n",
"Gathering Information for Predefined Reporting\n",
"Completed Initializing Surface Heat Balance\n",
"Calculate Outside Surface Heat Balance\n",
"Calculate Inside Surface Heat Balance\n",
"Calculate Air Heat Balance\n",
"Initializing HVAC\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Re-zeroing zone sizing arrays\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Calculating System sizing\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Calculating System sizing\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Adjusting Air System Sizing\n",
"Adjusting Standard 62.1 Ventilation Sizing\n",
"Initializing Simulation\n",
"Reporting Surfaces\n",
"Beginning Primary Simulation\n",
"Initializing New Environment Parameters\n",
"Warming up {1}\n",
"Warming up {2}\n",
"Warming up {3}\n",
"Warming up {4}\n",
"Warming up {5}\n",
"Warming up {6}\n",
"Starting Simulation at 01/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=01/21/2013\n",
"Continuing Simulation at 01/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=02/10/2013\n",
"Continuing Simulation at 02/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/02/2013\n",
"Continuing Simulation at 03/02/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/22/2013\n",
"Continuing Simulation at 03/22/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=04/11/2013\n",
"Continuing Simulation at 04/11/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/01/2013\n",
"Continuing Simulation at 05/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/21/2013\n",
"Continuing Simulation at 05/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/10/2013\n",
"Continuing Simulation at 06/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/30/2013\n",
"Continuing Simulation at 06/30/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=07/20/2013\n",
"Continuing Simulation at 07/20/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/09/2013\n",
"Continuing Simulation at 08/09/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/29/2013\n",
"Continuing Simulation at 08/29/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=09/18/2013\n",
"Continuing Simulation at 09/18/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/08/2013\n",
"Continuing Simulation at 10/08/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/28/2013\n",
"Continuing Simulation at 10/28/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=11/17/2013\n",
"Continuing Simulation at 11/17/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/07/2013\n",
"Continuing Simulation at 12/07/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/27/2013\n",
"Continuing Simulation at 12/27/2013 for RUN PERIOD 1\n",
"Writing tabular output file results using HTML format.\n",
"Writing final SQL reports\n",
"EnergyPlus Run Time=00hr 00min 8.11sec\n",
"EnergyPlus Completed Successfully.\n"
]
}
],
"source": [
"!energyplus -a -w USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw -d out-base base.idf"
]
},
{
"cell_type": "markdown",
"id": "551a1844",
"metadata": {},
"source": [
"# Make EMS"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "a0e66339",
"metadata": {},
"outputs": [],
"source": [
"w = openstudio.Workspace.load(base_file).get()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "8b4a71ce",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ems_civ = w.addObject(openstudio.IdfObject(openstudio.IddObjectType(\"EnergyManagementSystem:ConstructionIndexVariable\"))).get()\n",
"ems_civ.setName(\"gsA_civ\")\n",
"ems_civ.setString(1, \"gsA\")"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "9688f1d7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<openstudio.openstudioutilitiescore.OptionalString; proxy of <Swig Object of type 'boost::optional< std::string > *' at 0x73a699d01aa0> >"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ems_prog = w.addObject(openstudio.IdfObject(openstudio.IddObjectType(\"EnergyManagementSystem:Program\"))).get()\n",
"ems_prog.setName(\"EMS_Program\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "425bbc09",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EnergyManagementSystem:ProgramCallingManager,\n",
" EMS_Program_CallingManager, !- Name\n",
" BeginTimestepBeforePredictor, !- EnergyPlus Model Calling Point\n",
" EMS_Program; !- Program Name 1\n",
"\n",
"\n"
]
}
],
"source": [
"ems_prog_calling_mgr = w.addObject(openstudio.IdfObject(openstudio.IddObjectType(\"EnergyManagementSystem:ProgramCallingManager\"))).get()\n",
"ems_prog_calling_mgr.setName(\"EMS_Program_CallingManager\")\n",
"ems_prog_calling_mgr.setString(1, \"BeginTimestepBeforePredictor\")\n",
"ems_prog_calling_mgr.setString(2, ems_prog.nameString())\n",
"\n",
"print(ems_prog_calling_mgr)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "24eadb79",
"metadata": {},
"outputs": [],
"source": [
"for window_name in WINDOW_NAMES:\n",
" ems_act = w.addObject(openstudio.IdfObject(openstudio.IddObjectType(\"EnergyManagementSystem:Actuator\"))).get()\n",
" ems_act.setName(f\"{window_name.replace('-', '_').replace(' ', '_')}_Construct\")\n",
" ems_act.setString(1, window_name)\n",
" ems_act.setString(2, \"Surface\")\n",
" ems_act.setString(3, \"Construction State\")\n",
"\n",
" ems_prog.pushExtensibleGroup([f\"SET {ems_act.nameString()} = {ems_civ.nameString()}\"])"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "c7a84d93",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EnergyManagementSystem:Program,\n",
" EMS_Program, !- Name\n",
" SET DB_1_Construct = gsA_civ, !- Program Line 1\n",
" SET DF_1_Construct = gsA_civ, !- Program Line 2\n",
" SET WB_1_Construct = gsA_civ, !- Program Line 3\n",
" SET WF_1_Construct = gsA_civ, !- Program Line 4\n",
" SET WL_1_Construct = gsA_civ, !- Program Line 5\n",
" SET WR_1_Construct = gsA_civ; !- Program Line 6\n",
"\n",
"\n"
]
}
],
"source": [
"print(ems_prog)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "c61dddb3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"w.save('ems.idf', True)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "6960b71f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EnergyPlus Starting\n",
"EnergyPlus, Version 25.1.0-68a4a7c774, YMD=2025.08.27 18:29\n",
"Initializing Response Factors\n",
"Calculating CTFs for \"ROOF-1\"\n",
"Calculating CTFs for \"WALL-1\"\n",
"Calculating CTFs for \"FLOOR-SLAB-1\"\n",
"Calculating CTFs for \"INT-WALL-1\"\n",
"Initializing Window Optical Properties\n",
"Initializing Solar Calculations\n",
"Allocate Solar Module Arrays\n",
"Initializing Zone and Enclosure Report Variables\n",
"Initializing Surface (Shading) Report Variables\n",
"Computing Interior Solar Absorption Factors\n",
"Determining Shadowing Combinations\n",
"Computing Window Shade Absorption Factors\n",
"Proceeding with Initializing Solar Calculations\n",
"Initializing Surfaces\n",
"Initializing Outdoor environment for Surfaces\n",
"Setting up Surface Reporting Variables\n",
"Initializing Temperature and Flux Histories\n",
"Initializing Window Shading\n",
"Computing Interior Absorption Factors\n",
"Computing Interior Diffuse Solar Absorption Factors\n",
"Initializing Solar Heat Gains\n",
"Initializing Internal Heat Gains\n",
"Initializing Interior Solar Distribution\n",
"Initializing Interior Convection Coefficients\n",
"Gathering Information for Predefined Reporting\n",
"Completed Initializing Surface Heat Balance\n",
"Calculate Outside Surface Heat Balance\n",
"Calculate Inside Surface Heat Balance\n",
"Calculate Air Heat Balance\n",
"Initializing HVAC\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Re-zeroing zone sizing arrays\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Calculating System sizing\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Calculating System sizing\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Adjusting Air System Sizing\n",
"Adjusting Standard 62.1 Ventilation Sizing\n",
"Initializing Simulation\n",
"Reporting Surfaces\n",
"Beginning Primary Simulation\n",
"Initializing New Environment Parameters\n",
"Warming up {1}\n",
"Warming up {2}\n",
"Warming up {3}\n",
"Warming up {4}\n",
"Warming up {5}\n",
"Warming up {6}\n",
"Starting Simulation at 01/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=01/21/2013\n",
"Continuing Simulation at 01/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=02/10/2013\n",
"Continuing Simulation at 02/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/02/2013\n",
"Continuing Simulation at 03/02/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/22/2013\n",
"Continuing Simulation at 03/22/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=04/11/2013\n",
"Continuing Simulation at 04/11/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/01/2013\n",
"Continuing Simulation at 05/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/21/2013\n",
"Continuing Simulation at 05/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/10/2013\n",
"Continuing Simulation at 06/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/30/2013\n",
"Continuing Simulation at 06/30/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=07/20/2013\n",
"Continuing Simulation at 07/20/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/09/2013\n",
"Continuing Simulation at 08/09/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/29/2013\n",
"Continuing Simulation at 08/29/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=09/18/2013\n",
"Continuing Simulation at 09/18/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/08/2013\n",
"Continuing Simulation at 10/08/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/28/2013\n",
"Continuing Simulation at 10/28/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=11/17/2013\n",
"Continuing Simulation at 11/17/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/07/2013\n",
"Continuing Simulation at 12/07/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/27/2013\n",
"Continuing Simulation at 12/27/2013 for RUN PERIOD 1\n",
"Writing tabular output file results using HTML format.\n",
"Writing final SQL reports\n",
"EnergyPlus Run Time=00hr 00min 8.93sec\n",
"EnergyPlus Completed Successfully.\n"
]
}
],
"source": [
"!energyplus -a -w USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw -d out-ems ems.idf"
]
},
{
"cell_type": "markdown",
"id": "aa0ba3a1",
"metadata": {},
"source": [
"# Create Plugin/API program"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "c097355c",
"metadata": {},
"outputs": [],
"source": [
"def create_api_or_plugin_content(is_plugin: bool = True, include_api_fully_ready: bool = True):\n",
" content = \"\"\n",
" if is_plugin:\n",
" content = \"\"\"from pyenergyplus.plugin import EnergyPlusPlugin\n",
"\n",
"\n",
"class SwitchGSA(EnergyPlusPlugin):\n",
"\n",
" def __init__(self):\n",
" # init parent class\n",
" super().__init__()\n",
"\"\"\"\n",
" else:\n",
" content = \"\"\"class SwitchGSA:\n",
" \n",
" def __init__(self, api):\n",
" self.api = api\n",
"\"\"\"\n",
" content += \"\"\"\n",
" self.need_to_get_handles = True\n",
" self.gsa_construction_handle = None\n",
" self.window_to_handles = {}\n",
"\n",
" def on_begin_timestep_before_predictor(self, state) -> int:\"\"\"\n",
" if include_api_fully_ready:\n",
" content += \"\"\"\n",
" if not self.api.exchange.api_data_fully_ready(state):\n",
" return 0\n",
"\"\"\"\n",
" content += \"\"\"\n",
" if self.need_to_get_handles:\n",
"\n",
" self.gsa_construction_handle = self.api.exchange.get_construction_handle(state, \"gsA\")\n",
" assert self.gsa_construction_handle >= 0\n",
"\n",
" window_names = self.api.exchange.get_object_names(state, \"FenestrationSurface:Detailed\")\n",
" for window_name in window_names:\n",
" h = self.api.exchange.get_actuator_handle(\n",
" state,\n",
" \"Surface\",\n",
" \"Construction State\",\n",
" window_name,\n",
" )\n",
" assert h >= 0\n",
" self.window_to_handles[window_name] = h\n",
"\n",
" self.need_to_get_handles = False\n",
"\n",
" [\n",
" self.api.exchange.set_actuator_value(\n",
" state,\n",
" window_handle,\n",
" self.gsa_construction_handle,\n",
" )\n",
" for window_name, window_handle in self.window_to_handles.items()\n",
" ]\n",
"\n",
" return 0\n",
"\"\"\"\n",
" \n",
" return content"
]
},
{
"cell_type": "markdown",
"id": "1a8f8044",
"metadata": {},
"source": [
"# API"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "8a918f17",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"class SwitchGSA:\n",
" \n",
" def __init__(self, api):\n",
" self.api = api\n",
"\n",
" self.need_to_get_handles = True\n",
" self.gsa_construction_handle = None\n",
" self.window_to_handles = {}\n",
"\n",
" def on_begin_timestep_before_predictor(self, state) -> int:\n",
" if not self.api.exchange.api_data_fully_ready(state):\n",
" return 0\n",
"\n",
" if self.need_to_get_handles:\n",
"\n",
" self.gsa_construction_handle = self.api.exchange.get_construction_handle(state, \"gsA\")\n",
" assert self.gsa_construction_handle >= 0\n",
"\n",
" window_names = self.api.exchange.get_object_names(state, \"FenestrationSurface:Detailed\")\n",
" for window_name in window_names:\n",
" h = self.api.exchange.get_actuator_handle(\n",
" state,\n",
" \"Surface\",\n",
" \"Construction State\",\n",
" window_name,\n",
" )\n",
" assert h >= 0\n",
" self.window_to_handles[window_name] = h\n",
"\n",
" self.need_to_get_handles = False\n",
"\n",
" [\n",
" self.api.exchange.set_actuator_value(\n",
" state,\n",
" window_handle,\n",
" self.gsa_construction_handle,\n",
" )\n",
" for window_name, window_handle in self.window_to_handles.items()\n",
" ]\n",
"\n",
" return 0\n",
"\n"
]
}
],
"source": [
"api_content = create_api_or_plugin_content(is_plugin=False, include_api_fully_ready=True)\n",
"print(api_content)\n",
"exec(api_content)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "d9a7d747",
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EnergyPlus Starting\n",
"EnergyPlus, Version 25.1.0-68a4a7c774, YMD=2025.08.27 18:29\n",
"Initializing Response Factors\n",
"Calculating CTFs for \"ROOF-1\"\n",
"Calculating CTFs for \"WALL-1\"\n",
"Calculating CTFs for \"FLOOR-SLAB-1\"\n",
"Calculating CTFs for \"INT-WALL-1\"\n",
"Initializing Window Optical Properties\n",
"Initializing Solar Calculations\n",
"Allocate Solar Module Arrays\n",
"Initializing Zone and Enclosure Report Variables\n",
"Initializing Surface (Shading) Report Variables\n",
"Computing Interior Solar Absorption Factors\n",
"Determining Shadowing Combinations\n",
"Computing Window Shade Absorption Factors\n",
"Proceeding with Initializing Solar Calculations\n",
"Initializing Surfaces\n",
"Initializing Outdoor environment for Surfaces\n",
"Setting up Surface Reporting Variables\n",
"Initializing Temperature and Flux Histories\n",
"Initializing Window Shading\n",
"Computing Interior Absorption Factors\n",
"Computing Interior Diffuse Solar Absorption Factors\n",
"Initializing Solar Heat Gains\n",
"Initializing Internal Heat Gains\n",
"Initializing Interior Solar Distribution\n",
"Initializing Interior Convection Coefficients\n",
"Gathering Information for Predefined Reporting\n",
"Completed Initializing Surface Heat Balance\n",
"Calculate Outside Surface Heat Balance\n",
"Calculate Inside Surface Heat Balance\n",
"Calculate Air Heat Balance\n",
"Initializing HVAC\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Re-zeroing zone sizing arrays\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Calculating System sizing\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Calculating System sizing\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Adjusting Air System Sizing\n",
"Adjusting Standard 62.1 Ventilation Sizing\n",
"Initializing Simulation\n",
"Reporting Surfaces\n",
"Beginning Primary Simulation\n",
"Initializing New Environment Parameters\n",
"Warming up {1}\n",
"Warming up {2}\n",
"Warming up {3}\n",
"Warming up {4}\n",
"Warming up {5}\n",
"Warming up {6}\n",
"Starting Simulation at 01/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=01/21/2013\n",
"Continuing Simulation at 01/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=02/10/2013\n",
"Continuing Simulation at 02/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/02/2013\n",
"Continuing Simulation at 03/02/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/22/2013\n",
"Continuing Simulation at 03/22/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=04/11/2013\n",
"Continuing Simulation at 04/11/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/01/2013\n",
"Continuing Simulation at 05/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/21/2013\n",
"Continuing Simulation at 05/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/10/2013\n",
"Continuing Simulation at 06/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/30/2013\n",
"Continuing Simulation at 06/30/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=07/20/2013\n",
"Continuing Simulation at 07/20/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/09/2013\n",
"Continuing Simulation at 08/09/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/29/2013\n",
"Continuing Simulation at 08/29/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=09/18/2013\n",
"Continuing Simulation at 09/18/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/08/2013\n",
"Continuing Simulation at 10/08/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/28/2013\n",
"Continuing Simulation at 10/28/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=11/17/2013\n",
"Continuing Simulation at 11/17/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/07/2013\n",
"Continuing Simulation at 12/07/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/27/2013\n",
"Continuing Simulation at 12/27/2013 for RUN PERIOD 1\n",
"Writing tabular output file results using HTML format.\n",
"Writing final SQL reports\n",
"EnergyPlus Run Time=00hr 00min 9.37sec\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"EnergyPlus Completed Successfully.\n"
]
},
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"api = EnergyPlusAPI()\n",
"state = api.state_manager.new_state()\n",
"switch_gsa = SwitchGSA(api=api)\n",
"api.runtime.callback_begin_system_timestep_before_predictor(state, switch_gsa.on_begin_timestep_before_predictor)\n",
"api.runtime.run_energyplus(\n",
" state,\n",
" [\n",
" \"-a\",\n",
" \"-w\", \"USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw\",\n",
" \"-d\", \"out-api\",\n",
" str(base_file),\n",
" ],\n",
")"
]
},
{
"cell_type": "markdown",
"id": "8ca67814",
"metadata": {},
"source": [
"# Plugin"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "b494f962",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1395"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Path('plugin.py').write_text(create_api_or_plugin_content(is_plugin=True, include_api_fully_ready=True))"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "ccf290f9",
"metadata": {},
"outputs": [],
"source": [
"w = openstudio.Workspace.load(base_file).get()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "29cb56df",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"PythonPlugin:Instance,\n",
" Python Plugin Instance 1, !- Name\n",
" Yes, !- Run During Warmup Days\n",
" plugin, !- Python Module Name\n",
" SwitchGSA; !- Plugin Class Name\n",
"\n",
"\n"
]
}
],
"source": [
"python_plug = w.addObject(openstudio.IdfObject(openstudio.IddObjectType(\"PythonPlugin:Instance\"))).get()\n",
"python_plug.setString(1, \"Yes\")\n",
"python_plug.setString(2, \"plugin\")\n",
"python_plug.setString(3, \"SwitchGSA\")\n",
"print(python_plug)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "13f757df",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"w.save('plugin.idf', True)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "c0071255",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EnergyPlus Starting\n",
"EnergyPlus, Version 25.1.0-68a4a7c774, YMD=2025.08.27 18:29\n",
"Error processing line 1 of /home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable__.eplussql-0.1.0.pth:\n",
"\n",
" Traceback (most recent call last):\n",
" File \"<frozen site>\", line 195, in addpackage\n",
" File \"<string>\", line 1, in <module>\n",
" File \"/home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable___eplussql_0_1_0_finder.py\", line 7, in <module>\n",
" from pathlib import Path\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/pathlib.py\", line 20, in <module>\n",
" from urllib.parse import quote_from_bytes as urlquote_from_bytes\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/urllib/parse.py\", line 36, in <module>\n",
" import math\n",
" ModuleNotFoundError: No module named 'math'\n",
"\n",
"Remainder of file ignored\n",
"Error processing line 1 of /home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable__.eplussql-0.1.0.pth:\n",
"\n",
" Traceback (most recent call last):\n",
" File \"<frozen site>\", line 195, in addpackage\n",
" File \"<string>\", line 1, in <module>\n",
" File \"/home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable___eplussql_0_1_0_finder.py\", line 7, in <module>\n",
" from pathlib import Path\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/pathlib.py\", line 20, in <module>\n",
" from urllib.parse import quote_from_bytes as urlquote_from_bytes\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/urllib/parse.py\", line 36, in <module>\n",
" import math\n",
" ModuleNotFoundError: No module named 'math'\n",
"\n",
"Remainder of file ignored\n",
"Initializing Response Factors\n",
"Calculating CTFs for \"ROOF-1\"\n",
"Calculating CTFs for \"WALL-1\"\n",
"Calculating CTFs for \"FLOOR-SLAB-1\"\n",
"Calculating CTFs for \"INT-WALL-1\"\n",
"Initializing Window Optical Properties\n",
"Initializing Solar Calculations\n",
"Allocate Solar Module Arrays\n",
"Initializing Zone and Enclosure Report Variables\n",
"Initializing Surface (Shading) Report Variables\n",
"Computing Interior Solar Absorption Factors\n",
"Determining Shadowing Combinations\n",
"Computing Window Shade Absorption Factors\n",
"Proceeding with Initializing Solar Calculations\n",
"Initializing Surfaces\n",
"Initializing Outdoor environment for Surfaces\n",
"Setting up Surface Reporting Variables\n",
"Initializing Temperature and Flux Histories\n",
"Initializing Window Shading\n",
"Computing Interior Absorption Factors\n",
"Computing Interior Diffuse Solar Absorption Factors\n",
"Initializing Solar Heat Gains\n",
"Initializing Internal Heat Gains\n",
"Initializing Interior Solar Distribution\n",
"Initializing Interior Convection Coefficients\n",
"Gathering Information for Predefined Reporting\n",
"Completed Initializing Surface Heat Balance\n",
"Calculate Outside Surface Heat Balance\n",
"Calculate Inside Surface Heat Balance\n",
"Calculate Air Heat Balance\n",
"Initializing HVAC\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Re-zeroing zone sizing arrays\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Calculating System sizing\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Calculating System sizing\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Adjusting Air System Sizing\n",
"Adjusting Standard 62.1 Ventilation Sizing\n",
"Initializing Simulation\n",
"Reporting Surfaces\n",
"Beginning Primary Simulation\n",
"Initializing New Environment Parameters\n",
"Warming up {1}\n",
"Warming up {2}\n",
"Warming up {3}\n",
"Warming up {4}\n",
"Warming up {5}\n",
"Warming up {6}\n",
"Starting Simulation at 01/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=01/21/2013\n",
"Continuing Simulation at 01/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=02/10/2013\n",
"Continuing Simulation at 02/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/02/2013\n",
"Continuing Simulation at 03/02/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/22/2013\n",
"Continuing Simulation at 03/22/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=04/11/2013\n",
"Continuing Simulation at 04/11/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/01/2013\n",
"Continuing Simulation at 05/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/21/2013\n",
"Continuing Simulation at 05/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/10/2013\n",
"Continuing Simulation at 06/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/30/2013\n",
"Continuing Simulation at 06/30/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=07/20/2013\n",
"Continuing Simulation at 07/20/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/09/2013\n",
"Continuing Simulation at 08/09/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/29/2013\n",
"Continuing Simulation at 08/29/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=09/18/2013\n",
"Continuing Simulation at 09/18/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/08/2013\n",
"Continuing Simulation at 10/08/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/28/2013\n",
"Continuing Simulation at 10/28/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=11/17/2013\n",
"Continuing Simulation at 11/17/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/07/2013\n",
"Continuing Simulation at 12/07/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/27/2013\n",
"Continuing Simulation at 12/27/2013 for RUN PERIOD 1\n",
"Writing tabular output file results using HTML format.\n",
"Writing final SQL reports\n",
"EnergyPlus Run Time=00hr 00min 9.38sec\n",
"EnergyPlus Completed Successfully.\n"
]
}
],
"source": [
"!energyplus -a -w USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw -d out-plugin plugin.idf"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "2fdd8131",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"python_plug.setString(1, \"No\")\n",
"w.save('plugin_nowarmup.idf', True)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "9ad56665",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"PythonPlugin:Instance,\n",
" Python Plugin Instance 1, !- Name\n",
" No, !- Run During Warmup Days\n",
" plugin, !- Python Module Name\n",
" SwitchGSA; !- Plugin Class Name\n",
"\n",
"\n"
]
}
],
"source": [
"print(python_plug)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "78214da0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EnergyPlus Starting\n",
"EnergyPlus, Version 25.1.0-68a4a7c774, YMD=2025.08.27 18:30\n",
"Error processing line 1 of /home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable__.eplussql-0.1.0.pth:\n",
"\n",
" Traceback (most recent call last):\n",
" File \"<frozen site>\", line 195, in addpackage\n",
" File \"<string>\", line 1, in <module>\n",
" File \"/home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable___eplussql_0_1_0_finder.py\", line 7, in <module>\n",
" from pathlib import Path\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/pathlib.py\", line 20, in <module>\n",
" from urllib.parse import quote_from_bytes as urlquote_from_bytes\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/urllib/parse.py\", line 36, in <module>\n",
" import math\n",
" ModuleNotFoundError: No module named 'math'\n",
"\n",
"Remainder of file ignored\n",
"Error processing line 1 of /home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable__.eplussql-0.1.0.pth:\n",
"\n",
" Traceback (most recent call last):\n",
" File \"<frozen site>\", line 195, in addpackage\n",
" File \"<string>\", line 1, in <module>\n",
" File \"/home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable___eplussql_0_1_0_finder.py\", line 7, in <module>\n",
" from pathlib import Path\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/pathlib.py\", line 20, in <module>\n",
" from urllib.parse import quote_from_bytes as urlquote_from_bytes\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/urllib/parse.py\", line 36, in <module>\n",
" import math\n",
" ModuleNotFoundError: No module named 'math'\n",
"\n",
"Remainder of file ignored\n",
"Initializing Response Factors\n",
"Calculating CTFs for \"ROOF-1\"\n",
"Calculating CTFs for \"WALL-1\"\n",
"Calculating CTFs for \"FLOOR-SLAB-1\"\n",
"Calculating CTFs for \"INT-WALL-1\"\n",
"Initializing Window Optical Properties\n",
"Initializing Solar Calculations\n",
"Allocate Solar Module Arrays\n",
"Initializing Zone and Enclosure Report Variables\n",
"Initializing Surface (Shading) Report Variables\n",
"Computing Interior Solar Absorption Factors\n",
"Determining Shadowing Combinations\n",
"Computing Window Shade Absorption Factors\n",
"Proceeding with Initializing Solar Calculations\n",
"Initializing Surfaces\n",
"Initializing Outdoor environment for Surfaces\n",
"Setting up Surface Reporting Variables\n",
"Initializing Temperature and Flux Histories\n",
"Initializing Window Shading\n",
"Computing Interior Absorption Factors\n",
"Computing Interior Diffuse Solar Absorption Factors\n",
"Initializing Solar Heat Gains\n",
"Initializing Internal Heat Gains\n",
"Initializing Interior Solar Distribution\n",
"Initializing Interior Convection Coefficients\n",
"Gathering Information for Predefined Reporting\n",
"Completed Initializing Surface Heat Balance\n",
"Calculate Outside Surface Heat Balance\n",
"Calculate Inside Surface Heat Balance\n",
"Calculate Air Heat Balance\n",
"Initializing HVAC\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Re-zeroing zone sizing arrays\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Calculating System sizing\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Calculating System sizing\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Adjusting Air System Sizing\n",
"Adjusting Standard 62.1 Ventilation Sizing\n",
"Initializing Simulation\n",
"Reporting Surfaces\n",
"Beginning Primary Simulation\n",
"Initializing New Environment Parameters\n",
"Warming up {1}\n",
"Warming up {2}\n",
"Warming up {3}\n",
"Warming up {4}\n",
"Warming up {5}\n",
"Warming up {6}\n",
"Starting Simulation at 01/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=01/21/2013\n",
"Continuing Simulation at 01/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=02/10/2013\n",
"Continuing Simulation at 02/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/02/2013\n",
"Continuing Simulation at 03/02/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/22/2013\n",
"Continuing Simulation at 03/22/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=04/11/2013\n",
"Continuing Simulation at 04/11/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/01/2013\n",
"Continuing Simulation at 05/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/21/2013\n",
"Continuing Simulation at 05/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/10/2013\n",
"Continuing Simulation at 06/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/30/2013\n",
"Continuing Simulation at 06/30/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=07/20/2013\n",
"Continuing Simulation at 07/20/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/09/2013\n",
"Continuing Simulation at 08/09/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/29/2013\n",
"Continuing Simulation at 08/29/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=09/18/2013\n",
"Continuing Simulation at 09/18/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/08/2013\n",
"Continuing Simulation at 10/08/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/28/2013\n",
"Continuing Simulation at 10/28/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=11/17/2013\n",
"Continuing Simulation at 11/17/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/07/2013\n",
"Continuing Simulation at 12/07/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/27/2013\n",
"Continuing Simulation at 12/27/2013 for RUN PERIOD 1\n",
"Writing tabular output file results using HTML format.\n",
"Writing final SQL reports\n",
"EnergyPlus Run Time=00hr 00min 9.53sec\n",
"EnergyPlus Completed Successfully.\n"
]
}
],
"source": [
"!energyplus -a -w USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw -d out-plugin-nowarmup plugin_nowarmup.idf"
]
},
{
"cell_type": "markdown",
"id": "e3b614bd",
"metadata": {},
"source": [
"# Fix: the issue is that api.exchange.api_data_fully_ready happens much later"
]
},
{
"cell_type": "markdown",
"id": "6bab736e",
"metadata": {},
"source": [
"## API"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "eb897bdb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"class SwitchGSA:\n",
" \n",
" def __init__(self, api):\n",
" self.api = api\n",
"\n",
" self.need_to_get_handles = True\n",
" self.gsa_construction_handle = None\n",
" self.window_to_handles = {}\n",
"\n",
" def on_begin_timestep_before_predictor(self, state) -> int:\n",
" if self.need_to_get_handles:\n",
"\n",
" self.gsa_construction_handle = self.api.exchange.get_construction_handle(state, \"gsA\")\n",
" assert self.gsa_construction_handle >= 0\n",
"\n",
" window_names = self.api.exchange.get_object_names(state, \"FenestrationSurface:Detailed\")\n",
" for window_name in window_names:\n",
" h = self.api.exchange.get_actuator_handle(\n",
" state,\n",
" \"Surface\",\n",
" \"Construction State\",\n",
" window_name,\n",
" )\n",
" assert h >= 0\n",
" self.window_to_handles[window_name] = h\n",
"\n",
" self.need_to_get_handles = False\n",
"\n",
" [\n",
" self.api.exchange.set_actuator_value(\n",
" state,\n",
" window_handle,\n",
" self.gsa_construction_handle,\n",
" )\n",
" for window_name, window_handle in self.window_to_handles.items()\n",
" ]\n",
"\n",
" return 0\n",
"\n"
]
}
],
"source": [
"api_content = create_api_or_plugin_content(is_plugin=False, include_api_fully_ready=False)\n",
"print(api_content)\n",
"exec(api_content)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "1460d1b5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EnergyPlus Starting\n",
"EnergyPlus, Version 25.1.0-68a4a7c774, YMD=2025.08.27 18:30\n",
"Initializing Response Factors\n",
"Calculating CTFs for \"ROOF-1\"\n",
"Calculating CTFs for \"WALL-1\"\n",
"Calculating CTFs for \"FLOOR-SLAB-1\"\n",
"Calculating CTFs for \"INT-WALL-1\"\n",
"Initializing Window Optical Properties\n",
"Initializing Solar Calculations\n",
"Allocate Solar Module Arrays\n",
"Initializing Zone and Enclosure Report Variables\n",
"Initializing Surface (Shading) Report Variables\n",
"Computing Interior Solar Absorption Factors\n",
"Determining Shadowing Combinations\n",
"Computing Window Shade Absorption Factors\n",
"Proceeding with Initializing Solar Calculations\n",
"Initializing Surfaces\n",
"Initializing Outdoor environment for Surfaces\n",
"Setting up Surface Reporting Variables\n",
"Initializing Temperature and Flux Histories\n",
"Initializing Window Shading\n",
"Computing Interior Absorption Factors\n",
"Computing Interior Diffuse Solar Absorption Factors\n",
"Initializing Solar Heat Gains\n",
"Initializing Internal Heat Gains\n",
"Initializing Interior Solar Distribution\n",
"Initializing Interior Convection Coefficients\n",
"Gathering Information for Predefined Reporting\n",
"Completed Initializing Surface Heat Balance\n",
"Calculate Outside Surface Heat Balance\n",
"Calculate Inside Surface Heat Balance\n",
"Calculate Air Heat Balance\n",
"Initializing HVAC\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Re-zeroing zone sizing arrays\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Calculating System sizing\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Calculating System sizing\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Adjusting Air System Sizing\n",
"Adjusting Standard 62.1 Ventilation Sizing\n",
"Initializing Simulation\n",
"Reporting Surfaces\n",
"Beginning Primary Simulation\n",
"Initializing New Environment Parameters\n",
"Warming up {1}\n",
"Warming up {2}\n",
"Warming up {3}\n",
"Warming up {4}\n",
"Warming up {5}\n",
"Warming up {6}\n",
"Starting Simulation at 01/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=01/21/2013\n",
"Continuing Simulation at 01/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=02/10/2013\n",
"Continuing Simulation at 02/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/02/2013\n",
"Continuing Simulation at 03/02/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/22/2013\n",
"Continuing Simulation at 03/22/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=04/11/2013\n",
"Continuing Simulation at 04/11/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/01/2013\n",
"Continuing Simulation at 05/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/21/2013\n",
"Continuing Simulation at 05/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/10/2013\n",
"Continuing Simulation at 06/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/30/2013\n",
"Continuing Simulation at 06/30/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=07/20/2013\n",
"Continuing Simulation at 07/20/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/09/2013\n",
"Continuing Simulation at 08/09/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/29/2013\n",
"Continuing Simulation at 08/29/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=09/18/2013\n",
"Continuing Simulation at 09/18/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/08/2013\n",
"Continuing Simulation at 10/08/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/28/2013\n",
"Continuing Simulation at 10/28/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=11/17/2013\n",
"Continuing Simulation at 11/17/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/07/2013\n",
"Continuing Simulation at 12/07/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/27/2013\n",
"Continuing Simulation at 12/27/2013 for RUN PERIOD 1\n",
"Writing tabular output file results using HTML format.\n",
"Writing final SQL reports\n",
"EnergyPlus Run Time=00hr 00min 9.60sec\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"EnergyPlus Completed Successfully.\n"
]
},
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"api = EnergyPlusAPI()\n",
"state = api.state_manager.new_state()\n",
"switch_gsa = SwitchGSA(api=api)\n",
"api.runtime.callback_begin_system_timestep_before_predictor(state, switch_gsa.on_begin_timestep_before_predictor)\n",
"api.runtime.run_energyplus(\n",
" state,\n",
" [\n",
" \"-a\",\n",
" \"-w\", \"USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw\",\n",
" \"-d\", \"out-api-nofully_ready\",\n",
" str(base_file),\n",
" ],\n",
")"
]
},
{
"cell_type": "markdown",
"id": "cd668ee6",
"metadata": {},
"source": [
"## Plugin"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "2cdfa76e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1311"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Path('plugin_nofully_ready.py').write_text(create_api_or_plugin_content(is_plugin=True, include_api_fully_ready=False))"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "966da9ae",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"python_plug.setString(1, \"No\")\n",
"python_plug.setString(2, \"plugin_nofully_ready\")\n",
"\n",
"w.save('plugin_nofully_ready.idf', True)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "eb7c338d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EnergyPlus Starting\n",
"EnergyPlus, Version 25.1.0-68a4a7c774, YMD=2025.08.27 18:30\n",
"Error processing line 1 of /home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable__.eplussql-0.1.0.pth:\n",
"\n",
" Traceback (most recent call last):\n",
" File \"<frozen site>\", line 195, in addpackage\n",
" File \"<string>\", line 1, in <module>\n",
" File \"/home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable___eplussql_0_1_0_finder.py\", line 7, in <module>\n",
" from pathlib import Path\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/pathlib.py\", line 20, in <module>\n",
" from urllib.parse import quote_from_bytes as urlquote_from_bytes\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/urllib/parse.py\", line 36, in <module>\n",
" import math\n",
" ModuleNotFoundError: No module named 'math'\n",
"\n",
"Remainder of file ignored\n",
"Error processing line 1 of /home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable__.eplussql-0.1.0.pth:\n",
"\n",
" Traceback (most recent call last):\n",
" File \"<frozen site>\", line 195, in addpackage\n",
" File \"<string>\", line 1, in <module>\n",
" File \"/home/julien/Virtualenvs/py312/lib/python3.12/site-packages/__editable___eplussql_0_1_0_finder.py\", line 7, in <module>\n",
" from pathlib import Path\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/pathlib.py\", line 20, in <module>\n",
" from urllib.parse import quote_from_bytes as urlquote_from_bytes\n",
" File \"/usr/local/EnergyPlus-25-1-0/python_lib/urllib/parse.py\", line 36, in <module>\n",
" import math\n",
" ModuleNotFoundError: No module named 'math'\n",
"\n",
"Remainder of file ignored\n",
"Initializing Response Factors\n",
"Calculating CTFs for \"ROOF-1\"\n",
"Calculating CTFs for \"WALL-1\"\n",
"Calculating CTFs for \"FLOOR-SLAB-1\"\n",
"Calculating CTFs for \"INT-WALL-1\"\n",
"Initializing Window Optical Properties\n",
"Initializing Solar Calculations\n",
"Allocate Solar Module Arrays\n",
"Initializing Zone and Enclosure Report Variables\n",
"Initializing Surface (Shading) Report Variables\n",
"Computing Interior Solar Absorption Factors\n",
"Determining Shadowing Combinations\n",
"Computing Window Shade Absorption Factors\n",
"Proceeding with Initializing Solar Calculations\n",
"Initializing Surfaces\n",
"Initializing Outdoor environment for Surfaces\n",
"Setting up Surface Reporting Variables\n",
"Initializing Temperature and Flux Histories\n",
"Initializing Window Shading\n",
"Computing Interior Absorption Factors\n",
"Computing Interior Diffuse Solar Absorption Factors\n",
"Initializing Solar Heat Gains\n",
"Initializing Internal Heat Gains\n",
"Initializing Interior Solar Distribution\n",
"Initializing Interior Convection Coefficients\n",
"Gathering Information for Predefined Reporting\n",
"Completed Initializing Surface Heat Balance\n",
"Calculate Outside Surface Heat Balance\n",
"Calculate Inside Surface Heat Balance\n",
"Calculate Air Heat Balance\n",
"Initializing HVAC\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation for Load Component Report\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Re-zeroing zone sizing arrays\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Warming up\n",
"Performing Zone Sizing Simulation\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Calculating System sizing\n",
"...for Sizing Period: #1 CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB\n",
"Calculating System sizing\n",
"...for Sizing Period: #2 CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB\n",
"Adjusting Air System Sizing\n",
"Adjusting Standard 62.1 Ventilation Sizing\n",
"Initializing Simulation\n",
"Reporting Surfaces\n",
"Beginning Primary Simulation\n",
"Initializing New Environment Parameters\n",
"Warming up {1}\n",
"Warming up {2}\n",
"Warming up {3}\n",
"Warming up {4}\n",
"Warming up {5}\n",
"Warming up {6}\n",
"Starting Simulation at 01/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=01/21/2013\n",
"Continuing Simulation at 01/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=02/10/2013\n",
"Continuing Simulation at 02/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/02/2013\n",
"Continuing Simulation at 03/02/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=03/22/2013\n",
"Continuing Simulation at 03/22/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=04/11/2013\n",
"Continuing Simulation at 04/11/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/01/2013\n",
"Continuing Simulation at 05/01/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=05/21/2013\n",
"Continuing Simulation at 05/21/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/10/2013\n",
"Continuing Simulation at 06/10/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=06/30/2013\n",
"Continuing Simulation at 06/30/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=07/20/2013\n",
"Continuing Simulation at 07/20/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/09/2013\n",
"Continuing Simulation at 08/09/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=08/29/2013\n",
"Continuing Simulation at 08/29/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=09/18/2013\n",
"Continuing Simulation at 09/18/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/08/2013\n",
"Continuing Simulation at 10/08/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=10/28/2013\n",
"Continuing Simulation at 10/28/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=11/17/2013\n",
"Continuing Simulation at 11/17/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/07/2013\n",
"Continuing Simulation at 12/07/2013 for RUN PERIOD 1\n",
"Updating Shadowing Calculations, Start Date=12/27/2013\n",
"Continuing Simulation at 12/27/2013 for RUN PERIOD 1\n",
"Writing tabular output file results using HTML format.\n",
"Writing final SQL reports\n",
"EnergyPlus Run Time=00hr 00min 9.79sec\n",
"EnergyPlus Completed Successfully.\n"
]
}
],
"source": [
"!energyplus -a -w USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw -d out-plugin-nofullyready plugin_nofully_ready.idf"
]
},
{
"cell_type": "markdown",
"id": "086f4e39",
"metadata": {},
"source": [
"# Compare Total Site Energy (GJ)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "403f3299",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[PosixPath('out-api/eplusout.sql'),\n",
" PosixPath('out-api-nofully_ready/eplusout.sql'),\n",
" PosixPath('out-plugin-nowarmup/eplusout.sql'),\n",
" PosixPath('out-base/eplusout.sql'),\n",
" PosixPath('out-ems/eplusout.sql'),\n",
" PosixPath('out-plugin-nofullyready/eplusout.sql'),\n",
" PosixPath('out-plugin/eplusout.sql')]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sql_paths = list(Path('.').glob('**/eplusout.sql'))\n",
"sql_paths"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "ea7cb201",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"out-api/eplusout.sql\n",
"out-api-nofully_ready/eplusout.sql\n",
"out-plugin-nowarmup/eplusout.sql\n",
"out-base/eplusout.sql\n",
"out-ems/eplusout.sql\n",
"out-plugin-nofullyready/eplusout.sql\n",
"out-plugin/eplusout.sql\n"
]
},
{
"data": {
"text/plain": [
"{'api': 242.64,\n",
" 'api-nofully_ready': 246.1,\n",
" 'plugin-nowarmup': 242.7,\n",
" 'base': 225.1,\n",
" 'ems': 246.1,\n",
" 'plugin-nofullyready': 246.1,\n",
" 'plugin': 242.64}"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"total_energies = {}\n",
"for f in list(Path('.').glob('**/eplusout.sql')):\n",
" \n",
" print(f)\n",
" total_energies[f.parent.name.split('out-')[1]] = get_total_site_energy(f)\n",
"total_energies"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "ed879319",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"base 225.10\n",
"api 242.64\n",
"plugin 242.64\n",
"plugin-nowarmup 242.70\n",
"api-nofully_ready 246.10\n",
"ems 246.10\n",
"plugin-nofullyready 246.10\n",
"dtype: float64"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"pd.Series(total_energies).sort_values()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment