diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..a089e2954 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +**/.git \ No newline at end of file diff --git a/.github/workflows/custom-web-build.yml b/.github/workflows/custom-web-build.yml new file mode 100644 index 000000000..9527c29b9 --- /dev/null +++ b/.github/workflows/custom-web-build.yml @@ -0,0 +1,45 @@ +name: Custom web build and deploy + +on: + push: + branches: + - gh-pages-custom + + # The following allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Build Docker environment image + run: cd web && make build-env + - name: Build docs and website in container + run: cd web && make run-build-docs-and-build-web + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + # upload only /web/_site directory. + path: './web/_site' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.gitignore b/.gitignore index 11f5b2162..17aaf6e96 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,6 @@ testcase2/doc/build/ parser/*.fmu parser/*.mo parser/*.json +docs/DesReqGui/build/ +docs/design +docs/user_guide \ No newline at end of file diff --git a/docs/design/source/conf.py b/docs/design/source/conf.py index 7f494dae8..d987f831c 100755 --- a/docs/design/source/conf.py +++ b/docs/design/source/conf.py @@ -107,12 +107,29 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'alabaster' - +import sphinx_bootstrap_theme +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -#html_theme_options = {} + +html_theme_options = { +# # Render the next and previous page links in navbar. (Default: true) +# 'navbar_sidebarrel': True, + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, +# # Add links + 'navbar_links': [ + ("BOPTEST Home", "../index")], +## ("Design Documentation", "index_dd"), +## ("User Guide", "index_ug")], + # Bootswatch (http://bootswatch.com/) theme +# 'bootswatch_theme': "simplex", + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + 'source_link_position': "" +} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] diff --git a/docs/user_guide/Makefile b/docs/user_guide/Makefile new file mode 100644 index 000000000..0b10354fa --- /dev/null +++ b/docs/user_guide/Makefile @@ -0,0 +1,114 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = letter +BUILDDIR = build + +#PYTHONPATH=`pwd`/.. + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest release-html copypdftodoc + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " release-html to copy HTML files to www folder for online publication" + @echo " copypdftodoc to copy PDF file to userGuide folder for distribution" + +clean: + -rm -rf $(BUILDDIR)/* + +cleanpdf: + -rm -rf *.pdf + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + (cd build/latex; make all-pdf) + @echo +# @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." +# @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." +release-html: + #-mkdir release + #-mkdir release/userGuide + @echo "Copy html files to the www folder." + -cp -R $(BUILDDIR)/html/*.* www/userGuide + -cp -R $(BUILDDIR)/html/_images www/userGuide + -cp -R $(BUILDDIR)/html/legal.html ../../ + +dist: clean cleanpdf latex html release-html copypdftodoc copydoctowww + +copypdftodoc: + @echo "Copy pdf files to the userGuide folder." + -cp -R $(BUILDDIR)/latex/*.pdf . + +copydoctowww: + @echo "Sent files to the server excluding .svn." + @echo "Set permissions to ensure files can be written on gundog." + ssh thierry@gundog.lbl.gov "sudo chmod -R g+w /usr/local/www/simulationresearch/fmu/EnergyPlus/export/" + rsync -av --exclude '*.svn' www/* thierry@gundog.lbl.gov:/usr/local/www/simulationresearch/fmu/EnergyPlus/export/ + #scp -r release/* thierry@gundog.lbl.gov:/usr/local/www/simulationresearch/fmu/EnergyPlus/export/ diff --git a/docs/user_guide/README.md b/docs/user_guide/README.md new file mode 100644 index 000000000..d3023b788 --- /dev/null +++ b/docs/user_guide/README.md @@ -0,0 +1,27 @@ +================== +BOPTEST User Guide +================== + +Sphinx is needed to compile the documentation, with the following extensions: + +- sphinx.ext.autodoc +- sphinx.ext.autosummary +- sphinx.ext.doctest +- sphinx.ext.todo +- sphinx.ext.mathjax +- sphinxcontrib.bibtex +- numpydoc + +To compile documentation into pdf (latex must be installed): + +``` +$ make latex +``` + +To compile documentation into html: + +``` +$ make html +``` + +Then, check the subdirectory that is created ``/build``. diff --git a/docs/user_guide/source/api.rst b/docs/user_guide/source/api.rst new file mode 100644 index 000000000..dd1c8bc3f --- /dev/null +++ b/docs/user_guide/source/api.rst @@ -0,0 +1,311 @@ +=========== +API Summary +=========== + +To interact with a deployed test case, use the API defined in the sections below by sending RESTful requests as follows: + +- If Single Test Case on Local Computing Resource, send API requests to localhost port 5000 as ``http://127.0.0.1:5000/``. +- If using Public Web Service, send API requests to ``//``, where ```` is your returned testid upon test case selection. See the section Getting Started for more information. + +Each API request will return a JSON in the form ``{"status":, "message":, "payload":}``, where: + +- Data returned in ``"payload"`` is the data of interest relvant to the specific API request and is defined in the **Returns** section of each section below. +- Status codes in ``"status"`` are integers: ``200`` for successful with or without warning, ``400`` for bad input error, or ``500`` for internal error. +- The string in ``"message"`` will report any warnings or error messages to help debug encountered problems. + +GET /version +------------ + +- **Description:** Receive BOPTEST version. + +- **Arguments:** None. + +- **Returns:** + + :: + + { + "version": // str, X.Y.Z + } + +GET /name +--------- + +- **Description:** Receive test case name. + +- **Arguments:** None. + +- **Returns:** + + :: + + { + "name": // str, name of test case + } + + +GET /measurements +----------------- + +- **Description:** Receive available sensor signal output point names (y) and metadata. + +- **Arguments:** None. + +- **Returns:** + + :: + + { + : // str, name of point + {"Description": , // str, description of point + "Unit": , // str, unit of point + "Minimum": , // float or null, minimum point value + "Maximum": , // float or null, maximum point value + }, + ... + } + +GET /inputs +------------ + +- **Description:** Receive available control signal input point names (u) and metadata. + +- **Arguments:** None. + +- **Returns:** + + :: + + { + : // str, name of point + {"Description": , // str, description of point + "Unit": , // str, unit of point + "Minimum": , // float or null, minimum point value + "Maximum": , // float or null, maximum point value + }, + ... + } + +GET /step +--------- + +- **Description:** Receive the current control step. This is the amount of simulation time that will pass when the next control step is taken. + +- **Arguments:** None. + +- **Returns:** + + :: + + // float, control step in seconds + +PUT /step +--------- + +- **Description:** Set the current control step. This is the amount of simulation time that will pass when the next control step is taken. + +- **Arguments:** + + :: + + step // required, float, control step in seconds + +- **Returns:** + + :: + + // str, set control step in seconds + +PUT /initialize +-------------- + +- **Description:** Initialize simulation to a start time using a specified warmup period. Also resets point data history and KPI calculations. + +- **Arguments:** + + :: + + start_time // required, float, start time in seconds + warmup_period // required, float, warmup period length in seconds + +- **Returns:** + + :: + + { + : // str, name of point + , // float, point values at start time + ... + } + +GET /scenario +------------- + +- **Description:** Receive current test scenario. + +- **Arguments:** None. + +- **Returns:** + + :: + + { + "electricity_price": // str, current electricity price scenario + "time_period": // str, current time period scenario + } + +PUT /scenario +------------- + +- **Description:** Set current test scenario. Setting ``time_period`` results in similar behavior to ``PUT /initialize``, except uses a pre-determined start time and warmup period as defined within BOPTEST according to the selected scenario. + +- **Arguments:** + + :: + + electricity_price // optional, str, electricity price scenario + time_period // optional, str, time period scenario + +- **Returns:** + + :: + + { + "electricity_price":, // str, set electricity price scenario + {: // str, name of point + , // float, point value at start time + ... + } + } + +GET /forecast_points +-------------------- + +- **Description:** Receive available forecast point names and metadata. + +- **Arguments:** None. + +- **Returns:** + + :: + + { + : // str, name of point + {"Description": , // str, description of point + "Unit": , // str, unit of point + }, + ... + } + +PUT /forecast +------------- + +- **Description:** Receive boundary condition forecasts from current time. + +- **Arguments:** + + :: + + point_names // required, list of str, name of points + horizon // required, float, horizon of forecast in seconds + interval // required, float, interval of forecast in seconds + +- **Returns:** + + :: + + { + "time": + , // array of floats, time values at interval for horizon + : // str, name of point + , // array of floats, forecast values at interval for horizon + ... + } + +POST /advance +------------- + +- **Description:** Advance simulation one control step with optional control input(s) and receive measurements. If specified, control input value(s) will be constant over the control step. + +- **Arguments:** + + :: + + // optional, float, value of input point + +- **Returns:** + + :: + + { + : // str, name of point + , // float, point value at time at end of control step + ... + } + +PUT /results +------------ + +- **Description:** Receive simulation data for the given point names over a time period. Data for control input points will be the values used for simulation, meaning embedded default control if not overwritten or user-specified value if overwritten. + +- **Arguments:** + + :: + + point_names // required, list of str, name of points + start_time // required, float, start time of data to collect + final_time // required, float, final time of data to collect + +- **Returns:** + + :: + + { + "time": + , // array of floats, values of time in seconds over time period + : // str, name of point + , // array of floats, point values over time period + } + +GET /kpi +-------- + +- **Description:** Receive KPI values. Calculated from start time and do not include warmup periods. + +- **Arguments:** None. + +- **Returns:** + + :: + + { + "cost_tot":, // float, HVAC energy cost in $/m2 or Euro/m2 + "emis_tot":, // float, HVAC energy emissions in kgCO2e/m2 + "ener_tot":, // float, HVAC energy total in kWh/m2 + "pele_tot":, // float, HVAC peak electrical demand in kW/m2 + "pgas_tot":, // float, HVAC peak gas demand in kW/m2 + "pdih_tot":, // float, HVAC peak district heating demand in kW/m2 + "idis_tot":, // float, Indoor air quality discomfort in ppmh/zone + "tdis_tot":, // float, Thermal discomfort in Kh/zone + "time_rat": // float, Computational time ratio in s/ss + } + +GET /submit +----------- + +- **Description:** Post test results to online dashboard located at (url coming soon). A complete test scenario (including full time period) must be finished before results can be submitted to the dashboard. + +- **Arguments:** + + :: + + api_key // required, str, API key generated for user account on dashboard. + tag // optional, str, Tag to characterize result and which can be filtered upon in the online dashboard. Up to 10 tags are allowed, specifed by =1-10. + +- **Returns:** + + :: + + { + "identifier":, // str, Unique identifier for result posted to dashboard} + } diff --git a/docs/user_guide/source/conf.py b/docs/user_guide/source/conf.py new file mode 100755 index 000000000..28702d16a --- /dev/null +++ b/docs/user_guide/source/conf.py @@ -0,0 +1,302 @@ +# -*- coding: utf-8 -*- +# +# 'BOPTEST Design Requirements and Guide documentation build configuration file +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ['sphinx.ext.autodoc','sphinx.ext.autosummary','sphinx.ext.doctest','sphinx.ext.todo','sphinx.ext.mathjax','numpydoc','sphinxcontrib.bibtex'] +numpydoc_show_class_members = False + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'BOPTEST User Guide v0.4.0' +copyright = u'' +author = u'' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +#version = u'0.1' +# The full version, including alpha/beta/rc tags. +release = u'0.4.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +import sphinx_bootstrap_theme +html_theme = 'bootstrap' +html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. + +html_theme_options = { +# # Render the next and previous page links in navbar. (Default: true) +# 'navbar_sidebarrel': True, + # Render the current pages TOC in the navbar. (Default: true) + 'navbar_pagenav': False, +# # Add links + 'navbar_links': [ + ("BOPTEST Home", "../index")], +## ("Design Documentation", "index_dd"), +## ("User Guide", "index_ug")], + # Bootswatch (http://bootswatch.com/) theme +# 'bootswatch_theme': "simplex", + # Location of link to source. + # Options are "nav" (default), "footer" or anything else to exclude. + 'source_link_position': "" +} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (relative to this directory) to use as a favicon of +# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' +#html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# Now only 'ja' uses this config value +#html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +#html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'BOPTESTUserGuide' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', + +# Latex figure (float) alignment +#'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'BOPTESTUserGuide.tex', u'BOPTEST User Guide v0.4.0', + u'', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'BOPTESTUserGuide', u'BOPTEST User Guide v0.4.0', + [author], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'BOPTESTUserGuide', u'BOPTEST User Guide v0.4.0', + author, 'BOPTESTUserGuide', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False +extensions = ['sphinxcontrib.bibtex'] +bibtex_bibfiles = ['references.bib'] diff --git a/docs/user_guide/source/getting_started.rst b/docs/user_guide/source/getting_started.rst new file mode 100644 index 000000000..d007645f1 --- /dev/null +++ b/docs/user_guide/source/getting_started.rst @@ -0,0 +1,79 @@ +=============== +Getting Started +=============== + + +Using BOPTEST +============= + +There are two ways you can access BOPTEST, depending on your preference: + +1. **Single Test Case on Local Computing Resource**: Deploy a single test +case on your local computing resource and interact with it at localhost +via the BOPTEST API. + +2. **Public Web-Service**: Utilize a web-hosted BOPTEST +environment (BOPTEST-Service) available to the public to deploy a test case in the cloud and +interact with it at a URL specific to you via the BOPTEST API. + + +Single Test Case on Local Computing Resource +============================================ + +Installation +------------ +1. Install Docker and docker-compose on your system. +2. Download the latest version of BOPTEST as a .zip and extract it to a location. + +Deploy a Test Case +------------------ +Within the root directory of the extracted software, use the following commands: + +- Linux or macOS: ``$ TESTCASE= docker-compose up`` +- Windows PowerShell: ``> ($env:TESTCASE="") -and (docker-compose up)`` + +A couple notes: + +- Replace ```` with the name of the test case you wish to deploy. +- The first time this command is run, the image ``boptest_base`` will be built. This takes about a minute. Subsequent usage will use the already-built image and deploy much faster. +- If you update your BOPTEST repository, use the command ``docker rmi boptest_base`` to remove the image so it can be re-built with the updated repository upon next deployment. +- ``TESTCASE`` is simply an environment variable. Consistent with use of docker-compose, you may also edit the value of this variable in the ``.env`` file and then use ``docker-compose up``. + + +Use the API +----------- +Send API requests to localhost port 5000 as ``http://127.0.0.1:5000/``. See the section API Summary for more information on available requests. + +Stop the Test Case +------------------ +Within the root directory of the extracted software, use the command ``docker-compose down``. + + +Public Web-Service +================== + +Installation +------------ +There are no installation requirements. + +Deploy a Test Case +------------------ +Send the following API request to url ``https://api.boptest.net``. + +- POST ``/testcases//select``, where ```` is replaced with the name of the test case you wish to deploy. +- The return will be a json with ``{'testid': }``. + +The returned ```` will be needed for all future API requests associated +with your chosen test case. + +Use the API +----------- +Send API requests to ``//``, where ```` is returned from the previous step. +See the section API Summary for more information on available requests. + +Stop the Test Case +------------------ +Send the following API request: ``/stop/``. +Note that the test case will be stopped automatically in case of a period of +inactivity. If this happens, a new test case should be deployed +using the actions described previously. diff --git a/docs/user_guide/source/index.rst b/docs/user_guide/source/index.rst new file mode 100755 index 000000000..b117622e0 --- /dev/null +++ b/docs/user_guide/source/index.rst @@ -0,0 +1,12 @@ +================== +BOPTEST User Guide +================== + + +.. toctree:: + :maxdepth: 3 + + introduction + getting_started + basic_usage + api diff --git a/docs/user_guide/source/introduction.rst b/docs/user_guide/source/introduction.rst new file mode 100644 index 000000000..966b01306 --- /dev/null +++ b/docs/user_guide/source/introduction.rst @@ -0,0 +1,72 @@ +============== +Introduction +============== + +Purpose +======= +The goal of the Building Optimization Testing Framework (BOPTEST) is to +enable benchmarking of control strategies for building and district energy +systems, with a particular focus on heating, ventilation, and air-conditioning +(HVAC). We believe that in doing so, we will facilitate the development and +adoption of new and improved control strategies for these systems that +will lead to cost, energy use, and carbon emission reduction for +energy infrastructures worldwide. For example, control developers can understand +how new algorithms compare to the state-of-the-art, building owners can invest +in new control strategies with less risk knowing they have been tested, and +policy makers can set standard expectations of performance as well as invest +in further control development where needed. + +Such a goal requires the use of simulation, since real buidings pose significant +operational risks for new control development and slow-changing, stochastic +operating conditions that make it difficult to perform controlled experiments +at scale. However, simulation of realistic building and district energy systems +requires significant expertise in related physics modeling and +numerical simulation techniques and effort for development of such simulation +models fit for controls testing. Such expertise, and corresponding resources +necessary to put forth the effort, are not shared by all stakeholders, particularly +control developers in fields outside that of building modeling and simulation. +Therefore, to be inclusive, such a goal also requires the enabling technology +to be easily accessible. + +Technology +========== + +BOPTEST consists of shareable, high-fidelity building emulators and boundary +conditions (so-called “test cases”) that are made rapidly and repeatably +accessible for control by test controllers through a developed +run-time environment (RTE). The emulators themselves are modeled using validated +and well-documented Modelica [Mat97]_ component libraries for building and urban energy simulation +which extend from the Modelica IBPSA Library [Wet19]_. Currently, those are the Modelica Buildings Library [Wet14]_ +and IDEAS Library [Jor18]_. The models are then exported using the Functional Mockup Interface (FMI) [Blo11]_ +into Functional Mockup Units (FMU) for simulation within the RTE. +The use of Modelica enables the highest level of realism in +building control performance simulation to date, especially the explicit representation +of HVAC system pressure-flow networks and control logic. The RTE is built using Python +and is deployable on local computing resources or as a public web-service +(called BOPTEST-Service) using Docker [Doc22]_. It exposes a highly accessible HTTP +RESTful API for test subject controllers to interact with the emulators +through reading of measurement points and overwriting of control signals at +either the supervisory or local-loop (i.e. actuator) level. The simulation +of the test cases within the RTE uses the PyFMI Python package [And16]_ for simulation +of FMUs. + +For a detailed introduction and overview of BOPTEST software, see [Blu21]_. + +References +---------- + +.. [And16] Andersson, C., Åkesson, J. and Führer, C. (2016). "PyFMI: A Python Package for Simulation of Coupled Dynamic Models with the Functional Mock-up Interface." Technical Report in Mathematical Sciences, nr. 2, vol. 2016, vol. LUTFNA-5008-2016, Centre for Mathematical Sciences, Lund University. + +.. [Blo11] Blochwitz, T., Otter, M., Arnold, M., Bausch, C., Clauß, C., Elmqvist, H., Junghanns, A., Mauss, J., Monteiro, M., Neidhold, T., Neumerkel, D., Olsson, H., Peetz, J.-V., and Wolf, S. (2011). "The Functional Mockup Interface for Tool independent Exchange of Simulation Models." Proc. of the 8th International Modelica Conference. https://doi.org/10.3384/ecp11063105. + +.. [Blu21] Blum, D., Arroyo, J., Huang, S., Drgona, J., Jorissen, F., Walnum, H. T., Chen, Y., Benne, K., Vrabie, D., Wetter, M., and Helsen, L. (2021). “Building Optimization Testing Framework (BOPTEST) for Simulation-Based Benchmarking of Control Strategies in Buildings.” Journal of Building Performance Simulation, 14(5), 586-610. https://doi.org/10.1080/19401493.2021.1986574. + +.. [Doc22] Docker. Available at https://www.docker.com/. + +.. [Jor18] Jorissen, F., Reynders, G., Baetens, R., Picard, D., Saelens, D., and Helsen, L. (2018). “Implementation and Verification of the IDEAS Building Energy Simulation Library.” Journal of Building Performance Simulation, 11 (6), 669-688. https://doi.org/10.1080/19401493.2018.1428361. + +.. [Mat97] Mattsson, S. E., and Elmqvist, H. (1997). "Modelica - An International Effort to Design the Next Generation Modeling Language." IFAC Proceedings Volumes, 30(4), 151–155. https://doi.org/10.1016/S1474-6670(17)43628-7. + +.. [Wet14] Wetter, M., Zuo, W., Nouidui, T. S., and Pang, X. (2014). "Modelica Buildings library." Journal of Building Performance Simulation, 7(4):253-270. https://doi.org/10.1080/19401493.2013.765506. + +.. [Wet19] Wetter, M., van Treeck, C., Helsen, L., Maccarini, A., Saelens, D., Robinson, D., and Schweiger, G. (2019). "IBPSA Project 1: BIM/GIS and Modelica framework for building and community energy system design and operation - ongoing developments, lessons learned and challenges." IOP Conference Series: Earth and Environmental Science, Vol. 323, p. 012114, September. diff --git a/docs/user_guide/source/references.bib b/docs/user_guide/source/references.bib new file mode 100644 index 000000000..9958597f2 --- /dev/null +++ b/docs/user_guide/source/references.bib @@ -0,0 +1,441 @@ +Download + + + Source + + PDF + +Actions + + Copy Project + Word Count + +Sync + + Dropbox + + GitHub + + Mendeley + +Settings +Compiler +Main document +Spell check +Auto-complete +Auto-close Brackets +Code check +Editor theme +Overall theme +Keybindings +Font Size +Font Family +Line Height +PDF Viewer +Hotkeys + + Show Hotkeys + +Metrics_only + +% Encoding: GBK +\begin{document} +@article{Afram2014, + author = {Afram, Abdul and Janabi-Sharifi, Farrokh}, + title = {Theory and applications of HVAC control systems – A review of model predictive control (MPC)}, + journal = {Building and Environment}, + volume = {72}, + number = {Supplement C}, + pages = {343-355}, + ISSN = {0360-1323}, + DOI = {https://doi.org/10.1016/j.buildenv.2013.11.016}, + url = {http://www.sciencedirect.com/science/article/pii/S0360132313003363}, + year = {2014}, + type = {Journal Article} +} + +@article{Huang2011, + author = {Huang, Gongsheng}, + title = {Model predictive control of VAV zone thermal systems concerning bi-linearity and gain nonlinearity}, + journal = {Control Engineering Practice}, + volume = {19}, + number = {7}, + pages = {700-710}, + ISSN = {0967-0661}, + DOI = {https://doi.org/10.1016/j.conengprac.2011.03.005}, + url = {http://www.sciencedirect.com/science/article/pii/S0967066111000451}, + year = {2011}, + type = {Journal Article} +} + + +@article{Ma2012, + author = {Ma, Jingran and Qin, Joe and Salsbury, Timothy and Xu, Peng}, + title = {Demand reduction in building energy systems based on economic model predictive control}, + journal = {Chemical Engineering Science}, + volume = {67}, + number = {1}, + pages = {92-100}, + ISSN = {0009-2509}, + DOI = {https://doi.org/10.1016/j.ces.2011.07.052}, + url = {http://www.sciencedirect.com/science/article/pii/S0009250911005240}, + year = {2012}, + type = {Journal Article} +} + +@article{Morosan2010, + author = {Moroşan, Petru-Daniel and Bourdais, Romain and Dumur, Didier and Buisson, Jean}, + title = {Building temperature regulation using a distributed model predictive control}, + journal = {Energy and Buildings}, + volume = {42}, + number = {9}, + pages = {1445-1452}, + ISSN = {0378-7788}, + DOI = {10.1016/j.enbuild.2010.03.014}, + url = {http://www.sciencedirect.com/science/article/pii/S0378778810000915}, + year = {2010}, + type = {Journal Article} +} + +@article{Privara2011, + author = {Prívara, Samuel and Široký, Jan and Ferkl, Lukáš and Cigler, Jiří}, + title = {Model predictive control of a building heating system: The first experience}, + journal = {Energy and Buildings}, + volume = {43}, + number = {2}, + pages = {564-572}, + ISSN = {0378-7788}, + DOI = {https://doi.org/10.1016/j.enbuild.2010.10.022}, + url = {http://www.sciencedirect.com/science/article/pii/S0378778810003749}, + year = {2011}, + type = {Journal Article} +} + +@inproceedings{Rehrl2011, + author = {Rehrl, J. and Horn, M.}, + title = {Temperature control for HVAC systems based on exact linearization and model predictive control}, + booktitle = {IEEE International Conference on Control Applications (CCA)}, + pages = {1119-1124}, + ISBN = {1085-1992}, + DOI = {10.1109/CCA.2011.6044437}, + year = {2011}, + type = {Conference Proceedings} +} + +@article{Xi2007, + author = {Xi, Xue-Cheng and Poo, Aun-Neow and Chou, Siaw-Kiang}, + title = {Support vector regression model predictive control on a HVAC plant}, + journal = {Control Engineering Practice}, + volume = {15}, + number = {8}, + pages = {897-908}, + ISSN = {0967-0661}, + DOI = {https://doi.org/10.1016/j.conengprac.2006.10.010}, + url = {http://www.sciencedirect.com/science/article/pii/S0967066106001766}, + year = {2007}, + type = {Journal Article} +} + +@article{Yuan2006, + author = {Yuan, Shui and Perez, Ronald}, + title = {Multiple-zone ventilation and temperature control of a single-duct VAV system using model predictive strategy}, + journal = {Energy and Buildings}, + volume = {38}, + number = {10}, + pages = {1248-1261}, + ISSN = {0378-7788}, + DOI = {https://doi.org/10.1016/j.enbuild.2006.03.007}, + url = {http://www.sciencedirect.com/science/article/pii/S0378778806000764}, + year = {2006}, + type = {Journal Article} +} + +@misc{ASHRAE621, +author = {ASHRAE}, + title = {ASHRAE Standard 62.1-2010 Ventilation for Acceptable Indoor Air Quality}, + year = {2016}, + type = {Standard}, +} + +@misc{ASHRAE901, +author = {ASHRAE}, + title = {ANSI/ASHRAE/IES 90.1-2016, Energy Standard for Buildings Except Low-Rise Residential Buildings.}, + year = {2016}, + type = {Standard}, +} + +@misc{NCSTSD, +author = {GSA}, + title = {Federal Standard 1037C Telecommunications: Glossary of Telecommunication Terms}, + year = {1996}, + type = {Standard}, + url = {https://www.its.bldrdoc.gov/fs-1037/fs-1037c.htm}, + publisher ={General Services Administration, National Communications System Technology and Standards Division} +} + +@misc{ASHRAE55, +author = {ASHRAE}, + title ={ANSI/ASHRAE Standard 55-2010 Thermal Environmental Conditions for Human Occupancy}, + year = {2010}, + type = {Standard}, +} + + +@article{Sundell2004, + author = {Sundell, J.}, + title = {On the history of indoor air quality and health}, + journal = {Indoor Air}, + volume = {14}, + pages = {51-58}, + ISSN = {0905-6947}, + DOI = {10.1111/j.1600-0668.2004.00273.x}, + url = {://WOS:000223590700007}, + year = {2004}, + type = {Journal Article} +} + +@article{Sundell2011, + author = {Sundell, J. and Levin, H. and Nazaroff, W. W. and Cain, W. S. and Fisk, W. J. and Grimsrud, D. T. and Gyntelberg, F. and Li, Y. and Persily, A. K. and Pickering, A. C. and Samet, J. M. and Spengler, J. D. and Taylor, S. T. and Weschler, C. J.}, + title = {Ventilation rates and health: multidisciplinary review of the scientific literature}, + journal = {Indoor Air}, + volume = {21}, + number = {3}, + pages = {191-204}, + ISSN = {0905-6947}, + DOI = {10.1111/j.1600-0668.2010.00703.x}, + url = {://WOS:000290490300004}, + year = {2011}, + type = {Journal Article} +} + +@article{Congradac2009, + author = {Congradac, Velimir and Kulic, Filip}, + title = {HVAC system optimization with CO2 concentration control using genetic algorithms}, + journal = {Energy and Buildings}, + volume = {41}, + number = {5}, + pages = {571-577}, + ISSN = {0378-7788}, + DOI = {http://dx.doi.org/10.1016/j.enbuild.2008.12.004}, + url = {http://www.sciencedirect.com/science/article/pii/S0378778808002685}, + year = {2009}, + type = {Journal Article} +} + + +@article{Sun2011, + author = {Sun, Zhongwei and Wang, Shengwei and Ma, Zhenjun}, + title = {In-situ implementation and validation of a CO2-based adaptive demand-controlled ventilation strategy in a multi-zone office building}, + journal = {Building and Environment}, + volume = {46}, + number = {1}, + pages = {124-133}, + ISSN = {0360-1323}, + DOI = {http://dx.doi.org/10.1016/j.buildenv.2010.07.008}, + url = {http://www.sciencedirect.com/science/article/pii/S0360132310002131}, + year = {2011}, + type = {Journal Article} +} + +@article{Nassif2012, + author = {Nassif, Nabil}, + title = {A robust CO2-based demand-controlled ventilation control strategy for multi-zone HVAC systems}, + journal = {Energy and Buildings}, + volume = {45}, + number = {0}, + pages = {72-81}, + ISSN = {0378-7788}, + DOI = {http://dx.doi.org/10.1016/j.enbuild.2011.10.018}, + url = {http://www.sciencedirect.com/science/article/pii/S0378778811004622}, + year = {2012}, + type = {Journal Article} +} + + + +@misc{USEIA2012, + Author = {U.S. Energy Information Administration}, + Title = {2012 Commercial Buildings Energy Consumption Survey (CBECS) Survey Data }, + Volume = {2016}, + Number = {August 17}, + Year = {2016} } + + + +@article{Avci2013, + author = {Avci, Mesut and Erkoc, Murat and Rahmani, Amir and Asfour, Shihab}, + title = {Model predictive HVAC load control in buildings using real-time electricity pricing}, + journal = {Energy and Buildings}, + volume = {60}, + number = {0}, + pages = {199-209}, + ISSN = {0378-7788}, + DOI = {http://dx.doi.org/10.1016/j.enbuild.2013.01.008}, + url = {http://www.sciencedirect.com/science/article/pii/S037877881300025X}, + year = {2013}, + type = {Journal Article} +} + + +@article{Fanger1967, + title={Calculation of thermal comfort, Introduction of a basic comfort equation}, + author={Fanger, PO}, + journal={ASHRAE transactions}, + volume={73}, + pages={III--4}, + year={1967} +} + +@article{Fanger1970, + title={Thermal comfort. Analysis and applications in environmental engineering.}, + author={Fanger, Poul O and others}, + journal={Thermal comfort. Analysis and applications in environmental engineering.}, + year={1970}, + publisher={Copenhagen: Danish Technical Press.} +} + +@article{May2011, + title={Model-predictive control of mixed-mode buildings with rule extraction}, + author={May-Ostendorp, Peter and Henze, Gregor P and Corbin, Charles D and Rajagopalan, Balaji and Felsmann, Clemens}, + journal={Building and Environment}, + volume={46}, + number={2}, + pages={428--437}, + year={2011}, + publisher={Elsevier} +} + +@article{Oldewurtel2012, + title={Use of model predictive control and weather forecasts for energy efficient building climate control}, + author={Oldewurtel, Frauke and Parisio, Alessandra and Jones, Colin N and Gyalistras, Dimitrios and Gwerder, Markus and Stauch, Vanessa and Lehmann, Beat and Morari, Manfred}, + journal={Energy and Buildings}, + volume={45}, + pages={15--27}, + year={2012}, + publisher={Elsevier} +} + +@article{Harris1999, + author = {Harris, T. J. and Seppala, C. T. and Desborough, L. D.}, + title = {A review of performance monitoring and assessment techniques for univariate and multivariate control systems}, + journal = {Journal of Process Control}, + volume = {9}, + number = {1}, + pages = {1-17}, + ISSN = {0959-1524}, + DOI = {Doi 10.1016/S0959-1524(98)00031-6}, + url = {://WOS:000078128300001}, + year = {1999}, + type = {Journal Article} +} + +@article{Jelali2006, + author = {Jelali, M.}, + title = {An overview of control performance assessment technology and industrial applications}, + journal = {Control Engineering Practice}, + volume = {14}, + number = {5}, + pages = {441-466}, + ISSN = {0967-0661}, + DOI = {10.1016/j.conengprac.2005.11.005}, + url = {://WOS:000236459500001}, + year = {2006}, + type = {Journal Article} +} + +@article{Harris1989, + author = {Harris, T. J.}, + title = {Assessment of Control Loop Performance}, + journal = {Canadian Journal of Chemical Engineering}, + volume = {67}, + number = {5}, + pages = {856-861}, + ISSN = {0008-4034}, + url = {://A1989CA59200019}, + year = {1989}, + type = {Journal Article} +} + +@article{Deng2017, author = {O'Neill, Z. and Li, Y. F. and Williams, K.}, title = {HVAC control loop performance assessment: A critical review (1587-RP)}, journal = {Science and Technology for the Built Environment}, volume = {23}, number = {4}, pages = {619-636}, ISSN = {2374-4731}, DOI = {10.1080/23744731.2016.1239466}, url = {://WOS:000400981400008}, year = {2017}, type = {Journal Article} } + +@article{Chen2018, + Author = {Chen, Yan and Huang, Sen and Vrabie, Draguna}, + Title = {A simulation based approach for impact assessment of physical faults: large commercial building HVAC case study}, + year = {2018}, + journal = {2018 Building Performance Analysis Conference and SimBuild co-organized by ASHRAE and IBPSA-USA}, + type = {Conference Paper}, + month = {September 26-28, Chicago, IL}, +} + +@article{Huang2018, + Author = {Huang, Sen and Chen, Yan and Vrabie, Draguna and Ehrlich, Paul}, + Title = {A control-oriented building envelope and HVAC system simulation model for a typical large office building}, + year = {2018}, + journal = {2018 Building Performance Analysis Conference and SimBuild co-organized by ASHRAE and IBPSA-USA}, + type = {Conference Paper}, + month = {September 26-28, Chicago, IL}, + +} + +@article{de2016, + title={Practical implementation and evaluation of model predictive control for an office building in Brussels}, + author={De Coninck, Roel and Helsen, Lieve}, + journal={Energy and Buildings}, + volume={111}, + pages={290--298}, + year={2016}, + publisher={Elsevier} +} + +@article{drgovna2018approximate, + title={Approximate model predictive building control via machine learning}, + author={Drgo{\v{n}}a, J{\'a}n and Picard, Damien and Kvasnica, Michal and Helsen, Lieve}, + journal={Applied Energy}, + volume={218}, + pages={199--216}, + year={2018}, + publisher={Elsevier} +} + +@article{joe2019model, + title={A model predictive control strategy to optimize the performance of radiant floor heating and cooling systems in office buildings}, + author={Joe, Jaewan and Karava, Panagiota}, + journal={Applied Energy}, + volume={245}, + pages={65--77}, + year={2019}, + publisher={Elsevier} +} + +@article{kim2018development, + title={Development, implementation and performance of a model predictive controller for packaged air conditioners in small and medium-sized commercial building applications}, + author={Kim, Donghun and Braun, James E}, + journal={Energy and Buildings}, + volume={178}, + pages={49--60}, + year={2018}, + publisher={Elsevier} +} + + + + +@article{Karlsson2011, + author = {Karlsson, Henrik and Hagentoft, Carl-Eric}, + title = {Application of model based predictive control for water-based floor heating in low energy residential buildings}, + journal = {Building and Environment}, + volume = {46}, + number = {3}, + pages = {556-569}, + ISSN = {0360-1323}, + DOI = {https://doi.org/10.1016/j.buildenv.2010.08.014}, + url = {http://www.sciencedirect.com/science/article/pii/S0360132310002672}, + year = {2011}, + type = {Journal Article} +} + + + +} + +Imported from Another project/Metric.bib, at 11:15 am Today diff --git a/testcases/multizone_residential_hydronic/doc/MultiZoneResidentialHydronic.html b/testcases/multizone_residential_hydronic/doc/index.html similarity index 100% rename from testcases/multizone_residential_hydronic/doc/MultiZoneResidentialHydronic.html rename to testcases/multizone_residential_hydronic/doc/index.html diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 000000000..316316806 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,8 @@ +_site +.sass-cache +.jekyll-cache +.jekyll-metadata +vendor +docs-design +docs-userguide +docs-testcases diff --git a/web/01_software.md b/web/01_software.md new file mode 100644 index 000000000..8e28f497c --- /dev/null +++ b/web/01_software.md @@ -0,0 +1,40 @@ +--- +layout: page +title: Software +permalink: /software/ +hero_height: is-fullwidth +--- + +# Download the Latest BOPTEST Software + +The latest version is ``v0.4.0``, released on March 21, 2023. + +Click the button below to download the latest version as a zip file. + +Download + +Get started with the [User Guide](/docs-userguide/index.html). + +Then, check out the available [Test Cases](/project1-boptest/testcases/index.html). + +To access the latest development version or contribute to the project, go to the GitHub repository. + +GitHub + +# Use BOPTEST-Service + +Use a web-hosted instance of BOPTEST that provides the functionality of BOPTEST ``v0.4.0`` as a web-service without the need to download or install anything locally. + +Get started with the [User Guide](/docs-userguide/index.html). + +For more information, to access the latest development version of the web-service software, or contribute, go to the GitHub repository. + +GitHub BOPTEST-Service + +# Use BOPTEST-Gym + +Control BOPTEST test cases using OpenAI-Gym, the popular interface for reinforcement learning (RL) algorithms. + +To get started or contribute to the project, go to the GitHub repository. + +GitHub BOPTEST-Gym diff --git a/web/02_testcases.md b/web/02_testcases.md new file mode 100644 index 000000000..bbcd64bf1 --- /dev/null +++ b/web/02_testcases.md @@ -0,0 +1,17 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ +--- + +Test cases are building emulators that contain everything needed to run +a test, including the dynamic model, embedded control logic, weather data, +electricity prices, and carboavailablen emission factors. Each test case +also has predefined testing scenarios to choose from using the BOPTEST API. + +Explore the available test cases listed in the menu on the left, as well as a +brief description of those that are under development. diff --git a/web/03_dashboard.md b/web/03_dashboard.md new file mode 100644 index 000000000..a0bfee65f --- /dev/null +++ b/web/03_dashboard.md @@ -0,0 +1,8 @@ +--- +layout: page +title: Results Dashboard +permalink: /dashboard/ +hero_height: is-fullwidth +--- + +Coming Soon! diff --git a/web/04_training.md b/web/04_training.md new file mode 100644 index 000000000..5d2c666f0 --- /dev/null +++ b/web/04_training.md @@ -0,0 +1,10 @@ +--- +layout: page +title: Training +permalink: /training/ +hero_height: is-fullwidth +--- + +This is a list and links to training material (tutorials, workshops, presentations, etc.). + +Coming soon. diff --git a/web/05_publications.md b/web/05_publications.md new file mode 100644 index 000000000..4f111ffef --- /dev/null +++ b/web/05_publications.md @@ -0,0 +1,38 @@ +--- +layout: page +title: Publications +permalink: /publications/ +hero_height: is-fullwidth +--- + +## To cite BOPTEST, please use: +D. Blum, J. Arroyo, S. Huang, J. Drgona, F. Jorissen, H.T. Walnum, Y. Chen, K. Benne, D. Vrabie, M. Wetter, and L. Helsen. (2021). ["Building optimization testing framework (BOPTEST) for simulation-based benchmarking of control strategies in buildings."](https://doi.org/10.1080/19401493.2021.1986574) *Journal of Building Performance Simulation*, 14(5), 586-610. + +## Additional publications: +C. A. Faulkner, R. Lutes, S. Huang, W. Zuo, D. Vrabie. (2023). ["Simulation-based assessment of ASHRAE Guideline 36, considering energy performance, indoor air quality, and control stability."](https://doi.org/10.1016/j.buildenv.2023.110371) *Building and Environment*, 240, 110371. + +D. Wang, W. Zheng, Z. Wang, Y. Wang, X. Pang, W. Wang. (2023). ["Comparison of reinforcement learning and model predictive control for building energy system optimization."](https://doi.org/10.1016/j.applthermaleng.2023.120430) *Applied Thermal Engineering*, 228, 120430. + +E. Zanetti, D. Kim, D. Blum, R. Scoccia, and M. Aprile. (2023). ["Performance comparison of quadratic, nonlinear, and mixed integer nonlinear MPC formulations and solvers on an air source heat pump hydronic floor heating system."](https://doi.org/10.1080/19401493.2022.2120631) *Journal of Building Performance Simulation*, 16(2), 144-162. + +G. Fierro, A. K. Prakash, D. Blum, J. Bender, E. Paulson, and M. Wetter. (2022). ["Notes Paper: Enabling Building Application Development with Simulated Digital Twins."](https://dl.acm.org/doi/pdf/10.1145/3563357.3564060) *In The 9th ACM International Conference on Systems for Energy-Efficient Buildings, Cities, and Transportation (BuildSys ’22)*, Nov 9 – 10. Boston, MA, USA. + +J. Arroyo, F. Spiessens, and L. Helsen. (2022). ["Comparison of Optimal Control Techniques for Building Energy Management."](https://doi.org/10.3389/fbuil.2022.849754) *Frontiers in Built Environment* 8. + +T. Marzullo, S. Dey, N. Long, J. L. Vilaplana, and G. Henze. (2022). ["A high-fidelity building performance simulation test bed for the development and evaluation of advanced controls."](https://doi.org/10.1080/19401493.2022.2058091) *Journal of Building Performance Simulation*, 15(3), 379-397. + +J. Arroyo, C. Manna, F. Spiessens, and L. Helsen. (2022). ["Reinforced model predictive control (RL-MPC) for building energy management."](https://doi.org/10.1016/j.apenergy.2021.118346) *Applied Energy* 309: 118346. + +J. Arroyo, C. Manna, F. Spiessens, and L. Helsen. (2021). [“An OpenAI-Gym Environment for the Building Optimization Testing (BOPTEST) Framework.”](https://www.researchgate.net/profile/Javier-Arroyo/publication/354386346_An_OpenAI-Gym_environment_for_the_Building_Optimization_Testing_BOPTEST_framework/links/613616690360302a0082ffc1/An-OpenAI-Gym-environment-for-the-Building-Optimization-Testing-BOPTEST-framework.pdf) In *Proceedings of the 17th IBPSA Conference*, Sep 1 - 3. Bruges, Belgium. + +F. Bünning, C. Pfister, A. Aboudonia, P. Heer, and J. Lygeros. (2021). [“Comparing Machine Learning Based Methods to Standard Regression Methods for MPC on a Virtual Testbed.”](https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/524933/BS2021_finalVersion.pdf?sequence=1&isAllowed=y) In *Proceedings of the 17th IBPSA Conference*, Sep 1 - 3. Bruges, Belgium. + +T. Yang, K. Filonenko, K. Arendt, and C. Veje. (2020). [“Implementation and Performance Analysis of a Multi-Energy Building Emulator.”](https://ieeexplore.ieee.org/document/9236623) In *2020 6th IEEE International Energy Conference (ENERGYCon)*, Sep 28 - Oct 1. Gammarth, Tunisia, 451–456. + +H. T. Walnum, I. Sartori, and M. Bagle. (2020). [“Model Predictive Control of District Heating Substations for Flexible Heating of Buildings.”](https://sintef.brage.unit.no/sintef-xmlui/handle/11250/2683181) In *SINTEF Proceedings no 5, ser. BuildSim-Nordic 2020*, Oct 13–14. Oslo, Norway: International Conference Organised by IBPSA-Nordic, 123–130. + +J. Arroyo, F. Spiessens, and L. Helsen. (2020). [“Identification of Multi-zone Grey-box Building Models for Use in Model Predictive Control.”](https://doi.org/10.1080/19401493.2020.1770861) *Journal of Building Performance Simulation* 13 (4): 472–486. + +D. Blum, F. Jorissen, S. Huang, Y. Chen, J. Arroyo, K. Benne, Y. Li, V. Gavan, L. Rivalin, L. Helsen, D. Vrabie, M. Wetter, and M. Sofos. (2019). [“Prototyping the BOPTEST framework for simulation-based testing of advanced control strategies in buildings.”](http://www.ibpsa.org/proceedings/BS2019/BS2019_211276.pdf) In *Proceedings of the 16th International Conference of IBPSA*, Sep 2 – 4. Rome, Italy. + +S. Huang, Y. Chen, P. W. Ehrlich, and D. L. Vrabie. (2018). [“A Control-Oriented Building Envelope and HVAC System Simulation Model for a Typical Large Office Building.”](https://www.ashrae.org/File%20Library/Conferences/Specialty%20Conferences/2018%20Building%20Performance%20Analysis%20Conference%20and%20SimBuild/Papers/C101.pdf) In *Proceedings of 2018 Building Performance Modeling Conference and SimBuild co-organized by ASHRAE and IBPSA-USA*, Sep 26 - 28. Chicago, IL. diff --git a/web/06_relatedProjects.md b/web/06_relatedProjects.md new file mode 100644 index 000000000..3cc43d0c2 --- /dev/null +++ b/web/06_relatedProjects.md @@ -0,0 +1,8 @@ +--- +layout: page +title: Related Projects +permalink: /relatedProjects/ +hero_height: is-fullwidth +--- + +Coming Soon! diff --git a/web/07_ibpsa.md b/web/07_ibpsa.md new file mode 100644 index 000000000..360b2fa76 --- /dev/null +++ b/web/07_ibpsa.md @@ -0,0 +1,38 @@ +--- +layout: page +title: IBPSA Project 2 +subtitle: Community Development and Usage of BOPTEST +hero_height: is-fullwidth +show_sidebar: false +menubar: ibpsa_menubar +permalink: /ibpsa/ +--- + +drawing + +**IBPSA Project 2** is operated under the umbrella of the +International Building Performance Simulaton Association (https://ibpsa.org/). +The Project develops BOPTEST software infrastructure, emulators, and related extensions to +meet the growing needs of building and urban energy system controls development +and evaluation worldwide. Software development continues under the +same open-source license to facilitate community development and to enable +access to all, including third-party developers to build applications +utilizing BOPTEST. The anticipated generalized outcomes are as follows: + +1. Outreach and community building activities that encourage community feedback on development and usage. +2. Enhanced framework software infrastructure for improved performance and additional features. +3. New emulators representing additional application scopes of interest to the community. +4. Benchmark performance results from control strategy solutions using BOPTEST. + +Details of the work plan, participation, and meetings are available +on the menu bar on the left. + +BOPTEST development started within the [IBPSA Project 1](https://ibpsa.github.io/project1/index.html) Work Package 1.2. +With IBPSA Project 1 ending in Summer 2022, a proposal for a new IBPSA +Project focusing on continued BOPTEST development and usage +was approved by the IBPSA Board on July 12th, 2023, leading to the start of IBPSA Project 2. + +### Co-Operating Agents +David Blum, Lawrence Berkeley National Laboratory, USA + +Lieve Helsen, KU Leuven, Belgium diff --git a/web/08_contributors.md b/web/08_contributors.md new file mode 100644 index 000000000..1ebb015e1 --- /dev/null +++ b/web/08_contributors.md @@ -0,0 +1,45 @@ +--- +layout: page +title: Contributors +permalink: /contributors/ +hero_height: is-fullwidth +--- + +Thank you to all contributors of the project. They are in alphabetical order: + +- **Krzysztof Arendt (Southern Denmark University, Denmark)** for framework development, forecast uncertainty characterization. +- **Javier Arroyo (KU Leuven, Belgium)** for framework development, software implementation, test case development (bestest_hydronic_heat_pump), test case review, controller testing. +- **Yeonjin Bae (Oak Ridge National Laboratory, USA)** for framework development, test case implementation (flexible_research_platform). +- **Aritz Bengoetxea (IK4 Tekniker, Spain)** for forecast uncertainty characterization. +- **Kyle Benne (National Renewable Energy Laboratory, USA)** for framework development, web-service development, online dashboard development. +- **Chris Berger (Devetry, USA)** for online dashboard development. +- **Dave Biagioni (National Renewable Energy Laboratory, USA)** for software implementation. +- **David Blum (Lawrence Berkeley National Laboratory, USA)** for framework development, software implementation, test case development (bestest_air, multizone_office_simple_air, singlezone_commercial_air), test case review. +- **Felix Bunning (ETH Zurich / EMPA, Switzerland)** for controller testing. +- **Yan Chen (Pacific Northwest National Laboratory, USA)** for framework development. +- **Tim Coleman (National Renewable Energy Laboratory, USA)** for web-service development. +- **Iago Cupeiro Figueroa (Cupeiro Sinte, DeltaQ, Spain)** for framework development, test case implementation (multizone_office_simple_hybrid). +- **Roel De Coninck (DeltaQ, Belgium)** for framework development. +- **Jan Drgona (Pacific Northwest National Laboratory, USA)** for framework development. +- **Jesus Febres (IK4 Tekniker, Spain)** for framework development. +- **Konstantin Filonenko (Southern Denmark University, Denmark)** for framework development, test case development (singlezone_commercial_hydronic), test case review. +- **Valentin Gavan (Engie, France)** for framework development, test case implementation (multizone_residential_hydronic). +- **Philip Gonzalez (Devetry, USA)** for online dashboard development. +- **Lieve Helsen (KU Leuven, Belgium)** for ibpsa project 1 wp 1.2 leader, framework development. +- **Sen Huang (Oak Ridge National Laboratory, USA)** for framework development, software implementation, test case implementation (multizone_office_complex_air), controller testing. +- **Piljae Im (Oak Ridge National Laboratory, USA)** for framework development, test case implementation (flexible_research_platform). +- **Filip Jorissen (KU Leuven, Belgium)** for framework development, test case implementation (bestest_hydronic), test case review. +- **Amit Kapoor (Devetry, USA)** for online dashboard development. +- **Donghun Kim (Lawrence Berkeley National Laboratory, USA)** for framework development. +- **Nicholas Long (National Renewable Energy Laboratory, USA)** for software implementation. +- **Robert Lutes (Pacific Northwest National Laboratory, USA)** for software implementation. +- **Bart Merema (DeltaQ, Belgium)** for test case implementation (multizone_office_simple_hybrid). +- **Marjorie Schott (National Renewable Energy Laboratory, USA)** for online dashboard development. +- **Jermy Thomas (National Renewable Energy Laboratory, USA)** for web-service development. +- **Christian Veje (Southern Denmark University, Denmark)** for framework development. +- **Draguna Vrabie (Pacific Northwest National Laboratory, USA)** for framework development. +- **Harald Walnum (SINTEF, Norway)** for framework development, controller testing. +- **Michael Wetter (Lawrence Berkeley National Laboratory, USA)** for framework development. +- **Tao Yang (Southern Denmark University, Denmark)** for framework development, test case development (singlezone_commercial_hydronic). +- **Laura Zabala (IK4 Tekniker, Spain)** for framework development, forecast uncertainty characterization. +- **Ettore Zanetti (Lawrence Berkeley National Laboratory, USA)** for framework development, test case implementation (twozone_apartment_hydronic), test case review, controller testing. diff --git a/web/404.html b/web/404.html new file mode 100644 index 000000000..086a5c9ea --- /dev/null +++ b/web/404.html @@ -0,0 +1,25 @@ +--- +permalink: /404.html +layout: default +--- + + + +
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 000000000..443df6220 --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,36 @@ +# Start with a base Ubuntu image +FROM ubuntu:20.04 + +# Avoid warnings while installing ubuntu +# debconf: unable to initialize frontend: Dialog +# debconf: (TERM is not set, so the dialog frontend is not usable.) +RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + +# Install packages +RUN apt update && \ + apt install -y --no-install-recommends\ + git \ + python3.9 \ + python3-pip \ + build-essential \ + ruby-dev \ + && \ + rm -rf /var/lib/apt/lists/* + +# Install sphinx dependencies +RUN pip install \ + sphinx \ + sphinx_bootstrap_theme \ + sphinxcontrib-bibtex + +RUN gem install jekyll -v 4.1.0 +RUN gem install bundler -v 2.1.4 + +# Add developer user with permissions in the working directory +ENV HOME /home +ENV WORKDIR /home + +# Use the Gemfile and Gemfile.lock to install dependencies for Jekyll website +COPY web/Gemfile . +COPY web/Gemfile.lock . +RUN bundle install diff --git a/web/Gemfile b/web/Gemfile new file mode 100644 index 000000000..3e49d4c01 --- /dev/null +++ b/web/Gemfile @@ -0,0 +1,29 @@ +source "https://rubygems.org" +# Hello! This is where you manage which Jekyll version is used to run. +# When you want to use a different version, change it below, save the +# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: +# +# bundle exec jekyll serve +# +# This will help ensure the proper Jekyll version is running. +# Happy Jekylling! +# gem "jekyll", "~> 4.1.0" +# This is the default theme for new Jekyll sites. You may change this to anything you like. +gem "bulma-clean-theme" +# If you want to use GitHub Pages, remove the "gem "jekyll"" above and +# uncomment the line below. To upgrade, run `bundle update github-pages`. +gem "github-pages", group: :jekyll_plugins +# If you have any plugins, put them here! +group :jekyll_plugins do + gem "jekyll-feed", "~> 0.12" +end + +# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem +# and associated library. +platforms :mingw, :x64_mingw, :mswin, :jruby do + gem "tzinfo", "~> 1.2" + gem "tzinfo-data" +end + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] diff --git a/web/Gemfile.lock b/web/Gemfile.lock new file mode 100644 index 000000000..897827d31 --- /dev/null +++ b/web/Gemfile.lock @@ -0,0 +1,298 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (6.0.4.4) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + zeitwerk (~> 2.2, >= 2.2.2) + addressable (2.8.0) + public_suffix (>= 2.0.2, < 5.0) + bulma-clean-theme (0.12) + jekyll (~> 3.9) + jekyll-feed (~> 0.15) + jekyll-paginate (~> 1.1) + jekyll-seo-tag (~> 2.7) + jekyll-sitemap (~> 1.4) + kramdown-parser-gfm (~> 1.1) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) + colorator (1.1.0) + commonmarker (0.17.13) + ruby-enum (~> 0.5) + concurrent-ruby (1.1.9) + dnsruby (1.61.9) + simpleidn (~> 0.1) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + ethon (0.15.0) + ffi (>= 1.15.0) + eventmachine (1.2.7) + execjs (2.8.1) + faraday (1.9.3) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.3) + multipart-post (>= 1.2, < 3) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + ffi (1.15.5) + forwardable-extended (2.6.0) + gemoji (3.0.1) + github-pages (223) + github-pages-health-check (= 1.17.9) + jekyll (= 3.9.0) + jekyll-avatar (= 0.7.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.1.6) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.15.1) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.13.0) + jekyll-include-cache (= 0.2.1) + jekyll-mentions (= 1.6.0) + jekyll-optional-front-matter (= 0.3.2) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.3.0) + jekyll-redirect-from (= 0.16.0) + jekyll-relative-links (= 0.6.1) + jekyll-remote-theme (= 0.4.3) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.7.1) + jekyll-sitemap (= 1.4.0) + jekyll-swiss (= 1.0.0) + jekyll-theme-architect (= 0.2.0) + jekyll-theme-cayman (= 0.2.0) + jekyll-theme-dinky (= 0.2.0) + jekyll-theme-hacker (= 0.2.0) + jekyll-theme-leap-day (= 0.2.0) + jekyll-theme-merlot (= 0.2.0) + jekyll-theme-midnight (= 0.2.0) + jekyll-theme-minimal (= 0.2.0) + jekyll-theme-modernist (= 0.2.0) + jekyll-theme-primer (= 0.6.0) + jekyll-theme-slate (= 0.2.0) + jekyll-theme-tactile (= 0.2.0) + jekyll-theme-time-machine (= 0.2.0) + jekyll-titles-from-headings (= 0.5.3) + jemoji (= 0.12.0) + kramdown (= 2.3.1) + kramdown-parser-gfm (= 1.1.0) + liquid (= 4.0.3) + mercenary (~> 0.3) + minima (= 2.5.1) + nokogiri (>= 1.12.5, < 2.0) + rouge (= 3.26.0) + terminal-table (~> 1.4) + github-pages-health-check (1.17.9) + addressable (~> 2.3) + dnsruby (~> 1.60) + octokit (~> 4.0) + public_suffix (>= 3.0, < 5.0) + typhoeus (~> 1.3) + html-pipeline (2.14.0) + activesupport (>= 2) + nokogiri (>= 1.4) + http_parser.rb (0.8.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jekyll (3.9.0) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 2.0) + kramdown (>= 1.17, < 3) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) + safe_yaml (~> 1.0) + jekyll-avatar (0.7.0) + jekyll (>= 3.0, < 5.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.3.1) + commonmarker (~> 0.14) + jekyll (>= 3.7, < 5.0) + jekyll-commonmark-ghpages (0.1.6) + commonmarker (~> 0.17.6) + jekyll-commonmark (~> 1.2) + rouge (>= 2.0, < 4.0) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) + octokit (~> 4.2) + jekyll-github-metadata (2.13.0) + jekyll (>= 3.4, < 5.0) + octokit (~> 4.0, != 4.4.0) + jekyll-include-cache (0.2.1) + jekyll (>= 3.7, < 5.0) + jekyll-mentions (1.6.0) + html-pipeline (~> 2.3) + jekyll (>= 3.7, < 5.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) + jekyll-paginate (1.1.0) + jekyll-readme-index (0.3.0) + jekyll (>= 3.0, < 5.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) + jekyll-relative-links (0.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-remote-theme (0.4.3) + addressable (~> 2.0) + jekyll (>= 3.5, < 5.0) + jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) + rubyzip (>= 1.3.0, < 3.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.7.1) + jekyll (>= 3.8, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-swiss (1.0.0) + jekyll-theme-architect (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.6.0) + jekyll (> 3.5, < 5.0) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.3) + jekyll (>= 3.3, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.12.0) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + kramdown (2.3.1) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.3) + listen (3.7.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.3.6) + mini_portile2 (2.6.1) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.15.0) + multipart-post (2.1.1) + nokogiri (1.12.5) + mini_portile2 (~> 2.6.1) + racc (~> 1.4) + octokit (4.22.0) + faraday (>= 0.9) + sawyer (~> 0.8.0, >= 0.5.3) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (4.0.6) + racc (1.6.0) + rb-fsevent (0.11.0) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.5) + rouge (3.26.0) + ruby-enum (0.9.0) + i18n + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + safe_yaml (1.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sawyer (0.8.2) + addressable (>= 2.3.5) + faraday (> 0.8, < 2.0) + simpleidn (0.2.1) + unf (~> 0.1.4) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (1.2.9) + thread_safe (~> 0.1) + unf (0.1.4) + unf_ext + unf_ext (0.0.8) + unicode-display_width (1.8.0) + zeitwerk (2.5.3) + +PLATFORMS + ruby + +DEPENDENCIES + bulma-clean-theme + github-pages + jekyll-feed (~> 0.12) + tzinfo (~> 1.2) + tzinfo-data + wdm (~> 0.1.1) + +BUNDLED WITH + 2.1.4 diff --git a/web/README.md b/web/README.md new file mode 100644 index 000000000..fbd398379 --- /dev/null +++ b/web/README.md @@ -0,0 +1,21 @@ +# Instructions to build and deploy the BOPTEST website + +## Deploy website locally + +### If you have Jekyll + +If you already have a Jekyll environment installed and functional you can directly use the command `make build_docs_and_serve_web` to build the docs and test the website in your browser. + +### If you don't have Jekyll + +If you don't have Jekyll you can create the Docker environment to build the website with the command `make build-env`. +Note that this is the environment used to build and serve the actual website so you this procedure also ensures you're working with the right environment. +After the environment is created (only needs to be created once) you can use the command `make run-build-docs-and-serve-web` to build the docs and test the website in your local browser. + +## Deploy the website with GitHub Actions + +Normally, GitHub actions uses a default workflow to deploy the website from a branch with the source files living either at the `/` or the `/docs` directory of the repository. +We use a [custom workflow with GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages) to benefit from a controlled build environment and the possibility to have the website-related files in a dedicated `/web` directory. The specification of this custom workflow is located at `/.github/workflows/custom-web-build.yml` and it mostly follows the default workflow followed by GitHub Pages but with these two main modifications: + +1. Uses a predefined Docker environment to build the docs-* files and the website content sources. +2. Serves the website from the `/web` directory (instead of `/docs`). \ No newline at end of file diff --git a/web/_config.yml b/web/_config.yml new file mode 100644 index 000000000..a0f3f9191 --- /dev/null +++ b/web/_config.yml @@ -0,0 +1,57 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'bundle exec jekyll serve'. If you change this file, please restart the server process. +# +# If you need help with YAML syntax, here are some quick references for you: +# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml +# https://learnxinyminutes.com/docs/yaml/ +# +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. + +title: BOPTEST +email: your-email@example.com +description: >- # this means to ignore newlines until "baseurl:" + Building Optimization Performance Tests +baseurl: "/project1-boptest" # the subpath of your site, e.g. /blog +url: "" # the base hostname & protocol for your site, e.g. http://example.com +twitter_username: jekyllrb +github_username: jekyll + +# Build settings +theme: bulma-clean-theme +plugins: + - jekyll-remote-theme +hide_share_buttons: true + +# Exclude from processing. +# The following items will not be processed, by default. +# Any item listed under the `exclude:` key here will be automatically added to +# the internal "default list". +# +# Excluded items can be processed by explicitly listing the directories or +# their entries' file path in the `include:` list. +# exclude: +# - .sass-cache/ +# - .jekyll-cache/ +# - gemfiles/ +# - Gemfile +# - Gemfile.lock +# - node_modules/ +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ +include: + - docs-design/_images/ + - docs-design/_static/ + - docs-design/_sources/ diff --git a/web/_data/ibpsa_menubar.yml b/web/_data/ibpsa_menubar.yml new file mode 100644 index 000000000..e2939d050 --- /dev/null +++ b/web/_data/ibpsa_menubar.yml @@ -0,0 +1,8 @@ +- label: Details + items: + - name: Work Plan + link: /ibpsa/project/workplan/ + - name: Participation + link: /ibpsa/project/participation/ + - name: Meetings + link: /ibpsa/project/meetings/ diff --git a/web/_data/navigation.yml b/web/_data/navigation.yml new file mode 100644 index 000000000..66453d83d --- /dev/null +++ b/web/_data/navigation.yml @@ -0,0 +1,24 @@ +- name: Software + link: software/index.html +- name: Test Cases + link: testcases/index.html +- name: Results Dashboard + link: dashboard/index.html +- name: Documentation + dropdown: + - name: User Guide + link: docs-userguide/index.html + - name: Design Specification + link: docs-design/index.html +- name: Training + link: training/index.html +- name: Publications + link: publications/index.html +- name: Related Projects + link: relatedProjects/index.html +- name: IBPSA Project 2 + link: ibpsa/index.html +- name: News + link: blog/index.html +- name: Contributors + link: contributors/index.html diff --git a/web/_data/testcases_menubar.yml b/web/_data/testcases_menubar.yml new file mode 100644 index 000000000..09ea5e0ce --- /dev/null +++ b/web/_data/testcases_menubar.yml @@ -0,0 +1,28 @@ +- label: Available in Latest Release (v0.4.0) + items: + - name: BESTEST Air + link: /testcases/ibpsa/testcases_ibpsa_bestest_air/ + - name: BESTEST Hydronic + link: /testcases/ibpsa/testcases_ibpsa_bestest_hydronic/ + - name: BESTEST Hydronic Heat Pump + link: /testcases/ibpsa/testcases_ibpsa_bestest_hydronic_heat_pump/ + - name: Single Zone Commercial Hydronic + link: /testcases/ibpsa/testcases_ibpsa_singlezone_commercial_hydronic/ + - name: Two Zone Apartment Hydronic + link: /testcases/ibpsa/testcases_ibpsa_twozone_apartment_hydronic/ + - name: Multizone Residential Hydronic + link: /testcases/ibpsa/testcases_ibpsa_multizone_residential_hydronic/ + - name: Multizone Office Simple Air + link: /testcases/ibpsa/testcases_ibpsa_multizone_office_simple_air/ +- label: Under Development + items: + - name: Single Zone Commercial Air + link: /testcases/ibpsa/testcases_ibpsa_singlezone_commercial_air/ + - name: Flexible Research Platform + link: /testcases/ibpsa/testcases_ibpsa_flexible_research_platform/ + - name: Multizone Office Simple Hydronic + link: /testcases/ibpsa/testcases_ibpsa_multizone_office_simple_hydronic/ + - name: Multizone Office Simple Hybrid + link: /testcases/ibpsa/testcases_ibpsa_multizone_office_simple_hybrid/ + - name: Multizone Office Complex Air + link: /testcases/ibpsa/testcases_ibpsa_multizone_office_complex_air/ diff --git a/web/_posts/2022-05-12-homepage.md b/web/_posts/2022-05-12-homepage.md new file mode 100644 index 000000000..2fc6c3774 --- /dev/null +++ b/web/_posts/2022-05-12-homepage.md @@ -0,0 +1,9 @@ +--- +layout: post +title: Home page launched +hero_height: is-fullwidth +author: David Blum +--- + +BOPTEST now has a home page to host all the information you need for using and contributing to BOPTEST! +The home page is at boptest.net. diff --git a/web/_posts/2022-07-27-v030.md b/web/_posts/2022-07-27-v030.md new file mode 100644 index 000000000..7d69e3964 --- /dev/null +++ b/web/_posts/2022-07-27-v030.md @@ -0,0 +1,15 @@ +--- +layout: post +title: v0.3.0 released (highlights and release notes) +hero_height: is-fullwidth +author: David Blum +--- + +BOPTEST v0.3.0 has been released! This is a new development version. Highlights include: + +- A new test case featuring a 5-zone VAV system. +- New KPIs calculated for peak electrical, gas, and district heating demand. +- Updated and standardized API return packages that allow for status indication and messaging for errors and warnings. +- A new API request that will be used to publish results to an online dashboard for storing and sharing. + +For all changes and more details, see [releasenotes.md](https://github.com/ibpsa/project1-boptest/blob/v0.3.0/releasenotes.md). diff --git a/web/_posts/2023-03-21-v040.md b/web/_posts/2023-03-21-v040.md new file mode 100644 index 000000000..8aecc29d6 --- /dev/null +++ b/web/_posts/2023-03-21-v040.md @@ -0,0 +1,14 @@ +--- +layout: post +title: v0.4.0 released (highlights and release notes) +hero_height: is-fullwidth +author: David Blum +--- + +BOPTEST v0.4.0 has been released! This is a new development version. Highlights include: + +- A new test case featuring a 2-zone apartment with floor heating system. +- The API request ``/results`` accepts lists of variable names with the parameter ``point_names`` instead of a single string variable name with the parameter ``point_name``. +- Changed API request ``/forecast`` to PUT and now accepts lists of variable names with the parameter ``point_names`` instead of returning data for all variables. Also added parameters to the request ``interval`` and ``horizon``. Added API GET ``forecast_points`` to return available forecast point names and metadata from test case. Forecast point information added to test case documentation. Removed APIs GET and PUT ``forecast_parameters``. + +For all changes and more details, see [releasenotes.md](https://github.com/ibpsa/project1-boptest/blob/v0.4.0/releasenotes.md). diff --git a/web/_posts/2023-03-31-service_v020.md b/web/_posts/2023-03-31-service_v020.md new file mode 100644 index 000000000..98c4f971e --- /dev/null +++ b/web/_posts/2023-03-31-service_v020.md @@ -0,0 +1,8 @@ +--- +layout: post +title: BOPTEST-Service v0.2.0 deployed with support for BOPTEST v0.4.0 +hero_height: is-fullwidth +author: David Blum +--- + +BOPTEST-Service has been deployed to support BOPTEST v0.4.0. diff --git a/web/blog/index.md b/web/blog/index.md new file mode 100644 index 000000000..041228dd9 --- /dev/null +++ b/web/blog/index.md @@ -0,0 +1,20 @@ +--- +layout: page +title: News +permalink: /blog/ +subtitle: The latest developments and announcements +hero_height: is-fullwidth +--- + + + {% for post in site.posts %} + + + + + {% endfor %} +
+ + + {{ post.title }} +
diff --git a/web/build_docs.sh b/web/build_docs.sh new file mode 100755 index 000000000..060dfcd0f --- /dev/null +++ b/web/build_docs.sh @@ -0,0 +1,97 @@ +#!/bin/bash +dir_design=docs-design +dir_userguide=docs-userguide +dir_testcases=docs-testcases + +rm -rf $dir_design +rm -rf $dir_userguide +# Build html documentation for design guide +echo Building design documentation... +cd ../docs/design && make html +echo Finished building design documentation. +# Build html documentation for user guide +echo Building user guide documentation... +cd ../../docs/user_guide && make html +echo Finished building user guide documentation. +# Move design guide build to directory within /web +echo Moving design documentation to $dir_design... +cd ../../web && cp -r ../docs/design/build/html $dir_design +echo Finished moving design documentation. +# Move user guide build to directory within /web +echo Moving user guide documentation to $dir_userguide... +cp -r ../docs/user_guide/build/html $dir_userguide +echo Finished moving user guide documentation. +# Flatten directory for images and remove sphinx source and static build +#echo Flattening design documentation images... +#cd $dir_design/_images +#for file in ./*.png; do +# cp $file ../$file +#done +#cd $dir_design/_images/math +#for file in ./*.png; do +# cp $file ../../$file +#done +#cd ../ +cd $dir_design && mv _images images && mv _sources sources && mv _static static +echo Finished flattening design documentation images. +# Replace image file locations in html text +for file in ./*.html; do + sed -i 's/"_images\//"images\//g' $file + sed -i 's/"_sources\//"sources\//g' $file + sed -i 's/"_static\//"static\//g' $file + sed -i 's/"_static\//"static\//g' $file +done +# Add html documents as pages in jekyll +echo Add design documentation as jekyll title page... +for file in ./*html; do + echo $file + if [[ $file == "./index.html" ]]; then + echo -e '---\ntitle: Design\n---' | cat - index.html > temp && mv temp index.html + echo index.html made jekyll title. + elif [[ $file == "./appendix_KPI.html" ]]; then + echo WARNING: Not including appendix_KPI.html as jekyll page. + fi + # Make documentation navbar below jekyll navbar + sed -i 's/ navbar-fixed-top//g' $file +done +echo Finished adding design documentation as jekyll title page. + +cd ../$dir_userguide && mv _sources sources && mv _static static +echo Finished flattening user guide documentation images. +# Replace image file locations in html text +for file in ./*.html; do + sed -i 's/"_images\//"images\//g' $file + sed -i 's/"_sources\//"sources\//g' $file + sed -i 's/"_static\//"static\//g' $file + sed -i 's/"_static\//"static\//g' $file +done +# Add html documents as pages in jekyll +echo Add user guide documentation as jekyll title page... +for file in ./*html; do + echo $file + if [[ $file == "./index.html" ]]; then + echo -e '---\ntitle: Design\n---' | cat - index.html > temp && mv temp index.html + echo index.html made jekyll title. + elif [[ $file == "./appendix_KPI.html" ]]; then + echo WARNING: Not including appendix_KPI.html as jekyll page. + fi + # Make documentation navbar below jekyll navbar + sed -i 's/ navbar-fixed-top//g' $file +done +echo Finished adding user guide documentation as jekyll title page. + + + +# Move test case documentation to directory within /web +echo Moving test case documentation to $dir_testcases... +cd .. +rm -r $dir_testcases +mkdir $dir_testcases +cp -r ../testcases/bestest_air/doc $dir_testcases/bestest_air +cp -r ../testcases/bestest_hydronic/doc $dir_testcases/bestest_hydronic +cp -r ../testcases/bestest_hydronic_heat_pump/doc $dir_testcases/bestest_hydronic_heat_pump +cp -r ../testcases/multizone_residential_hydronic/doc $dir_testcases/multizone_residential_hydronic +cp -r ../testcases/singlezone_commercial_hydronic/doc $dir_testcases/singlezone_commercial_hydronic +cp -r ../testcases/multizone_office_simple_air/doc $dir_testcases/multizone_office_simple_air +cp -r ../testcases/twozone_apartment_hydronic/doc $dir_testcases/twozone_apartment_hydronic +echo Finished test case design documentation. diff --git a/web/ibpsa_project/workplan/IBPSA_Project_BOPTEST_approved.pdf b/web/ibpsa_project/workplan/IBPSA_Project_BOPTEST_approved.pdf new file mode 100644 index 000000000..b8afe1b71 Binary files /dev/null and b/web/ibpsa_project/workplan/IBPSA_Project_BOPTEST_approved.pdf differ diff --git a/web/ibpsa_project_meetings.md b/web/ibpsa_project_meetings.md new file mode 100644 index 000000000..77b607f71 --- /dev/null +++ b/web/ibpsa_project_meetings.md @@ -0,0 +1,61 @@ +--- +layout: page +title: IBPSA Project 2 +subtitle: Community Development and Usage of BOPTEST +hero_height: is-fullwidth +show_sidebar: false +menubar: ibpsa_menubar +permalink: /ibpsa/project/meetings/ +--- + +drawing + +# Upcoming Meetings + +### December 12, 2023 + +**Location:** Online + +**Time:** 10:30 AM - 12:00 PM U.S. ET. + +**Invite:** [Progress meeting invite](https://groups.google.com/g/ibpsa-boptest/c/4BND2FMgWbY) + +### November 14, 2023 + +**Location:** Online + +**Time:** 9:00 AM - 10:30 AM U.S. ET. + +**Invite:** [Progress meeting invite](https://groups.google.com/g/ibpsa-boptest/c/r6CTlAOUSYg) + +### October 12, 2023: In-Person Expert Meeting, Aachen + +**Location:** RWTH Aachen University, Germany + +**Registration:** [Google Form](https://forms.gle/VMu1LZ7pWW5etzsz9) + +This meeting is co-located with the +[International Modelica Conference 2023](https://2023.international.conference.modelica.org/) +taking place October 9-11, 2023, and is co-organized with the [IBPSA Modelica Working Group](https://github.com/ibpsa/modelica-working-group). + +**Agenda:** (July 26, 2023 Draft) + +| October 11, 2023 | | +| Evening | Social dinner| +| October 12, 2023 | | +| 09:00 - 11:30 | IBPSA Project 2: BOPTEST| +| 11:30 - 12:30 | Lab Tour| +| 12:30 - 13:30 | Lunch Break| +| 13:30 - 16/17:00 | IBPSA Modelica Working Group| + +### September 19, 2023 + +**Location:** Online + +**Time:** 9:00 AM - 10:30 AM U.S. ET. + +**Invite:** [Progress meeting invite](https://groups.google.com/g/ibpsa-boptest/c/vLUlyJL8Quw) + +# Past Meetings + +For meeting minutes before September 1, 2023, see the [google group](https://groups.google.com/g/ibpsa-boptest). diff --git a/web/ibpsa_project_participation.md b/web/ibpsa_project_participation.md new file mode 100644 index 000000000..37a9bcd2f --- /dev/null +++ b/web/ibpsa_project_participation.md @@ -0,0 +1,53 @@ +--- +layout: page +title: IBPSA Project 2 +subtitle: Community Development and Usage of BOPTEST +hero_height: is-fullwidth +show_sidebar: false +menubar: ibpsa_menubar +permalink: /ibpsa/project/participation/ +--- + +drawing + +# Participation +Participation is primarily envisioned to include software development, +including research methods, code implementation, code testing, and test +case creation, as well as control strategy performance benchmarking using BOPTEST and Project administration. +Please see the [workplan](/project1-boptest/ibpsa/project/workplan) for more details +on tasks and project organization. + +Three participation levels are envisioned, to be approved annually by the +operating agent(s). They are described and listed below. + +**To join the project**, use this [google form](https://forms.gle/21ce7Uro74Qvs5E89). + +**To join the mailing list**, register with this +[google group](https://groups.google.com/g/ibpsa-boptest). Note that you do +not need to join the project to register for the mailing list. + + +# Registered Participants + +### Organizational Participants + +Organizations such as companies, research institutes, or +universities that commit to contribute a minimum of 6 months of a full-time +employee per project year to the overall project using their own funding, +contribute to 5-10 virtual meetings annually, and attend two-day semi-annual +expert meetings using their own funding. + +### Sponsoring Participants + +Participants or organizations that fund the Project with cash +contribution at US-$ 5,000 per year. This membership will be valid for one +year, and can be renewed for multiple periods. Contributions are to be paid +to the Treasurer of IBPSA World. Finances are managed by the IBPSA and when +the Project terminates, all remaining funds will be owned by IBPSA. Funding +will be applied to items such as expenses for in-person expert meetings, +such as for rooms, food, A/V, and student travel scholarship, as well as for +continuous integration testing, such as for GitHub, travis, or similar. + +### Individual Participants +Contributors that participate in the Project as is custom in +other open-source projects without a predetermined level of commitment. diff --git a/web/ibpsa_project_workplan.md b/web/ibpsa_project_workplan.md new file mode 100644 index 000000000..18f979778 --- /dev/null +++ b/web/ibpsa_project_workplan.md @@ -0,0 +1,94 @@ +--- +layout: page +title: IBPSA Project 2 +subtitle: Community Development and Usage of BOPTEST +hero_height: is-fullwidth +show_sidebar: false +menubar: ibpsa_menubar +permalink: /ibpsa/project/workplan/ +--- + +drawing + +# Work Plan + +The approved proposal can be found here: [PDF](/ibpsa_project/workplan/IBPSA_Project_BOPTEST_approved.pdf) + +Summaries of the Project and tasks are described below. + +### Overview (from proposal) +Needs for advanced and improved control strategies (CS) in building and +district energy systems are growing due to requirements for reducing energy use, +greenhouse gas emissions, and operating costs, providing flexibility to the +electrical grid, as well as ensuring performance of novel hybrid and collective +system architectures. Examples of such CS are advanced rule-based control, +Model Predictive Control (MPC) [Drg20], and Reinforcement Learning [Wan20]. +However, while these and other CS show promise, three challenges slow their +widespread adoption: + +1. The performance of each CS is typically demonstrated on individualized case +studies and quantified using different metrics, making it difficult to +benchmark and compare their performance, identify the most promising approaches, +and identify needed development. + +2. Demonstrations in real buildings and district energy systems pose large +operational risks and difficult environments for controlled experiments. + +3. Development of realistic simulation models for CS testing and evaluation +requires significant building science and modeling expertise not necessarily +held by experts from fields which could contribute to new CS development, +such as process control, optimization, and data science. + +The building simulation (BS) community can address these challenges by +providing suites of publicly available, high-fidelity simulation models, +called emulators, to be used for benchmarking CS. Furthermore, providing a +comprehensive framework to deploy, interact with, and generate key performance +indicators (KPI) from these emulators would ensure their benchmarking +capability and make them readily available to related control and data +science fields outside of the BS community. There exists precedent for such an +approach within the BS field with the development of the BESTEST [Jud95] and +subsequent ASHRAE Standard 140 [ASH11] as well as the optimization fields +(e.g. Decision Tree for Optimization Software [Mit22]) and data science +(e.g. OpenAI Gym [Ope22]). + +### Task 1: Outreach and Community Building +**Task Leader**: Javier Arroyo, KU Leuven, Belgium + +This task will focus on activities that encourage, facilitate, and disseminate +BOPTEST usage, adoption, and feedback to development. + +### Task 2: Methods and Infrastructure +**Task Leader**: David Blum, Lawrence Berkeley National Laboratory, USA + +This task will focus on development and maintenance of core framework +software and closely related extensions in response to needs identified by +Project participants and community feedback. Related components include test +case and framework architecture specification, FMU simulation and data management, +KPI calculation, forecast delivery, API, online results sharing dashboard, +web-service, and interface extensions. + +### Task 3: Test Cases +**Task Leader**: Ettore Zanetti, Lawrence Berkeley National Laboratory, USA + +This task will focus on development and maintenance of benchmark emulators, +so-called “test cases.” Emulator development will continue to utilize the +Modelica language and Functional Mockup Interface (FMI) standard, particularly +open-source libraries that extend from the Modelica IBPSA Library developed +through IBPSA Project 1 WP1.1 and continuation Modelica Working Group. + +### Task 4: Controller Testing +**Task Co-Leaders**: Esther Borkowski, ETH Zurich, Switzerland and Zhe Wang, Hong Kong University of Science and Technology, Hong Kong + +This task will focus on testing and benchmarking CS developed by both +participants in this Project, and also comparison with CS developers external +to the Project, using the framework developed in Task 2 and test cases +developed in Task 3. + +### References + +| [ASH11] | ANSI/ASHRAE (2011). ANSI/ASHRAE Standard 140-2011. Standard Method of Test for the Evaluation of Building Energy Analysis Computer Programs. ASHRAE, Atlanta, GA. | +| [Drg20] | Drgoňa, J., Arroyo, J., Cupeiro Figueroa, I., Blum, D., Arendt, K., Kim, D., Ollé, E. P., Oravec, J., Wetter, M., Vrabie, D. L., and Helsen, L. (2020). All you need to know about model predictive control for buildings. Annual Reviews in Control, 50, 190–232. | +| [Jud95] | Judkoff, R. and Neymark, J. (1995). International Energy Agency Building Energy Simulation Test (BESTEST) and Diagnostic Method. Technical Report NREL/TP-172-6231, NREL, Golden, CO. Available online: http://www.nrel.gov/docs/legosti/old/6231.pdf. | +| [Mit22] | Mittelmann, H. D. (2022). Decision Tree for Optimization Software. Available online: http://plato.asu.edu/guide.html. | +| [Ope22] | OpenAI (2022). Gym. Available online: https://gym.openai.com. | +| [Wan20] | Wang, Z., and Hong, T. (2020). Reinforcement Learning for Building Controls: The Opportunities and Challenges. Applied Energy 269: 115036. | diff --git a/web/images/concept.png b/web/images/concept.png new file mode 100644 index 000000000..275b6edce Binary files /dev/null and b/web/images/concept.png differ diff --git a/web/images/partner_logos.png b/web/images/partner_logos.png new file mode 100644 index 000000000..3da3ad2f4 Binary files /dev/null and b/web/images/partner_logos.png differ diff --git a/web/images/project2logo.png b/web/images/project2logo.png new file mode 100644 index 000000000..956ab0f1b Binary files /dev/null and b/web/images/project2logo.png differ diff --git a/web/index.md b/web/index.md new file mode 100644 index 000000000..41ccc1db3 --- /dev/null +++ b/web/index.md @@ -0,0 +1,45 @@ +--- +# Feel free to add content and custom Front Matter to this file. +# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults + +title: The Building Optimization Testing Framework (BOPTEST) +subtitle: A framework for building control performance benchmarking +hero_height: is-fullwidth +--- + +

