Building Optimization Performance Tests
This repository contains prototype code for the Building Optimization Performance Test framework (BOPTEST) that is being developed as part of the IBPSA Project 1 (https://ibpsa.github.io/project1/).
/testcasescontains test cases, including docs, models, and configuration settings./examplescontains prototype code for interacting with a test case and running example tests with simple controllers. Those controllers are implemented in both Python (Version 2.7) and Julia (Version 1.0.3)./parsingcontains prototype code for a script that parses a Modelica model using signal exchange blocks and outputs a wrapper FMU and KPI json./templatecontains template Modelica code for a test case emulator model./testingcontains code for unit and functional testing of this software. See the README there for more information about running these tests./datacontains prototype code for generating and managing data associated with test cases. This includes boundary conditions, such as weather, schedules, and energy prices, as well as a map of test case FMU outputs needed to calculate KPIs./forecastcontains prototype code for returning boundary condition forecast, such as weather, schedules, and energy prices./kpiscontains prototype code for calculating key performance indicators./docscontains design requirements and guide documentation.
- Build the test case by
$ make build TESTCASE=testcase#where # is the number of the test case to build fromtestcases. - Deploy the test case by
$ make run TESTCASE=testcase#where # is the number of the test case that has been built fromtestcases. - In a separate process, use the test case API defined below to interact with the test case.
- Run an example controller test:
-
For Python based controllers:
- in a separate terminal, use
$ cd examples/python/ && python twoday_p.pyto test a simple proportional feedback controller on the testcase1 over a two-day period. - in a separate terminal, use
$ cd examples/python/ && python szvav_sup.pyto test a simple supervisory controller on the testcase2 over a two-day period.
- in a separate terminal, use
-
For Julia based controllers:
- in a separate terminal, use
$ cd examples/julia && make build Script=twoday_p && make run Script=twoday_pto test a simple proportional feedback controller on the testcase1 over a two-day period. - in a separate terminal, use
$ cd examples/julia && make build Script=szvav_sup && make run Script=szvav_supto test a simple supervisory controller on the testcase2 over a two-day period. - once the test is done, use
$ make remove-image Script=twoday_por$ make remove-image Script=szvav_supto removes containers, networks, volumes, and images.
- in a separate terminal, use
- Shutdown test case container by slecting container terminal window and
Ctrl+Cto close port,Ctrl+Dto exit docker container. - Remove the test case image by
$ make remove-image TESTCASE=testcase#.
- To interact, send RESTful requests to:
http://127.0.0.1:5000/<request>
Example RESTful interaction:
- Receive a list of available measurement names and their metadata:
$ curl http://127.0.0.1:5000/measurements - Receive a forecast of boundary condition data:
$ curl http://127.0.0.1:5000/forecast - Advance simulation of test case 2 with new heating and cooling temperature setpoints:
$ curl http://127.0.0.1:5000/advance -d '{"oveTSetRooHea_u":293.15,"oveTSetRooHea_activate":1, "oveTSetRooCoo_activate":1,"oveTSetRooCoo_u":298.15}' -H "Content-Type: application/json". Leave an empty json to advance the simulation using the setpoints embedded in the model.
| Interaction | Request |
|---|---|
| Advance simulation with control input and receive measurements | POST advance with json data "{<input_name>:}" |
| Initialize simulation to a start time using a warmup period in seconds | PUT initialize with arguments start_time=<value>, warmup_time=<value> |
| Receive communication step in seconds | GET step |
| Set communication step in seconds | PUT step with argument step=<value> |
| Receive sensor signal names (y) and metadata | GET measurements |
| Receive control signals names (u) and metadata | GET inputs |
| Receive test result data | GET results |
| Receive test KPIs | GET kpi |
| Receive test case name | GET name |
| Receive boundary condition forecast from current communication step | GET forecast |
| Receive boundary condition forecast parameters in seconds | GET forecast_parameters |
| Set boundary condition forecast parameters in seconds | PUT forecast_parameters with arguments horizon=<value>, interval=<value> |
See the wiki for use cases and development requirements.
A proposed BOPTEST home page and interface for creating accounts and sharing results is published here https://xd.adobe.com/view/0e0c63d4-3916-40a9-5e5c-cc03f853f40a-783d/.
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.” In Proc. of the 16th International Conference of IBPSA, Sep 2 – 4. Rome, Italy.