+ drawing +

+ +BOPTEST is designed to facilitate the performance evaluation and benchmarking of building control strategies. +It contains these key components: + +1. **Run-Time Environment (RTE)**: Deployed with Docker and accessed with a RESTful HTTP API, use the RTE to set up tests, control building emulators, access data, and report KPIs. + +2. **Test Case Repository**: A collection of ready-to-use building emulators representing a range of building types and HVAC systems. + +3. **Key Performance Indicator (KPI) Reporting**: A set of KPIs is calculated by the the RTE using data from the building emulator being controlled. + +Head over to the [Software](/project1-boptest/software/index.html) page to start testing your control strategy or look at the [Results Dashboard](/project1-boptest/dashboard/index.html) to view and compare tested control strategies. + +Stay up to date on the latest [News](/project1-boptest/blog/index.html). + + +# Collaboration and Support + +The development of BOPTEST has resulted from an international collaboration of academic, research, and industry partners through [IBPSA Project 1](https://ibpsa.github.io/project1/index.html) Work Package 1.2 and continuing under [IBPSA Project 2](/project1-boptest/ibpsa/index.html). Thank you to all of the [contributing partners](/project1-boptest/contributors/index.html)! + +Financial support provided in-part by: + +- U.S. Department of Energy Building Technologies Office +- Flemish Institute for Technological Research (VITO) +- KU Leuven +- Centres for Environment-friendly Energy Research (FME) Research Centre on Zero Emission Neighbourhoods (ZEN) in Smart Cities +- Engie +- EU-H2020 +- VLAIO + +### Contact +David Blum, Lawrence Berkeley National Laboratory, dhblum@lbl.gov + +Lieve Helsen, KU Leuven, lieve.helsen@kuleuven.be diff --git a/web/makefile b/web/makefile new file mode 100644 index 000000000..ff6b57209 --- /dev/null +++ b/web/makefile @@ -0,0 +1,48 @@ +# Set $ROOT to top-level directory of the repository +ROOT ?= $(shell dirname \ + $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))) + +IMG_NAME=boptestweb +IMG_HOME=/home + +build-env: + docker build -f ${ROOT}/web/Dockerfile \ + --platform=linux/amd64 \ + --progress=plain --rm -t ${IMG_NAME} ../ + +build-env-no-cache: + docker build -f ${ROOT}/web/Dockerfile \ + --platform=linux/amd64 \ + --no-cache \ + --progress=plain --rm -t ${IMG_NAME} ../ + +COMMAND_RUN=docker run \ + --name ${IMG_NAME} \ + --platform=linux/amd64 \ + --detach=false \ + --network=host \ + --rm \ + -v ${ROOT}:${IMG_HOME}/boptest:rw \ + -w ${IMG_HOME}/boptest/web \ + ${IMG_NAME} + +run-build-docs: + $(COMMAND_RUN) /bin/bash -c "make build_docs" + +run-build-docs-and-build-web: + $(COMMAND_RUN) /bin/bash -c "make build_docs_and_build_web" + +run-build-docs-and-serve-web: + $(COMMAND_RUN) /bin/bash -c "make build_docs_and_serve_web" + +build_docs: + ./build_docs.sh + +build_docs_and_build_web: + ./build_docs.sh + bundle exec jekyll build + +build_docs_and_serve_web: + ./build_docs.sh + bundle exec jekyll serve + diff --git a/web/testcases_ibpsa_bestest_air.md b/web/testcases_ibpsa_bestest_air.md new file mode 100644 index 000000000..0e28118d8 --- /dev/null +++ b/web/testcases_ibpsa_bestest_air.md @@ -0,0 +1,41 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_bestest_air/ +--- + +# Test Case Name +``bestest_air`` + +# Brief Description +The building is a single room based on the BESTEST Case 900 model definition, +located near Denver, CO, USA. The floor area is 48 m2. There are four +exterior walls facing the cardinal directions and a flat roof. +The south wall contains two windows of 6 m2 each. The usage is a two-person office with a light load density. + +Heating and cooling is provided to the office using an idealized four-pipe +fan coil unit (FCU). The FCU contains a fan, cooling coil, heating coil, +and filter. The fan draws room air into the unit, blows it over the coils +and through the filter, and supplies the conditioned air back to the room. +There is a variable speed drive serving the fan motor. The cooling coil +is served by chilled water produced by a chiller and the heating coil is +served by hot water produced by a gas boiler. The central plant is not +explicitly modeled. + +[Click here](/docs-testcases/bestest_air/index.html) to view detailed documentation. + +# Available Test Scenarios +### Time Periods +``peak_heat_day`` +``typical_heat_day`` +``peak_cool_day`` +``typical_cool_day`` +``mix_day`` +### Electricity Prices +``constant`` +``dynamic`` +``highly_dynamic`` diff --git a/web/testcases_ibpsa_bestest_hydronic.md b/web/testcases_ibpsa_bestest_hydronic.md new file mode 100644 index 000000000..0500c45ff --- /dev/null +++ b/web/testcases_ibpsa_bestest_hydronic.md @@ -0,0 +1,35 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_bestest_hydronic/ +--- + +# Test Case Name +``bestest_hydronic`` + +# Brief Description +The building is a single room based on the BESTEST Case 900 model definition, +located in Brussels, Belgium. The floor area is 48 m2. +There are four exterior walls facing the cardinal directions and a flat roof. +The south wall contains two windows of 6 m2 each. The usage is a one-person residence. + +The primary heating system that heats the zone is a +single radiator, a circulation pump, and a gas water heater, which is used +to heat the supply water such that the zone operative temperate set point +is maintained. + +[Click here](/docs-testcases/bestest_hydronic/index.html) to view detailed documentation. + +# Available Test Scenarios +### Time Periods +``peak_heat_day`` +``typical_heat_day`` + +### Electricity Prices +``constant`` +``dynamic`` +``highly_dynamic`` diff --git a/web/testcases_ibpsa_bestest_hydronic_heat_pump.md b/web/testcases_ibpsa_bestest_hydronic_heat_pump.md new file mode 100644 index 000000000..718245215 --- /dev/null +++ b/web/testcases_ibpsa_bestest_hydronic_heat_pump.md @@ -0,0 +1,39 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_bestest_hydronic_heat_pump/ +--- + +# Test Case Name +``bestest_hydronic_heat_pump`` + +# Brief Description +This model represents a simplified residential dwelling for a family of 5 +members, modeled as a single thermal zone, located in Brussels, Belgium. +The building envelope model is based on the BESTEST case 900 test case. +but it is scaled to an area that is four times larger. The rectangular floor +plan is 12 m by 16 m. Internal walls are configured such that there are +around 12 rooms in the building. The builiding further contains 24 m2 of +windows on the south facade. + +An air-to-water modulating heat pump of 15 kW nominal heating capacity +extracts energy from the ambient air to heat up the floor heating emission +system. A fan blows ambient air through the heat +pump evaporator and circulation pump pumps water from the heat pump to the +floorr when the heat pump is operating. + +[Click here](/docs-testcases/bestest_hydronic_heat_pump/index.html) to view detailed documentation. + +# Available Test Scenarios +### Time Periods +``peak_heat_day`` +``typical_heat_day`` + +### Electricity Prices +``constant`` +``dynamic`` +``highly_dynamic`` diff --git a/web/testcases_ibpsa_flexible_research_platform.md b/web/testcases_ibpsa_flexible_research_platform.md new file mode 100644 index 000000000..b37266041 --- /dev/null +++ b/web/testcases_ibpsa_flexible_research_platform.md @@ -0,0 +1,35 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_flexible_research_platform/ +--- + +

Test Case Name

+``flexible_research_platform`` + +

Brief Description

+ +The test case represents ORNL’s two-story Flexible Research Platform (FRP) +located in Oak Ridge, Tennessee, USA. The FRP has 10 conditioned zones with a +floor area of 289 m2. The building is unoccupied, but occupancy is emulated through +research apparatuses that physically simulate internal loads for light commercial +buildings common in the United States’ existing building stock. + + + +The conditioned zones are served by an Rooftop Unit (RTU) Variable Air Volume +(VAV) system with electric reheat. The RTU supply fan, direct expansion (DX) +cooling coil, and gas furnace are controlled by a PI controller to maintain +a static pressure set point and the supply air +temperature set point, respectively. Additional PI controllers within the VAV +zone terminal units modulate the terminal unit +damper position and reheat output to meet the zone heating and cooling set point +temperatures. The test case has been calibrated with measured data from +various closed and open loop control tests. + + +

(Under Development)

diff --git a/web/testcases_ibpsa_multizone_office_complex_air.md b/web/testcases_ibpsa_multizone_office_complex_air.md new file mode 100644 index 000000000..c6a004005 --- /dev/null +++ b/web/testcases_ibpsa_multizone_office_complex_air.md @@ -0,0 +1,37 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_multizone_office_complex_air/ +--- + + +

Test Case Name

+``multizone_office_complex_air`` + +

Brief Description

+ +This test case represents a variable air volume (VAV) system that serves a +typical high-rise office building (46,320 m2). The building is +based on the U.S. DOE prototype building for a large commercial building +and has 12 floors with five zones per floor. The VAV system contains 12 AHUs. +Each AHU serves one floor and is connected to five VAV terminal boxes. Each +AHU consists of a supply fan, a return fan, a cooling coil, and a mixing box. +Each VAV terminal box serves one zone, adjusting the supply air flow rate via +a damper and heating the supply air with a water-based reheat +coil and modulating valve. The reheat coils are served by a boiler, while the +cooling coils are served by three identical chillers. + + + +When implementing this higher-fidelity building model, we employ both +EnergyPlus and Modelica Buildings Library. Specifically, we modeled the +building envelope and internal heat gain with EnergyPlus and modeled +the VAV system and its associated control with Modelica Buildings Library. +The data exchange between the EnergyPlus model and the Modelica model is +realized via Spawn-of-EnergyPlus. + +

(Under Development)

diff --git a/web/testcases_ibpsa_multizone_office_simple_air.md b/web/testcases_ibpsa_multizone_office_simple_air.md new file mode 100644 index 000000000..9e9cd34d3 --- /dev/null +++ b/web/testcases_ibpsa_multizone_office_simple_air.md @@ -0,0 +1,39 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_multizone_office_simple_air/ +--- + +# Test Case Name +``multizone_office_simple_air`` + +# Brief Description +The test case represents one floor with five zones of a new construction +medium office building in Chicago, IL, USA with total floor area of 1662.66 m2. +There are four perimeter zones and one core zone, with each perimeter zone +having a window-to-wall ratio of 0.33. + +The HVAC system is a single-duct multi-zone VAV system with terminal reheat with +one air handler. The air handler cooling coil is served by an air-cooled +chiller while the heating coil and terminal box reheat coils are served by +an air-to-water heat pump. The embedded controls for the air handler +include supply fan static pressure reset and drybulb economizer, while the +terminal box controls utilize single-maximum airflow control. + +[Click here](/docs-testcases/multizone_office_simple_air/index.html) to view detailed documentation. + +# Available Test Scenarios +### Time Periods +``peak_heat_day`` +``typical_heat_day`` +``peak_cool_day`` +``typical_cool_day`` +``mix_day`` +### Electricity Prices +``constant`` +``dynamic`` +``highly_dynamic`` diff --git a/web/testcases_ibpsa_multizone_office_simple_hybrid.md b/web/testcases_ibpsa_multizone_office_simple_hybrid.md new file mode 100644 index 000000000..cb0ca0561 --- /dev/null +++ b/web/testcases_ibpsa_multizone_office_simple_hybrid.md @@ -0,0 +1,47 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_multizone_office_simple_hybrid/ +--- + + +

Test Case Name

+``multizone_office_simple_hybrid`` + +

Brief Description

+ +The test case building, known as Infrax, is a four-story office building with 2,232 m2 of conditioned space +located in Dilbeek, Brussels, Belgium. This office building +contains open-plan offices, cellular offices, and meeting rooms. The building +envelope model is composed of 27 zones, of which 21 are conditioned and 14 +occupied. The 1st, 2nd, and 3rd floors are mainly open offices and separate +zones exist for the north and south spaces, the individual meeting rooms and +the bathrooms (which are not conditioned). The ground floor includes +individual conference rooms and several facilities (first aid room, canteen, +storage and server rooms). + + + +The supply heating system is composed of two ground source heat pumps. +The source-side of the heat pumps is connected to an array of 94 vertical +ground-source heat exchangers. The sink-side of the heat pumps is connected to a +water storage tank and to the manifold, from where heat is distributed to +multiple emission loops. Cooling is provided by means of two heat exchangers +connected to the vertical ground heat exchanger array and to a cooling tower. + + + +The emission system of the building is hybrid, with TABS as the slow-reacting +system which provides the main load. To provide a fast-reacting peak load, +the system relies on conditioning the air from the air handling unit (AHU). +The AHU takes and conditions the air from outside and distributes it to the +different building zones through the ventilation ducts. Within the ducts there +exist VAV boxes and small re-heating coils for the fine-tuning of the building. +Nevertheless, not all zone ducts are equipped with the VAV boxes. + + +

(Under Development)

diff --git a/web/testcases_ibpsa_multizone_office_simple_hydronic.md b/web/testcases_ibpsa_multizone_office_simple_hydronic.md new file mode 100644 index 000000000..5a37a7683 --- /dev/null +++ b/web/testcases_ibpsa_multizone_office_simple_hydronic.md @@ -0,0 +1,33 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_multizone_office_simple_hydronic/ +--- + +

Test Case Name

+``multizone_office_simple_hydronic`` + +

Brief Description

+ +The test case represents an office hydronic with two zones zones in Belgium. +The building test case is modeled as a rectangular building +of 40x25 m and 15 m of height. +The height of each floor is considered to be 3 m, +and at each floor internal floors are added to account for the thermal mass. +Hence, the total floor area to be conditioned is 5000 m2. +The building is divided in two zones/spaces of equal floor area, +with their main façades oriented towards north (NZ) and south (SZ) respectively. +Each zone has a window-to-wall ratio of 50%. + + + +Each zone is equipped with independent air handling units (AHUs) for ventilation +and circuits connected to fan-coil units (also known as ventiloconvectors) as the emission system. +Heat/cold is procuded by means of a gas boiler and a chiller. + + +

(Under Development)

diff --git a/web/testcases_ibpsa_multizone_residential_hydronic.md b/web/testcases_ibpsa_multizone_residential_hydronic.md new file mode 100644 index 000000000..4e99030f4 --- /dev/null +++ b/web/testcases_ibpsa_multizone_residential_hydronic.md @@ -0,0 +1,37 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_multizone_residential_hydronic/ +--- + +# Test Case Name +``multizone_residential_hydronic`` + +# Brief Description +The emulator building represents a residential French dwelling +compliant with the French Thermal regulation of 2012, i.e. the French +national building energy regulation. The location is Bordeaux, France. +Therefore, the typology is defined to be representative of French new dwellings. The total floor area of +six conditioned zones is 81.08 m2. There are also two unconditioned zones +(an attic and attached garage). + +Each zone has its own radiator equipped with a thermostatic valve that is +uses a PI controller to modulate water flow through the radiator in order +to maintain the zone heating set point. The water through the heating +emission system is heated by a gas boiler. Domestic hot water is not included. + +[Click here](/docs-testcases/multizone_residential_hydronic/index.html) to view detailed documentation. + +# Available Test Scenarios +### Time Periods +``peak_heat_day`` +``typical_heat_day`` + +### Electricity Prices +``constant`` +``dynamic`` +``highly_dynamic`` diff --git a/web/testcases_ibpsa_singlezone_commercial_air.md b/web/testcases_ibpsa_singlezone_commercial_air.md new file mode 100644 index 000000000..2723e6af1 --- /dev/null +++ b/web/testcases_ibpsa_singlezone_commercial_air.md @@ -0,0 +1,31 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_singlezone_commercial_air/ +--- + +

Test Case Name

+``singlezone_commercial_air`` + +

Brief Description

+ +The test case represents a single zone retail store located in +New York City, New York, USA. The construction, internal load, and occupancy +schedules are based on the U.S. DOE prototype building model for a single +store within the retail strip mall building complying with +ASHRAE Standard 90.1 2019. The floor area is 348.4 m2 and the south +facade has windows at a window-to-wall ratio of 26%. + + + +The HVAC system is a single variable-air-volume (VAV) rooftop unit (RTU) with +supply fan, direct expansion (DX) cooling coil, and gas furnace heating coil. +The embedded control uses a thermostat in the zone for multi-stage control of +the supply fan and DX coil, and single-stage control for the heating coil. + + +

(Under Development)

diff --git a/web/testcases_ibpsa_singlezone_commercial_hydronic.md b/web/testcases_ibpsa_singlezone_commercial_hydronic.md new file mode 100644 index 000000000..b7d3d3f71 --- /dev/null +++ b/web/testcases_ibpsa_singlezone_commercial_hydronic.md @@ -0,0 +1,35 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_singlezone_commercial_hydronic/ +--- + +# Test Case Name +``singlezone_commercial_hydronic`` + +# Brief Description +A single-zone representation of a university building with floor area of 8,500 m2 +and peak occupancy of 1,350 people. The location is Copenhagen, Denmark. +Occupancy in the building is modeled from real building occupancy measurements. + +The single zone is served by a radiator for space heating served by +a district heating source. Additionally, a single AHU with heating coil +and heat recovery provides outside air for ventilation. The fan +is controlled based on zone CO2 measurements and the heating coil +is also served by the district heating source. + +[Click here](/docs-testcases/singlezone_commercial_hydronic/index.html) to view detailed documentation. + +# Available Test Scenarios +### Time Periods +``peak_heat_day`` +``typical_heat_day`` + +### Electricity Prices +``constant`` +``dynamic`` +``highly_dynamic`` diff --git a/web/testcases_ibpsa_twozone_apartment_hydronic.md b/web/testcases_ibpsa_twozone_apartment_hydronic.md new file mode 100644 index 000000000..4a5b8b3aa --- /dev/null +++ b/web/testcases_ibpsa_twozone_apartment_hydronic.md @@ -0,0 +1,38 @@ +--- +layout: page +title: Test Cases +subtitle: Ready-made building emulators +hero_height: is-fullwidth +show_sidebar: false +menubar: testcases_menubar +permalink: /testcases/ibpsa/testcases_ibpsa_twozone_apartment_hydronic/ +--- + +# Test Case Name +``twozone_apartment_hydronic`` + +# Brief Description +The test case is a two-room with one bathroom apartment in Milan, Italy. The floor +area is 44.5 m2 and the apartment is well-insulated with an external +transmittance equal to 0.46 W/m2K. The external facing façade is South-East +oriented with a total window area of 8 m2. + +The heating system consists of two floor radiant heating circuits, one for +each room. The heat is supplied by a 5 kW air source heat pump. The embedded control +is such that each thermal +zone has its own thermostat and is controlled independently. The pump works +to provide a constant head, tuned to provide each floor heating circuit their +respective design water mass flow rate when the circuit valve is open. +The heat pump supply water temperature set point is calculated via a climatic +curve that depends on the external temperature. + +[Click here](/docs-testcases/twozone_apartment_hydronic/index.html) to view detailed documentation. + +# Available Test Scenarios +### Time Periods +``peak_heat_day`` +``typical_heat_day`` +### Electricity Prices +``constant`` +``dynamic`` +``highly_dynamic``