├── Brick ├── Brick.ttl ├── BrickFrame.ttl ├── BrickTag.ttl ├── BuildBrick.ipynb ├── Schema Engineering.xlsx ├── catalog-v001.xml └── guidelines.md ├── LICENSE ├── README.md ├── application_examples ├── FDD_APP.ipynb ├── FDD_APP.py ├── README.md ├── RUN_APPS.py ├── RUN_APPS_JG.py ├── demos │ ├── README.md │ ├── demo_equipment │ ├── demo_extra_namespace │ ├── demo_extra_namespace_query │ ├── demo_function_block.ipynb │ ├── demo_function_block.png │ ├── demo_functional_block │ ├── demo_inheritance │ ├── demo_list_upstream_heating_elements │ ├── demo_synonym │ ├── demo_temperature_of_hx_prim_in │ ├── demo_verb_matching │ └── func_block_example.ttl ├── example_building.py ├── example_building.ttl ├── names.xlsx ├── paper_apps.md └── runall.sh ├── building_instances ├── IBM_B3.ttl ├── ebu3b_brick.ttl ├── ghc_brick.ttl ├── gtc_brick.ttl ├── ibm_b3.ttl ├── rice_brick.ttl └── soda_brick.ttl ├── doc └── figs │ ├── heat_exchanger.pdf │ └── heat_exchanger.svg └── etc ├── haystack_instances └── ebu3b_haystack.csv └── instance_generators ├── EBU3B_UCSD ├── README ├── ebu3b_brick.ttl ├── ebu3b_brickgenerator.ipynb ├── ebu3b_description_to_tagset.csv └── ebu3b_sensor_types_location.csv ├── GHC_CMU ├── AHURelations.csv ├── CMU_AHU_OddBuildingTagSet.csv ├── CMU_GHC.csv ├── GHC_brick.ttl ├── Parser.py ├── README ├── TagSets.csv ├── archive │ ├── AHURelations_raw.csv │ ├── CMU_GHC.csv │ ├── CMU_GHC_VAV_example.owl │ ├── CMU_GHC_VAV_example.ttl │ ├── CMU_Gates_Hillman.ttl │ ├── relationship.csv │ └── toy-representation │ │ ├── asset.json │ │ ├── location.json │ │ ├── point.json │ │ └── point_discussion.pdf └── catalog-v001.xml ├── GTC_SDU ├── Makefile ├── README.md ├── gtc.json ├── gtc_brick.ttl ├── gtc_brickgenerator.py ├── gtc_vavs.json └── rooms.json ├── IBM ├── CreateOnt.ipynb ├── IBM_B3.ttl ├── IBM_B3_points.csv └── README ├── RICE_UVA ├── README ├── Rice.ttl ├── Rice_Type ├── convert2ttl.py ├── generator.py ├── point.csv ├── tagList └── tagSet └── SODA_UCB ├── README └── SODA ├── SodaParseKey ├── berkeley.ttl ├── convertSodaHallToBrick.py ├── figs ├── soda_ahu1.pdf └── soda_hx-1.pdf └── soda_hall_berkeley.ttl /Brick/BrickFrame.ttl: -------------------------------------------------------------------------------- 1 | @prefix : . 2 | @prefix owl: . 3 | @prefix rdf: . 4 | @prefix xml: . 5 | @prefix xsd: . 6 | @prefix rdfs: . 7 | 8 | a owl:Ontology . 9 | # 10 | # 11 | # ################################################################# 12 | # # 13 | # # Annotation properties 14 | # # 15 | # ################################################################# 16 | # 17 | # 18 | # http://buildsys.org/ontologies/BrickFrame#equivalentTagSet 19 | 20 | :equivalentTagSet a owl:AnnotationProperty . 21 | # 22 | # http://buildsys.org/ontologies/BrickFrame#isHierarchical 23 | 24 | :isHierarchical a owl:AnnotationProperty . 25 | # 26 | # http://buildsys.org/ontologies/BrickFrame#similarTagSet 27 | 28 | :similarTagSet a owl:AnnotationProperty ; 29 | rdfs:range :TagSet ; 30 | rdfs:domain :TagSet . 31 | # 32 | # http://buildsys.org/ontologies/BrickFrame#usedBy 33 | 34 | :usedBy a owl:AnnotationProperty . 35 | # 36 | # http://buildsys.org/ontologies/BrickFrame#usesDimension 37 | 38 | :usesDimension a owl:AnnotationProperty . 39 | # 40 | # http://buildsys.org/ontologies/BrickFrame#usesEquipment 41 | 42 | :usesEquipment a owl:AnnotationProperty ; 43 | rdfs:subPropertyOf :usesDimension . 44 | # 45 | # http://buildsys.org/ontologies/BrickFrame#usesLocation 46 | 47 | :usesLocation a owl:AnnotationProperty ; 48 | rdfs:subPropertyOf :usesDimension . 49 | # 50 | # http://buildsys.org/ontologies/BrickFrame#usesMeasurement 51 | 52 | :usesMeasurement a owl:AnnotationProperty ; 53 | rdfs:subPropertyOf :usesDimension . 54 | # 55 | # http://buildsys.org/ontologies/BrickFrame#usesPoint 56 | 57 | :usesPoint a owl:AnnotationProperty ; 58 | rdfs:subPropertyOf :usesDimension . 59 | # 60 | # http://buildsys.org/ontologies/BrickFrame#usesTag 61 | 62 | :usesTag a owl:AnnotationProperty . 63 | # 64 | # 65 | # 66 | # ################################################################# 67 | # # 68 | # # Object Properties 69 | # # 70 | # ################################################################# 71 | # 72 | # 73 | # http://buildsys.org/ontologies/BrickFrame#contains 74 | 75 | :contains a owl:ObjectProperty ; 76 | owl:inverseOf :isLocatedIn . 77 | # 78 | # http://buildsys.org/ontologies/BrickFrame#controls 79 | 80 | :controls a owl:ObjectProperty ; 81 | owl:inverseOf :isControlledBy ; 82 | a owl:AsymmetricProperty , owl:IrreflexiveProperty . 83 | # 84 | # http://buildsys.org/ontologies/BrickFrame#feeds 85 | 86 | :feeds a owl:ObjectProperty ; 87 | owl:inverseOf :isFedBy ; 88 | a owl:AsymmetricProperty , owl:IrreflexiveProperty . 89 | # 90 | # http://buildsys.org/ontologies/BrickFrame#hasInput 91 | 92 | :hasInput a owl:ObjectProperty ; 93 | owl:inverseOf :isInputOf ; 94 | a owl:AsymmetricProperty , owl:IrreflexiveProperty ; 95 | rdfs:domain :FunctionBlock ; 96 | rdfs:range :Signal . 97 | # 98 | # http://buildsys.org/ontologies/BrickFrame#hasMeasurement 99 | 100 | :hasMeasurement a owl:ObjectProperty ; 101 | owl:inverseOf :isMeasuredBy . 102 | # 103 | # http://buildsys.org/ontologies/BrickFrame#hasOutput 104 | 105 | :hasOutput a owl:ObjectProperty ; 106 | owl:inverseOf :isOutputOf ; 107 | a owl:AsymmetricProperty , owl:IrreflexiveProperty ; 108 | rdfs:domain :FunctionBlock ; 109 | rdfs:range :Signal . 110 | # 111 | # http://buildsys.org/ontologies/BrickFrame#hasPart 112 | 113 | :hasPart a owl:ObjectProperty ; 114 | owl:inverseOf :isPartOf ; 115 | a owl:AsymmetricProperty , owl:TransitiveProperty , owl:IrreflexiveProperty . 116 | # 117 | # http://buildsys.org/ontologies/BrickFrame#hasPoint 118 | 119 | :hasPoint a owl:ObjectProperty ; 120 | owl:inverseOf :isPointOf ; 121 | a owl:AsymmetricProperty , owl:IrreflexiveProperty ; 122 | rdfs:range :Point . 123 | # 124 | # http://buildsys.org/ontologies/BrickFrame#hasSubAsset 125 | 126 | :hasSubAsset a owl:ObjectProperty , owl:AsymmetricProperty , owl:TransitiveProperty , owl:IrreflexiveProperty . 127 | # 128 | # http://buildsys.org/ontologies/BrickFrame#hasTag 129 | 130 | :hasTag a owl:ObjectProperty ; 131 | owl:inverseOf :isTagOf ; 132 | a owl:AsymmetricProperty , owl:IrreflexiveProperty ; 133 | rdfs:domain :Taggable ; 134 | rdfs:range :Tag . 135 | # 136 | # http://buildsys.org/ontologies/BrickFrame#hasTagSet 137 | 138 | :hasTagSet a owl:ObjectProperty ; 139 | owl:inverseOf :isTagSetOf ; 140 | a owl:AsymmetricProperty , owl:IrreflexiveProperty ; 141 | rdfs:domain :Taggable ; 142 | rdfs:range :TagSet . 143 | # 144 | # http://buildsys.org/ontologies/BrickFrame#hasToken 145 | 146 | :hasToken a owl:ObjectProperty ; 147 | owl:inverseOf :isTokenOf ; 148 | a owl:AsymmetricProperty , owl:IrreflexiveProperty ; 149 | rdfs:domain :Label ; 150 | rdfs:range :Token . 151 | # 152 | # http://buildsys.org/ontologies/BrickFrame#isControlledBy 153 | 154 | :isControlledBy a owl:ObjectProperty . 155 | # 156 | # http://buildsys.org/ontologies/BrickFrame#isFedBy 157 | 158 | :isFedBy a owl:ObjectProperty . 159 | # 160 | # http://buildsys.org/ontologies/BrickFrame#isInputOf 161 | 162 | :isInputOf a owl:ObjectProperty ; 163 | rdfs:domain :Signal ; 164 | rdfs:range :FunctionBlock . 165 | # 166 | # http://buildsys.org/ontologies/BrickFrame#isLocatedIn 167 | 168 | :isLocatedIn a owl:ObjectProperty , owl:AsymmetricProperty , owl:TransitiveProperty , owl:IrreflexiveProperty . 169 | # 170 | # http://buildsys.org/ontologies/BrickFrame#isMeasuredBy 171 | 172 | :isMeasuredBy a owl:ObjectProperty , owl:AsymmetricProperty , owl:TransitiveProperty , owl:IrreflexiveProperty . 173 | # 174 | # http://buildsys.org/ontologies/BrickFrame#isOutputOf 175 | 176 | :isOutputOf a owl:ObjectProperty , owl:AsymmetricProperty , owl:IrreflexiveProperty ; 177 | rdfs:domain :Signal ; 178 | rdfs:range :FunctionBlock . 179 | # 180 | # http://buildsys.org/ontologies/BrickFrame#isPartOf 181 | 182 | :isPartOf a owl:ObjectProperty , owl:AsymmetricProperty , owl:TransitiveProperty , owl:IrreflexiveProperty . 183 | # 184 | # http://buildsys.org/ontologies/BrickFrame#isPointOf 185 | 186 | :isPointOf a owl:ObjectProperty , owl:AsymmetricProperty , owl:IrreflexiveProperty ; 187 | rdfs:range :Point . 188 | # 189 | # http://buildsys.org/ontologies/BrickFrame#isTagOf 190 | 191 | :isTagOf a owl:ObjectProperty , owl:AsymmetricProperty , owl:IrreflexiveProperty ; 192 | rdfs:domain :Tag ; 193 | rdfs:range :Taggable . 194 | # 195 | # http://buildsys.org/ontologies/BrickFrame#isTagSetOf 196 | 197 | :isTagSetOf a owl:ObjectProperty , owl:AsymmetricProperty , owl:IrreflexiveProperty ; 198 | rdfs:domain :TagSet ; 199 | rdfs:range :Taggable . 200 | # 201 | # http://buildsys.org/ontologies/BrickFrame#isTokenOf 202 | 203 | :isTokenOf a owl:ObjectProperty , owl:AsymmetricProperty , owl:IrreflexiveProperty ; 204 | rdfs:domain :Token ; 205 | rdfs:range :Label . 206 | # 207 | # 208 | # 209 | # ################################################################# 210 | # # 211 | # # Classes 212 | # # 213 | # ################################################################# 214 | # 215 | # 216 | # http://buildsys.org/ontologies/BrickFrame#Equipment 217 | 218 | :Equipment a owl:Class ; 219 | rdfs:subClassOf :Taggable . 220 | # 221 | # http://buildsys.org/ontologies/BrickFrame#FunctionBlock 222 | 223 | :FunctionBlock a owl:Class . 224 | # 225 | # http://buildsys.org/ontologies/BrickFrame#Label 226 | 227 | :Label a owl:Class ; 228 | rdfs:subClassOf :Taggable , _:genid1 . 229 | 230 | _:genid1 a owl:Restriction ; 231 | owl:onProperty :hasToken ; 232 | owl:someValuesFrom :Token . 233 | # 234 | # http://buildsys.org/ontologies/BrickFrame#Location 235 | 236 | :Location a owl:Class ; 237 | rdfs:subClassOf :Taggable . 238 | # 239 | # http://buildsys.org/ontologies/BrickFrame#ObservedSignal 240 | 241 | :ObservedSignal a owl:Class ; 242 | rdfs:subClassOf :Signal . 243 | # 244 | # http://buildsys.org/ontologies/BrickFrame#Point 245 | 246 | :Point a owl:Class ; 247 | rdfs:subClassOf :Taggable . 248 | # 249 | # http://buildsys.org/ontologies/BrickFrame#Signal 250 | 251 | :Signal a owl:Class . 252 | # 253 | # http://buildsys.org/ontologies/BrickFrame#Tag 254 | 255 | :Tag a owl:Class . 256 | # 257 | # http://buildsys.org/ontologies/BrickFrame#TagSet 258 | 259 | :TagSet a owl:Class . 260 | # 261 | # http://buildsys.org/ontologies/BrickFrame#Taggable 262 | 263 | :Taggable a owl:Class . 264 | # 265 | # http://buildsys.org/ontologies/BrickFrame#Token 266 | 267 | :Token a owl:Class ; 268 | rdfs:subClassOf :Taggable , _:genid2 . 269 | 270 | _:genid2 a owl:Restriction ; 271 | owl:onProperty :hasTag ; 272 | owl:someValuesFrom :Token . 273 | 274 | :Token rdfs:subClassOf _:genid3 . 275 | 276 | _:genid3 a owl:Restriction ; 277 | owl:onProperty :hasTagSet ; 278 | owl:someValuesFrom :TagSet . 279 | # 280 | # http://buildsys.org/ontologies/BrickFrame#UnobservedSignal 281 | 282 | :UnobservedSignal a owl:Class ; 283 | rdfs:subClassOf :Signal . 284 | # 285 | # Generated by the OWL API (version 4.1.3.20151118-2017) https://github.com/owlcs/owlapi 286 | -------------------------------------------------------------------------------- /Brick/Schema Engineering.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildSysUniformMetadata/GroundTruth/789ff13adc7713bb7cbfd374f370d9dc72ac07ac/Brick/Schema Engineering.xlsx -------------------------------------------------------------------------------- /Brick/catalog-v001.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Brick/guidelines.md: -------------------------------------------------------------------------------- 1 | How to Lay a BRICK 2 | ================== 3 | 4 | A key concept is that few relations are needed to provide value, but for each added relation that value increases. In these guidelines we differentiate between a simple model and an extended model. The simple model represents a sensible minimum. 5 | 6 | Relationships 7 | ------------- 8 | 9 | Use hasPoint instead of isPointOf. Similar goes for the rest of the relations. This allows the preprocessor of [the application test script](https://github.com/BuildSysUniformMetadata/GroundTruth/blob/master/apps/RUN_APPS.py) to do less preprocessing and not be quite as slow. 10 | 11 | Constructing a simple VAV 12 | ------------------------- 13 | 14 | A VAV needs to be instantiated. 15 | 16 | VAV_1 a VAV 17 | 18 | A VAV has a set of potential parts. Instances of such parts should be associated using the *hasPart* relationship. 19 | 20 | Supply_Damper_1 a Supply_Damper 21 | Return_Damper_1 a Return_Damper 22 | Cooling_Coil_1 a Cooling_Coil 23 | 24 | VAV_1 hasPart Supply_Damper_1 25 | VAV_1 hasPart Return_Damper_1 26 | VAV_1 hasPart Cooling_Coil_1 27 | 28 | If one knows about sensors then they should be fully described through tags and *isPointOf* the VAV instance. 29 | 30 | Supply_Air_Temperature_Sensor_1 a Supply_Air_Temperature_Sensor 31 | Supply_Air_Temperature_Sensor_1 isPointOf VAV_1 32 | 33 | Here, Supply_Air_Temperature_Sensor implies the tags Supply (the role), Air (the media), Temperature (the modality) and Sensor (the type). 34 | 35 | Extending the VAV Due to Increased Visibility 36 | --------------------------------------------- 37 | 38 | If one has visibility into the internals of the VAV then the _feeds_ relationship may be used. 39 | 40 | Supply_Damper_1 feeds Cooling_Coil_1 41 | Cooling_Coil_1 feeds Supply_Air_Temperature_Sensor_1 42 | 43 | The equipment class is relative to the output of its context. Due to its *partOf* relation to VAV_1 Supply_Air_Temperature_Sensor_1 thus measures the *temperature* of the *airflow* in the *supply* direction on the output side of VAV_1. 44 | 45 | Extending the VAV Due to Increased Specificity 46 | ---------------------------------------------- 47 | 48 | If existing tagsets do not offer enough specificity then a subclass may be constructed. Imagine a temperature sensor -- within VAV_1 -- measuring the same the same the same (role,media,modality), but at the input side of the VAV. This sensor is on the output side of whatever is feeding VAV_1. For the sake of this example, lets call this an AHU. 49 | 50 | AHU_Supply_Air_Temperature_Sensor isSubClassOf Supply_Air_Temperature_Sensor 51 | AHU_Supply_Air_Temperature_Sensor_1 a AHU_Supply_Air_Temperature_Sensor 52 | AHU_Supply_Air_Temperature_Sensor_1 isPointOf VAV_1 53 | 54 | VAV_Supply_Air_Temperature_Sensor isSubClassOf Supply_Air_Temperature_Sensor 55 | VAV_Supply_Air_Temperature_Sensor_1 a VAV_Supply_Air_Temperature_Sensor 56 | VAV_Supply_Air_Temperature_Sensor_1 isPointOf VAV_1 57 | 58 | For convenience, we can alias this to: 59 | 60 | Input_Supply_Air_Temperature_Sensor hasSynonym AHU_Supply_Air_Temperature_Sensor 61 | Output_Supply_Air_Temperature_Sensor hasSynonym VAV_Supply_Air_Temperature_Sensor 62 | 63 | Complex Entities 64 | ---------------- 65 | 66 | Certain equipments fit badly -- or not at all -- into this model. One example is the feeds relationships of a heat exchanger. A heat exchanger transfers heat between two flows without transferring matter between them. Essentially, it has 4 named ports. In reference to the primary and secondary flows, these are 67 | 68 | 1. Primary Input 69 | 2. Primary Output 70 | 3. Secondary Input 71 | 4. Secondary Output 72 | 73 | It is impossible to distinguish between the primary and secondary flows if these are represented as a single entity. Instead, we define what is known as a functional block to group entities 74 | 75 | Function_Block isSubClassOf Thing 76 | Heat_Exchanger_Function_Block isSubClassOf Function_Block 77 | Heat_Exchanger_Primary_Input isSubClassOf Thing 78 | Heat_Exchanger_Primary_Output isSubClassOf Thing 79 | Heat_Exchanger_Secondary_Input isSubClassOf Thing 80 | Heat_Exchanger_Secondary_Output isSubClassOf Thing 81 | Heat_Exchanger_Primary_Input feeds Heat_Exchanger_Primary_Output 82 | Heat_Exchanger_Primary_Input feeds Heat_Exchanger_Secondary_Output 83 | Heat_Exchanger_Secondary_Input feeds Heat_Exchanger_Primary_Output 84 | Heat_Exchanger_Secondary_Input feeds Heat_Exchanger_Secondary_Output 85 | 86 | and create an instance 87 | 88 | HX_1 a Heat_Exchanger 89 | HX_1_FB a Heat_Exchanger_Functional_Block 90 | HX_1_PI a Heat_Exchanger_Primary_Input 91 | HX_1_PO a Heat_Exchanger_Primary_Output 92 | HX_1_SI a Heat_Exchanger_Secondary_Input 93 | HX_1_SO a Heat_Exchanger_Secondary_Output 94 | 95 | which we then tie together 96 | 97 | HX_1_FB isPartOf HX_1 98 | HX_1_PI isPartOf HX_1_FB 99 | HX_1_PO isPartOf HX_1_FB 100 | HX_1_SI isPartOf HX_1_FB 101 | HX_1_SO isPartOf HX_1_FB 102 | 103 | This allows us to have feeds relationships on with HX_1_PI, HX_1_PO, HX_1_SI and HX_1_SO in the role of subject and object. 104 | 105 | Where Do We Go from Here? 106 | ------------------------- 107 | 108 | Missing Tags, TagSets and Relations may be added [here](https://docs.google.com/spreadsheets/d/1QTSu0UxJ7UqRvgTW2P1Q4qudoBbvPqXpEhYiulyjcro/edit#gid=0). This spreadsheet is then exported to XL and processed by an IronPython notebook into the /BuildingSchema/Brick*.ttl files. 109 | 110 | The current schema layout is: 111 | 112 | - Tags are in [/BuildingSchema/BrickTag.ttl](https://github.com/BuildSysUniformMetadata/GroundTruth/blob/master/BuildingSchema/BrickTag.ttl) 113 | - TagSets are in [/BuildingSchema/Brick.ttl](https://github.com/BuildSysUniformMetadata/GroundTruth/blob/master/BuildingSchema/Brick.ttl) 114 | - Relations are in [/BuildingSchema/BrickFrame.ttl](https://github.com/BuildSysUniformMetadata/GroundTruth/blob/master/BuildingSchema/BrickFrame.ttl) 115 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016, Brick Development Team 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions 6 | are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of any 17 | contributors may be used to endorse or promote products derived 18 | from this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 | HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | 32 | About the Copyright Holders 33 | =========================== 34 | Brick Development Team was initiated to produce a unified metadata 35 | schema for resources in buildings in early 2016. The team consists 36 | of members from IBM, Carnegie Mellon University, University of 37 | California, Berkeley, University of California, Los Angeles, 38 | University of California, San Diego, University of Virginia and 39 | University of Southern Denmark. 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **Note that we have initialized a realease/development repository. Please visit there for actual usage:https://github.com/BuildSysUniformMetadata/Brick** 2 | 3 | This repository contains Brick schema, actual building instances of Brick, application examples and other auxiliary information. 4 | 5 | 6 | # Navigation 7 | 8 | /Brick/: contains the entire Brick schema. 9 | 10 | /Brick/Brick.ttl : Tagsets with hierarchy 11 | 12 | /Brick/BrickTag.ttl : Tags with hierarchy 13 | 14 | /Brick/BrickFrame.ttl : The framework to describe how Tagsets and Tags are related between and among them. 15 | 16 | /building_instances/: contains actual building instances from multiple campuses. 17 | 18 | /etc/instance_generators/: contains codes of how each group generates its building instance with Brick. 19 | 20 | /etc/haystack_instances/: contains our effort to describe bulidings with Project Haystack 21 | -------------------------------------------------------------------------------- /application_examples/FDD_APP.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "# read required inputs from excel\n", 12 | "import pandas as pd\n", 13 | "pt = pd.read_excel('names.xlsx')" 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": {}, 19 | "source": [ 20 | "The rule-based FDD application requires the following minimal inputs from AHUs in order to run the rules:" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 2, 26 | "metadata": { 27 | "collapsed": false 28 | }, 29 | "outputs": [ 30 | { 31 | "data": { 32 | "text/html": [ 33 | "
\n", 34 | "\n", 35 | " \n", 36 | " \n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | "
points neededpoints in BRICKacronym
0hot water valvePreheat_Hot_Water_Valve/Preheat_Valve_VFD/Heating_ValveHW_VLV
1chilled water valveChilled_Water_Valve/Cooling_ValveCHW_VLV
2mixed air temperatureHeat_Wheel_Supply_Air_Temperature_SensorMAT
3outside air temperatureOutside_Air_Temperature_SensorOAT
4return air temperatureReturn_Air_Temperature_SensorRAT
5supply air temperatureDischarge_Air_Temperature_SensorSAT
6supply air temperature setpointDischarge_Air_Temperature_Sensor_SetpointSAT_SPT
7outside air relative humidityOutside_Air_Humidity_SensorOA_RH
8return air relative humidityReturn_Air_Humidity_SensorRA_RH
9outside air damperOutside_Air_Damper_Position_SensorOAD
10mixed air damperMixed_Air_Damper_Position_SensorMAD
\n", 112 | "
" 113 | ], 114 | "text/plain": [ 115 | " points needed \\\n", 116 | "0 hot water valve \n", 117 | "1 chilled water valve \n", 118 | "2 mixed air temperature \n", 119 | "3 outside air temperature \n", 120 | "4 return air temperature \n", 121 | "5 supply air temperature \n", 122 | "6 supply air temperature setpoint \n", 123 | "7 outside air relative humidity \n", 124 | "8 return air relative humidity \n", 125 | "9 outside air damper \n", 126 | "10 mixed air damper \n", 127 | "\n", 128 | " points in BRICK acronym \n", 129 | "0 Preheat_Hot_Water_Valve/Preheat_Valve_VFD/Heating_Valve HW_VLV \n", 130 | "1 Chilled_Water_Valve/Cooling_Valve CHW_VLV \n", 131 | "2 Heat_Wheel_Supply_Air_Temperature_Sensor MAT \n", 132 | "3 Outside_Air_Temperature_Sensor OAT \n", 133 | "4 Return_Air_Temperature_Sensor RAT \n", 134 | "5 Discharge_Air_Temperature_Sensor SAT \n", 135 | "6 Discharge_Air_Temperature_Sensor_Setpoint SAT_SPT \n", 136 | "7 Outside_Air_Humidity_Sensor OA_RH \n", 137 | "8 Return_Air_Humidity_Sensor RA_RH \n", 138 | "9 Outside_Air_Damper_Position_Sensor OAD \n", 139 | "10 Mixed_Air_Damper_Position_Sensor MAD " 140 | ] 141 | }, 142 | "execution_count": 2, 143 | "metadata": {}, 144 | "output_type": "execute_result" 145 | } 146 | ], 147 | "source": [ 148 | "pd.set_option('max_colwidth',80)\n", 149 | "pt" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 3, 155 | "metadata": { 156 | "collapsed": false 157 | }, 158 | "outputs": [], 159 | "source": [ 160 | "points_map = {}\n", 161 | "for row in pt.iterrows():\n", 162 | " points_map[str(row[1][2])] = str(row[1][1]).split('/')" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 4, 168 | "metadata": { 169 | "collapsed": false 170 | }, 171 | "outputs": [ 172 | { 173 | "data": { 174 | "text/plain": [ 175 | "{'CHW_VLV': ['Chilled_Water_Valve', 'Cooling_Valve'],\n", 176 | " 'HW_VLV': ['Preheat_Hot_Water_Valve', 'Preheat_Valve_VFD', 'Heating_Valve'],\n", 177 | " 'MAD': ['Mixed_Air_Damper_Position_Sensor'],\n", 178 | " 'MAT': ['Heat_Wheel_Supply_Air_Temperature_Sensor'],\n", 179 | " 'OAD': ['Outside_Air_Damper_Position_Sensor'],\n", 180 | " 'OAT': ['Outside_Air_Temperature_Sensor'],\n", 181 | " 'OA_RH': ['Outside_Air_Humidity_Sensor'],\n", 182 | " 'RAT': ['Return_Air_Temperature_Sensor'],\n", 183 | " 'RA_RH': ['Return_Air_Humidity_Sensor'],\n", 184 | " 'SAT': ['Discharge_Air_Temperature_Sensor'],\n", 185 | " 'SAT_SPT': ['Discharge_Air_Temperature_Sensor_Setpoint']}" 186 | ] 187 | }, 188 | "execution_count": 4, 189 | "metadata": {}, 190 | "output_type": "execute_result" 191 | } 192 | ], 193 | "source": [ 194 | "points_map" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 5, 200 | "metadata": { 201 | "collapsed": false 202 | }, 203 | "outputs": [], 204 | "source": [ 205 | "import rdflib\n", 206 | "\n", 207 | "g = rdflib.Graph()\n", 208 | "g.parse('../CMU-Yuvraj/GHCYuvraj_brick.ttl', format='turtle')\n", 209 | "# g.parse('../IBM/IBM_B3.ttl', format='turtle')\n", 210 | "# g.parse('../UCSD/EBU3B/ebu3b_brick.ttl', format='turtle')\n", 211 | "# g.parse('example_building.ttl', format='turtle')\n", 212 | "# g.parse('../SDU/', format='turtle')\n", 213 | "\n", 214 | "BRICKFRAME = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#')\n", 215 | "g.bind( 'bf', BRICKFRAME)\n", 216 | "BRICK = rdflib.Namespace('https://brickschema.org/schema/1.0.1/Brick#')\n", 217 | "g.bind('brick', BRICK)" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": 6, 223 | "metadata": { 224 | "collapsed": false 225 | }, 226 | "outputs": [], 227 | "source": [ 228 | "# query goes here\n", 229 | "def get_points(acronym,brick_name,g):\n", 230 | " res = g.query(\"\"\"\n", 231 | " SELECT ?%s\n", 232 | " WHERE {\n", 233 | " ?%s rdf:type brick:%s .\n", 234 | " ?ahu rdf:type brick:AHU .\n", 235 | " ?%s bf:isPointOf ?ahu .\n", 236 | " }\n", 237 | " \"\"\" % (acronym,acronym,brick_name,acronym))\n", 238 | " \n", 239 | " return list(res)" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": 7, 245 | "metadata": { 246 | "collapsed": false 247 | }, 248 | "outputs": [ 249 | { 250 | "name": "stdout", 251 | "output_type": "stream", 252 | "text": [ 253 | "Runing query for SAT_SPT ......\n", 254 | "\tNumber of points found for Discharge_Air_Temperature_Sensor_Setpoint : 0\n", 255 | "Runing query for CHW_VLV ......\n", 256 | "\tNumber of points found for Chilled_Water_Valve : 11\n", 257 | "\tNumber of points found for Cooling_Valve : 0\n", 258 | "Runing query for OAD ......\n", 259 | "\tNumber of points found for Outside_Air_Damper_Position_Sensor : 11\n", 260 | "Runing query for OA_RH ......\n", 261 | "\tNumber of points found for Outside_Air_Humidity_Sensor : 9\n", 262 | "Runing query for MAT ......\n", 263 | "\tNumber of points found for Heat_Wheel_Supply_Air_Temperature_Sensor : 9\n", 264 | "Runing query for RAT ......\n", 265 | "\tNumber of points found for Return_Air_Temperature_Sensor : 11\n", 266 | "Runing query for OAT ......\n", 267 | "\tNumber of points found for Outside_Air_Temperature_Sensor : 11\n", 268 | "Runing query for HW_VLV ......\n", 269 | "\tNumber of points found for Preheat_Hot_Water_Valve : 0\n", 270 | "\tNumber of points found for Preheat_Valve_VFD : 11\n", 271 | "\tNumber of points found for Heating_Valve : 0\n", 272 | "Runing query for MAD ......\n", 273 | "\tNumber of points found for Mixed_Air_Damper_Position_Sensor : 9\n", 274 | "Runing query for RA_RH ......\n", 275 | "\tNumber of points found for Return_Air_Humidity_Sensor : 0\n", 276 | "Runing query for SAT ......\n", 277 | "\tNumber of points found for Discharge_Air_Temperature_Sensor : 21\n" 278 | ] 279 | } 280 | ], 281 | "source": [ 282 | "from collections import defaultdict\n", 283 | "\n", 284 | "Result = defaultdict(list)\n", 285 | "\n", 286 | "for acr,brk_names in points_map.items():\n", 287 | " print \"Runing query for %s ......\" % acr\n", 288 | " for brk in brk_names:\n", 289 | " res = get_points(acr,brk,g)\n", 290 | " print \"\\tNumber of points found for %s : %d\" % (brk,len(res))\n", 291 | " Result[acr].append(res)" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "execution_count": 8, 297 | "metadata": { 298 | "collapsed": false 299 | }, 300 | "outputs": [ 301 | { 302 | "name": "stdout", 303 | "output_type": "stream", 304 | "text": [ 305 | "units containing out side air temperature sensor:\n", 306 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-1_I/outdoor_temp\n", 307 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-5_I/OA_Temp\n", 308 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-3_I/outdoor_temp\n", 309 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-2_I/outdoor_temp\n", 310 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-9_I/outdoor_temp\n", 311 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-10_I/outdoor_temp\n", 312 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-7_I/outdoor_temp\n", 313 | "http://cmu.edu/building/ontology/ghc#SCSC_Hillman/AHU-12_I/outdoor_temp\n", 314 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-4_I/outdoor_temp\n", 315 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-5_I/outdoor_temp\n", 316 | "http://cmu.edu/building/ontology/ghc#SCSC_Gates/AHU-11_I/outdoor_temp\n" 317 | ] 318 | } 319 | ], 320 | "source": [ 321 | "print \"units containing out side air temperature sensor:\"\n", 322 | "for i in [str(i[0]) for i in Result['OAT'][0]]:\n", 323 | " print i" 324 | ] 325 | } 326 | ], 327 | "metadata": { 328 | "kernelspec": { 329 | "display_name": "Python 2", 330 | "language": "python", 331 | "name": "python2" 332 | }, 333 | "language_info": { 334 | "codemirror_mode": { 335 | "name": "ipython", 336 | "version": 2 337 | }, 338 | "file_extension": ".py", 339 | "mimetype": "text/x-python", 340 | "name": "python", 341 | "nbconvert_exporter": "python", 342 | "pygments_lexer": "ipython2", 343 | "version": "2.7.11" 344 | } 345 | }, 346 | "nbformat": 4, 347 | "nbformat_minor": 0 348 | } 349 | -------------------------------------------------------------------------------- /application_examples/FDD_APP.py: -------------------------------------------------------------------------------- 1 | 2 | # coding: utf-8 3 | 4 | # In[1]: 5 | 6 | # read required inputs from excel 7 | import pandas as pd 8 | pt = pd.read_excel('names.xlsx') 9 | 10 | 11 | # The rule-based FDD application requires the following minimal inputs from AHUs in order to run the rules: 12 | 13 | # In[2]: 14 | 15 | pd.set_option('max_colwidth',80) 16 | pt 17 | 18 | 19 | # In[3]: 20 | 21 | points_map = {} 22 | for row in pt.iterrows(): 23 | points_map[str(row[1][2])] = str(row[1][1]).split('/') 24 | 25 | 26 | # In[4]: 27 | 28 | points_map 29 | 30 | 31 | # In[5]: 32 | 33 | import rdflib 34 | 35 | g = rdflib.Graph() 36 | g.parse('../CMU-Yuvraj/GHCYuvraj_brick.ttl', format='turtle') 37 | # g.parse('../IBM/IBM_B3.ttl', format='turtle') 38 | # g.parse('../UCSD/EBU3B/ebu3b_brick.ttl', format='turtle') 39 | # g.parse('example_building.ttl', format='turtle') 40 | # g.parse('../SDU/', format='turtle') 41 | 42 | BRICKFRAME = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 43 | g.bind( 'bf', BRICKFRAME) 44 | BRICK = rdflib.Namespace('https://brickschema.org/schema/1.0.1/Brick#') 45 | g.bind('brick', BRICK) 46 | 47 | 48 | # In[6]: 49 | 50 | # query goes here 51 | def get_points(acronym,brick_name,g): 52 | res = g.query(""" 53 | SELECT ?%s 54 | WHERE { 55 | ?%s rdf:type brick:%s . 56 | ?ahu rdf:type brick:AHU . 57 | ?%s bf:isPointOf ?ahu . 58 | } 59 | """ % (acronym,acronym,brick_name,acronym)) 60 | 61 | return list(res) 62 | 63 | 64 | # In[7]: 65 | 66 | from collections import defaultdict 67 | 68 | Result = defaultdict(list) 69 | 70 | for acr,brk_names in points_map.items(): 71 | print "Runing query for %s ......" % acr 72 | for brk in brk_names: 73 | res = get_points(acr,brk,g) 74 | print "\tNumber of points found for %s : %d" % (brk,len(res)) 75 | Result[acr].append(res) 76 | 77 | 78 | # In[8]: 79 | 80 | print "units containing out side air temperature sensor:" 81 | for i in [str(i[0]) for i in Result['OAT'][0]]: 82 | print i 83 | 84 | -------------------------------------------------------------------------------- /application_examples/README.md: -------------------------------------------------------------------------------- 1 | # Applications 2 | 3 | Need rdflib installed 4 | 5 | ``` 6 | pip install rdflib 7 | ``` 8 | 9 | Run this: 10 | 11 | ``` 12 | python RUN_APPS.py 13 | ``` 14 | -------------------------------------------------------------------------------- /application_examples/RUN_APPS.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys 4 | import os 5 | import rdflib 6 | 7 | try: 8 | from termcolor import colored 9 | except: 10 | print "pip install termcolor" 11 | def f(x,y, attrs=[]): 12 | print x 13 | colored = f 14 | 15 | def printResults(res): 16 | if len(res) > 0: 17 | color = 'green' 18 | else: 19 | color = 'red' 20 | print colored("-> {0} results".format(len(res)), color, attrs=['bold']) 21 | 22 | def printTuples(res): 23 | for row in res: 24 | print map(lambda x: x.split('#')[-1], row) 25 | 26 | if len(sys.argv) < 2: 27 | print "Need a turtle file of a building" 28 | sys.exit(0) 29 | 30 | RDF = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 31 | RDFS = rdflib.Namespace('http://www.w3.org/2000/01/rdf-schema#') 32 | BRICK = rdflib.Namespace('https://brickschema.org/schema/1.0.1/Brick#') 33 | BRICKFRAME = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 34 | BRICKTAG = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickTag#') 35 | OWL = rdflib.Namespace('http://www.w3.org/2002/07/owl#') 36 | 37 | def new_graph(): 38 | g = rdflib.Graph() 39 | g.bind( 'rdf', RDF) 40 | g.bind( 'rdfs', RDFS) 41 | g.bind( 'brick', BRICK) 42 | g.bind( 'bf', BRICKFRAME) 43 | g.bind( 'btag', BRICKTAG) 44 | g.bind( 'owl', OWL) 45 | g.parse('../Brick/Brick.ttl', format='turtle') 46 | g.parse('../Brick/BrickFrame.ttl', format='turtle') 47 | g.parse('../Brick/BrickTag.ttl', format='turtle') 48 | return g 49 | 50 | g = new_graph() 51 | g.parse(sys.argv[1], format='turtle') 52 | 53 | # ADD INVERSE RELATIONSHIPS 54 | res = g.query("SELECT ?a ?b WHERE { ?a bf:hasPart ?b .}") 55 | for row in res: 56 | g.add((row[1], BRICKFRAME.isPartOf, row[0])) 57 | res = g.query("SELECT ?a ?b WHERE { ?a bf:isPartOf ?b .}") 58 | for row in res: 59 | g.add((row[1], BRICKFRAME.hasPart, row[0])) 60 | 61 | res = g.query("SELECT ?a ?b WHERE {?a bf:hasPoint ?b .}") 62 | for row in res: 63 | g.add((row[1], BRICKFRAME.isPointOf, row[0])) 64 | res = g.query("SELECT ?a ?b WHERE {?a bf:isPointOf ?b .}") 65 | for row in res: 66 | g.add((row[1], BRICKFRAME.hasPoint, row[0])) 67 | 68 | res = g.query("SELECT ?a ?b WHERE {?a bf:feeds ?b .}") 69 | for row in res: 70 | g.add((row[1], BRICKFRAME.isFedBy, row[0])) 71 | res = g.query("SELECT ?a ?b WHERE {?a bf:isFedBy ?b .}") 72 | for row in res: 73 | g.add((row[1], BRICKFRAME.feeds, row[0])) 74 | 75 | res = g.query("SELECT ?a ?b WHERE {?a bf:contains ?b .}") 76 | for row in res: 77 | g.add((row[1], BRICKFRAME.isLocatedIn, row[0])) 78 | res = g.query("SELECT ?a ?b WHERE {?a bf:isLocatedIn ?b .}") 79 | for row in res: 80 | g.add((row[1], BRICKFRAME.contains, row[0])) 81 | 82 | res = g.query("SELECT ?a ?b WHERE {?a bf:controls ?b .}") 83 | for row in res: 84 | g.add((row[1], BRICKFRAME.isControlledBy, row[0])) 85 | res = g.query("SELECT ?a ?b WHERE {?a bf:isControlledBy ?b .}") 86 | for row in res: 87 | g.add((row[1], BRICKFRAME.controls, row[0])) 88 | 89 | res = g.query("SELECT ?a ?b WHERE {?a bf:hasOutput ?b .}") 90 | for row in res: 91 | g.add((row[1], BRICKFRAME.isOutputOf, row[0])) 92 | 93 | res = g.query("SELECT ?a ?b WHERE {?a bf:hasInput ?b .}") 94 | for row in res: 95 | g.add((row[1], BRICKFRAME.isInputOf, row[0])) 96 | 97 | res = g.query("SELECT ?a ?b WHERE {?a bf:hasTagSet ?b .}") 98 | for row in res: 99 | g.add((row[1], BRICKFRAME.isTagSetOf, row[0])) 100 | 101 | res = g.query("SELECT ?a ?b WHERE {?a bf:hasToken ?b .}") 102 | for row in res: 103 | g.add((row[1], BRICKFRAME.isTokenOf, row[0])) 104 | 105 | print "--- Occupancy Modeling App ---" ############################################ Occupancy Modeling 106 | print "Finding Temp sensors in all rooms" 107 | res = g.query(""" 108 | SELECT DISTINCT ?sensor ?room 109 | WHERE { 110 | 111 | { ?sensor rdf:type/rdfs:subClassOf* brick:Zone_Temperature_Sensor . } 112 | UNION 113 | { ?sensor rdf:type/rdfs:subClassOf* brick:Discharge_Air_Temperature_Sensor . } 114 | UNION 115 | 116 | { ?sensor rdf:type/rdfs:subClassOf* brick:Occupancy_Sensor . } 117 | 118 | UNION 119 | 120 | { ?sensor rdf:type/rdfs:subClassOf* brick:CO2_Sensor . } 121 | 122 | ?vav rdf:type brick:VAV . 123 | ?zone rdf:type brick:HVAC_Zone . 124 | ?room rdf:type brick:Room . 125 | 126 | ?vav bf:feeds+ ?zone . 127 | ?zone bf:hasPart ?room . 128 | 129 | {?sensor bf:isPointOf ?vav } 130 | UNION 131 | {?sensor bf:isPointOf ?room } 132 | 133 | }""") 134 | printResults(res) 135 | 136 | print "Finding CO2, Occ sensors" 137 | res = g.query(""" 138 | SELECT DISTINCT ?sensor ?vav 139 | WHERE { 140 | 141 | { ?sensor rdf:type/rdfs:subClassOf* brick:Occupancy_Sensor . } 142 | UNION 143 | { ?sensor rdf:type/rdfs:subClassOf* brick:CO2_Sensor . } 144 | 145 | ?room rdf:type brick:Room . 146 | ?sensor bf:isPointOf ?room . 147 | 148 | }""") 149 | printResults(res) 150 | 151 | 152 | print "Finding all power meters for equipment in rooms" 153 | res = g.query(""" 154 | SELECT ?meter ?equipment ?room 155 | WHERE { 156 | 157 | { 158 | {?meter rdf:type brick:Power_Meter} 159 | UNION 160 | {?meter rdf:type/rdfs:subClassOf+ brick:Power_Meter} 161 | } 162 | 163 | ?room rdf:type brick:Room . 164 | ?equipment rdf:type ?class . 165 | ?class rdfs:subClassOf+ brick:Equipment . 166 | ?equipment bf:isLocatedIn ?room . 167 | ?meter bf:isPointOf ?equipment . 168 | }""") 169 | printResults(res) 170 | 171 | 172 | print "Find all power meters for HVAC equipment" 173 | res = g.query(""" 174 | SELECT ?meter ?equipment ?room 175 | WHERE { 176 | ?meter rdf:type/rdfs:subClassOf* brick:Power_Meter . 177 | 178 | ?room rdf:type brick:Room . 179 | ?meter bf:isPointOf ?equipment . 180 | 181 | ?equipment rdf:type ?class . 182 | ?class rdfs:subClassOf+ brick:Heating_Ventilation_Air_Conditioning_System . 183 | 184 | {?zone rdf:type/rdfs:subClassOf* brick:HVAC_Zone} 185 | 186 | ?equipment bf:feeds+ ?zone . 187 | ?zone bf:hasPart ?room . 188 | }""") 189 | printResults(res) 190 | 191 | print "Find all power meters for Lighting equipment" 192 | res = g.query(""" 193 | SELECT ?meter ?equipment ?room 194 | WHERE { 195 | ?meter rdf:type brick:Power_Meter . 196 | ?room rdf:type brick:Room . 197 | ?meter bf:isPointOf ?equipment . 198 | 199 | ?equipment rdf:type ?class . 200 | ?class rdfs:subClassOf+ brick:Lighting_System . 201 | 202 | ?zone bf:hasPart ?room . 203 | { ?equipment bf:feeds+ ?zone } 204 | UNION 205 | { ?equipment bf:feeds+ ?room } 206 | }""") 207 | printResults(res) 208 | 209 | print "...or if that doesn't work, find all power meters" 210 | res = g.query(""" 211 | SELECT ?meter ?loc 212 | WHERE { 213 | ?meter rdf:type/rdfs:subClassOf* brick:Power_Meter . 214 | ?loc rdf:type ?loc_class . 215 | ?loc_class rdfs:subClassOf+ brick:Location . 216 | 217 | ?loc bf:hasPoint ?meter . 218 | } 219 | """) 220 | printResults(res) 221 | 222 | print 223 | 224 | print "--- Energy Apportionment App ---" ############################################ Energy Apportionment 225 | print "Find Occ sensors in all rooms" 226 | res = g.query(""" 227 | SELECT ?sensor ?room 228 | WHERE { 229 | ?sensor rdf:type/rdfs:subClassOf* brick:Occupancy_Sensor . 230 | ?room rdf:type brick:Room . 231 | ?sensor bf:isLocatedIn ?room . 232 | ?sensor bf:isPointOf ?room . 233 | }""") 234 | printResults(res) 235 | 236 | print "Find lux sensors in rooms" 237 | res = g.query(""" 238 | SELECT ?sensor ?room 239 | WHERE { 240 | ?sensor rdf:type/rdfs:subClassOf* brick:Luminance_Sensor . 241 | ?room rdf:type brick:Room . 242 | ?sensor bf:isLocatedIn ?room . 243 | ?sensor bf:isPointOf ?room . 244 | }""") 245 | printResults(res) 246 | 247 | print "Find lighting/hvac equipment (e.g. desk lamps) rooms" 248 | res = g.query(""" 249 | SELECT ?equipment ?room 250 | WHERE { 251 | ?room rdf:type brick:Room . 252 | 253 | ?equipment bf:isLocatedIn ?room . 254 | 255 | { ?equipment rdf:type/rdfs:subClassOf* brick:Lighting_System .} 256 | UNION 257 | { ?equipment rdf:type/rdfs:subClassOf* brick:Heating_Ventilation_Air_Conditioning_System .} 258 | }""") 259 | printResults(res) 260 | 261 | print 262 | 263 | print "--- Web Displays App ---" ################################################ Web Displays 264 | print "Reheat/cool valve command for VAVs" 265 | res = g.query(""" 266 | SELECT ?vlv_cmd ?vav 267 | WHERE { 268 | { 269 | { ?vlv_cmd rdf:type brick:Reheat_Valve_Command } 270 | UNION 271 | { ?vlv_cmd rdf:type brick:Cooling_Valve_Command } 272 | } 273 | ?vav rdf:type brick:VAV . 274 | ?vav bf:hasPoint+ ?vlv_cmd . 275 | } 276 | """) 277 | printResults(res) 278 | 279 | print "Airflow sensor for all VAVs" 280 | res = g.query(""" 281 | SELECT ?airflow_sensor ?room ?vav 282 | WHERE { 283 | { ?airflow_sensor rdf:type/rdfs:subClassOf* brick:Discharge_Air_Flow_Sensor . } 284 | 285 | UNION 286 | 287 | { ?airflow_sensor rdf:type/rdfs:subClassOf* brick:Supply_Air_Flow_Sensor . } 288 | 289 | ?vav rdf:type brick:VAV . 290 | ?room rdf:type brick:Room . 291 | ?zone rdf:type brick:HVAC_Zone . 292 | ?vav bf:feeds+ ?zone . 293 | ?room bf:isPartOf ?zone . 294 | 295 | ?airflow_sensor bf:isPointOf ?vav . 296 | }""") 297 | printResults(res) 298 | 299 | print "Associate VAVs to zones and rooms" 300 | res = g.query(""" 301 | SELECT ?vav ?room 302 | WHERE { 303 | ?vav rdf:type brick:VAV . 304 | ?room rdf:type brick:Room . 305 | ?zone rdf:type brick:HVAC_Zone . 306 | ?vav bf:feeds+ ?zone . 307 | ?room bf:isPartOf ?zone . 308 | }""") 309 | printResults(res) 310 | 311 | print "Find power meters for cooling loop, heating loop" 312 | res = g.query(""" 313 | SELECT ?equip ?meter 314 | WHERE { 315 | ?meter rdf:type brick:Power_Meter . 316 | 317 | ?meter bf:isPointOf* ?equip . 318 | 319 | ?equip bf:isPartOf* ?thing . 320 | 321 | {?thing rdf:type/rdfs:subClassOf* brick:Water_System } 322 | UNION 323 | {?thing rdf:type/rdfs:subClassOf* brick:Heating_Ventilation_Air_Conditioning_System } 324 | }""") 325 | printResults(res) 326 | printTuples(res) 327 | 328 | 329 | print 330 | 331 | print "--- Model-Predictive Control App ---" 332 | 333 | print "Find all floors, hvac zones, rooms" 334 | res = g.query(""" 335 | # no more building 336 | SELECT ?floor ?room ?zone 337 | WHERE { 338 | ?floor rdf:type brick:Floor . 339 | ?room rdf:type brick:Room . 340 | ?zone rdf:type brick:HVAC_Zone . 341 | 342 | ?room bf:isPartOf+ ?floor . 343 | ?room bf:isPartOf+ ?zone . 344 | }""") 345 | printResults(res) 346 | 347 | #print "Find windows in the room" 348 | print "Grab the orientation of the room if we have it" 349 | res = g.query(""" 350 | SELECT ?room ?orientation 351 | WHERE { 352 | ?room rdf:type brick:Room . 353 | ?room rdfs:hasProperty brick:Orientation . 354 | ?orientation rdf:type brick:Orientation . 355 | }""") 356 | printResults(res) 357 | 358 | print "Grab all VAVs and AHUs and zones" 359 | res = g.query("""SELECT ?vav ?ahu ?hvac_zone 360 | WHERE { 361 | ?vav rdf:type brick:VAV . 362 | ?ahu rdf:type brick:AHU . 363 | ?ahu bf:feeds ?vav . 364 | ?hvac_zone rdf:type brick:HVAC_Zone . 365 | ?vav bf:feeds ?hvac_zone . 366 | }""") 367 | printResults(res) 368 | 369 | print 370 | 371 | print "--- Participatory Feedback ---" 372 | 373 | print "Associate lighting with rooms" 374 | res = g.query(""" 375 | SELECT DISTINCT ?light_equip ?light_state ?light_cmd ?room 376 | WHERE { 377 | 378 | # OR do we do ?light_equip rdf:type brick:Lighting_System 379 | ?light_equip rdf:type/rdfs:subClassOf* brick:Lighting_System . 380 | 381 | ?light_equip bf:feeds ?zone . 382 | ?zone rdf:type brick:Lighting_Zone . 383 | ?zone bf:contains ?room . 384 | ?room rdf:type brick:Room . 385 | 386 | ?light_state rdf:type/rdfs:subClassOf* brick:Luminance_Status . 387 | ?light_cmd rdf:type/rdfs:subClassOf* brick:Luminance_Command . 388 | 389 | {?light_equip bf:hasPoint ?light_state} 390 | UNION 391 | {?zone bf:hasPoint ?light_state} 392 | 393 | {?light_equip bf:hasPoint ?light_cmd} 394 | UNION 395 | {?zone bf:hasPoint ?light_cmd} 396 | }""") 397 | printResults(res) 398 | 399 | print "Find all power meters and associate them with floor and room" 400 | g.query("CONSTRUCT {?a bf:isPointOf ?b} WHERE {?b bf:hasPoint ?a}") 401 | res = g.query(""" 402 | SELECT ?meter ?loc 403 | WHERE { 404 | ?meter rdf:type/rdfs:subClassOf* brick:Power_Meter . 405 | 406 | { ?loc rdf:type brick:Room } 407 | UNION 408 | { ?loc rdf:type brick:Floor } 409 | 410 | ?meter bf:isPointOf ?loc . 411 | }""") 412 | printResults(res) 413 | #printTuples(res) 414 | 415 | print 416 | 417 | print "DO THIS!!! --- Fault Detection Diagnosis ---" 418 | print "Get sensors for AHU" 419 | res = g.query(""" 420 | SELECT ?ahu ?sensor 421 | WHERE { 422 | ?ahu rdf:type/rdfs:subClassOf* brick:AHU . 423 | ?ahu (bf:feeds|bf:hasPoint|bf:hasPart|bf:contains)* ?sensor . 424 | 425 | { ?sensor rdf:type/rdfs:subClassOf* brick:Reheat_Valve_Command } 426 | UNION 427 | { ?sensor rdf:type/rdfs:subClassOf* brick:Cooling_Valve_Command } 428 | UNION 429 | { ?sensor rdf:type/rdfs:subClassOf* brick:Mixed_Air_Temperature_Sensor } 430 | UNION 431 | { ?sensor rdf:type/rdfs:subClassOf* brick:Outside_Air_Temperature_Sensor } 432 | UNION 433 | { ?sensor rdf:type/rdfs:subClassOf* brick:Return_Air_Temperature_Sensor } 434 | UNION 435 | { ?sensor rdf:type/rdfs:subClassOf* brick:Supply_Air_Temperature_Sensor } 436 | UNION 437 | { ?sensor rdf:type/rdfs:subClassOf* brick:Outside_Air_Humidity_Sensor } 438 | UNION 439 | { ?sensor rdf:type/rdfs:subClassOf* brick:Return_Air_Temperature_Sensor} 440 | UNION 441 | { ?sensor rdf:type/rdfs:subClassOf* brick:Outside_Air_Damper_Position_Sensor } 442 | }""") 443 | printResults(res) 444 | 445 | print 446 | 447 | print "--- Non-Intrusive Load Monitoring App ---" 448 | print "Get equipment, power meters and what they measure" 449 | res = g.query(""" 450 | SELECT ?x ?meter 451 | WHERE { 452 | ?meter rdf:type/rdfs:subClassOf* brick:Power_Meter . 453 | ?meter (bf:isPointOf|bf:isPartOf)* ?x . 454 | {?x rdf:type/rdfs:subClassOf* brick:Equipment .} 455 | UNION 456 | {?x rdf:type/rdfs:subClassOf* brick:Location .} 457 | } 458 | """) 459 | printResults(res) 460 | 461 | print 462 | 463 | print "--- Demand Response ---" 464 | print "Find all equipment (inside rooms) and associated power meters and control points" 465 | res = g.query(""" 466 | SELECT DISTINCT ?equip ?cmd ?status 467 | WHERE { 468 | ?equip rdf:type/rdfs:subClassOf* brick:Equipment . 469 | { 470 | ?cmd rdf:type/rdfs:subClassOf* brick:Command . 471 | ?cmd (bf:isPointOf|bf:isPartOf)* ?equip . 472 | } 473 | UNION 474 | { 475 | ?status rdf:type/rdfs:subClassOf* brick:Status . 476 | ?status (bf:isPointOf|bf:isPartOf)* ?equip . 477 | } 478 | 479 | }""") 480 | printResults(res) 481 | -------------------------------------------------------------------------------- /application_examples/RUN_APPS_JG.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys 4 | import os 5 | import rdflib 6 | 7 | if len(sys.argv) < 2: 8 | print "Need a turtle file of a building" 9 | sys.exit(0) 10 | 11 | RDF = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 12 | RDFS = rdflib.Namespace('http://www.w3.org/2000/01/rdf-schema#') 13 | BRICK = rdflib.Namespace('https://brickschema.org/schema/1.0.1/brick#') 14 | BRICKFRAME = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 15 | BRICKTAG = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickTag#') 16 | 17 | def new_graph(): 18 | g = rdflib.Graph() 19 | g.bind( 'rdf', RDF) 20 | g.bind( 'rdfs', RDFS) 21 | g.bind( 'brick', BRICK) 22 | g.bind( 'bf', BRICKFRAME) 23 | g.bind( 'btag', BRICKTAG) 24 | g.parse('../BuildingSchema/Brick.ttl', format='turtle') 25 | g.parse('../BuildingSchema/BrickFrame.ttl', format='turtle') 26 | g.parse('../BuildingSchema/BrickTag.ttl', format='turtle') 27 | return g 28 | 29 | g = new_graph() 30 | g.parse(sys.argv[1], format='turtle') 31 | print "--- Occupancy Modeling App ---" 32 | print "Finding Occ sensors in all rooms" 33 | res = g.query(""" 34 | SELECT ?sensor ?room 35 | WHERE { 36 | ?sensor rdf:type brick:Occupancy_Sensor . 37 | ?room rdf:type brick:Room . 38 | ?sensor brick:isPointOf ?room . 39 | 40 | }""") 41 | print "-> {0} results".format(len(res)) 42 | 43 | #Why are these three things necessary? Occupancy modeling should only take the occupancy sensor... right? What is all the metering stuff for? 44 | print "Finding all power meters for equipment in rooms" 45 | res = g.query(""" 46 | SELECT ?meter ?equipment ?room 47 | WHERE { 48 | ?meter rdf:type brick:Power_Meter . 49 | ?room rdf:type brick:Room . 50 | ?equipment rdf:type brick:Equipment . 51 | ?equipment bf:isLocatedIn ?room . 52 | ?meter bf:isPointOf ?equipment . 53 | }""") 54 | print "-> {0} results".format(len(res)) 55 | 56 | print "Find all power meters for HVAC equipment" 57 | res = g.query(""" 58 | SELECT ?meter ?equipment ?room 59 | WHERE { 60 | ?meter rdf:type brick:Power_Meter . 61 | ?equipment rdf:type brick:Equipment . 62 | ?room rdf:type brick:Room . 63 | ?meter brick:isPointOf ?equipment . 64 | ?equipment bf:hasTag btag:HVAC . 65 | ?equipment bf:feeds ?zone . 66 | ?zone brick:contains ?room . 67 | }""") 68 | print "-> {0} results".format(len(res)) 69 | 70 | print "Find all power meters for Lighting equipment" 71 | res = g.query(""" 72 | SELECT ?meter ?equipment ?room 73 | WHERE { 74 | ?meter rdf:type brick:Power_Meter . 75 | ?equipment rdf:type brick:Lighting_System . 76 | ?room rdf:type brick:Room . 77 | ?meter brick:isPointOf ?equipment . 78 | ?zone brick:contains ?room . 79 | { ?equipment brick:feeds+ ?zone } 80 | UNION 81 | { ?equipment brick:feeds+ ?room } 82 | }""") 83 | print "-> {0} results".format(len(res)) 84 | 85 | print 86 | 87 | print "--- Energy Apportionment App ---" 88 | print "Find Occ sensors in all rooms" 89 | res = g.query(""" 90 | SELECT ?sensor ?room 91 | WHERE { 92 | ?sensor rdf:type brick:Occupancy_Sensor . 93 | ?room rdf:type brick:Room . 94 | ?sensor bf:isLocatedIn ?room . 95 | }""") 96 | print "-> {0} results".format(len(res)) 97 | 98 | print "Find lux sensors in rooms" 99 | res = g.query(""" 100 | SELECT ?sensor ?room 101 | WHERE { 102 | ?sensor rdf:type brick:Luminance_Sensor . 103 | ?room rdf:type brick:Room . 104 | ?sensor brick:isLocatedIn ?room . 105 | }""") 106 | print "-> {0} results".format(len(res)) 107 | 108 | #What's Tags for here? 109 | print "Find lighting/hvac equipment (e.g. desk lamps) rooms" 110 | res = g.query(""" 111 | SELECT ?equipment ?room 112 | WHERE { 113 | ?equipment rdf:type brick:Equipment . 114 | ?room rdf:type brick:Room . 115 | 116 | ?equipment bf:isLocatedIn ?room . 117 | 118 | { ?equipment bf:hasTag btag:Lighting } 119 | UNION 120 | { ?equipment bf:hasTag btag:HVAC } 121 | }""") 122 | print "-> {0} results".format(len(res)) 123 | 124 | print 125 | 126 | 127 | print "--- Web Displays App ---" 128 | print "Reheat valve command for VAVs" 129 | res = g.query(""" 130 | SELECT ?reheat_vlv_cmd ?vav 131 | WHERE { 132 | ?reheat_vlv_cmd rdf:type brick:Reheat_Valve_Command . 133 | ?vav rdf:type brick:VAV . 134 | ?vav brick:hasPoint ?reheat_vlv_cmd . 135 | } 136 | """) 137 | print "-> {0} results".format(len(res)) 138 | 139 | print "Airflow sensor for all VAVs" 140 | res = g.query(""" 141 | SELECT ?airflow_sensor ?room ?vav 142 | WHERE { 143 | ?airflow_sensor rdf:type brick:Discharge_Air_Flow_Sensor . 144 | ?vav rdf:type brick:VAV . 145 | ?room rdf:type brick:Room . 146 | ?airflow_sensor brick:isLocatedIn ?room . 147 | ?vav brick:hasPoint ?airflow_sensor . 148 | }""") 149 | print "-> {0} results".format(len(res)) 150 | 151 | print "Associate VAVs to zones and rooms" 152 | res = g.query(""" 153 | SELECT ?vav ?room 154 | WHERE { 155 | ?vav rdf:type brick:VAV . 156 | ?room rdf:type brick:Room . 157 | ?vav brick:feeds ?zone . 158 | ?room brick:isLocatedIn ?zone . 159 | }""") 160 | print "-> {0} results".format(len(res)) 161 | 162 | #Can't figure this one out. 163 | print "Find power meters for cooling loop, heating loop" 164 | res = g.query(""" 165 | SELECT ?equip ?equip_type ?meter 166 | WHERE { 167 | ?equip_type rdfs:subClassOf brick:Equipment . 168 | ?equip rdf:type ?equip_type . 169 | ?meter rdf:type brick:Power_Meter . 170 | ?equip rdfs:subClassOf brick:Water_System . 171 | { ?equip bf:hasTag btag:Chilled } 172 | UNION 173 | { ?equip bf:hasTag btag:Hot } 174 | ?meter bf:isPointOf ?equip . 175 | }""") 176 | print "-> {0} results".format(len(res)) 177 | 178 | print 179 | 180 | print "--- Model-Predictive Control App ---" 181 | 182 | 183 | print "Find all buildings, floors, hvac zones, rooms" 184 | res = g.query(""" 185 | SELECT ?bldg ?floor ?hvac_zone ?room 186 | WHERE { 187 | ?bldg rdf:type brick:Building . 188 | ?floor rdf:type brick:Floor . 189 | ?room rdf:type brick:Room . 190 | ?hvac_zone rdf:type brick:HVAC_Zone . 191 | ?floor brick:isPartOf ?bldg . 192 | ?room brick:isPartOf ?floor . 193 | ?room brick:isLocatedIn ?hvac_zone . 194 | }""") 195 | print "-> {0} results".format(len(res)) 196 | 197 | #GHC Doesn't have orientiation data 198 | #print "Find windows in the room" 199 | print "Grab the orientation of the room if we have it" 200 | res = g.query(""" 201 | SELECT ?room ?orientation 202 | WHERE { 203 | ?room rdf:type brick:Room . 204 | ?room rdfs:hasProperty brick:Orientation . 205 | ?orientation rdf:type brick:Orientation . 206 | }""") 207 | print "-> {0} results".format(len(res)) 208 | 209 | print "Grab all VAVs and AHUs and zones" 210 | res = g.query("""SELECT ?vav ?ahu ?hvac_zone 211 | WHERE { 212 | ?vav rdf:type brick:VAV . 213 | ?ahu rdf:type brick:AHU . 214 | ?ahu bf:feeds ?vav . 215 | ?hvac_zone rdf:type brick:HVAC_Zone . 216 | ?vav bf:feeds ?hvac_zone . 217 | }""") 218 | print "-> {0} results".format(len(res)) 219 | 220 | print 221 | 222 | print "--- Participatory Feedback ---" 223 | 224 | #GHC Doesn't have lighting equipment 225 | print "Associate lighting with rooms" 226 | res = g.query(""" 227 | SELECT ?light_equip ?light_state ?light_cmd ?room 228 | WHERE { 229 | ?light_equip rdf:type brick:Lighting_System . 230 | ?light_equip brick:feeds ?zone . 231 | ?zone rdf:type brick:Lighting_Zone . 232 | ?zone brick:contains ?room . 233 | ?room rdf:type brick:Room . 234 | ?light_state rdf:type brick:Status . 235 | ?light_state bf:isPointOf ?light_equip . 236 | ?light_cmd rdf:type brick:Command . 237 | ?light_cmd bf:isPointOf ?light_equip . 238 | }""") 239 | print "-> {0} results".format(len(res)) 240 | 241 | #GHC Can't do this (no low-level power meters) 242 | print "Find all power meters and associate them with room" 243 | res = g.query(""" 244 | SELECT ?meter ?room 245 | WHERE { 246 | ?meter rdf:type brick:Sensor . 247 | ?meter rdf:type brick:Power_Meter . 248 | ?room rdf:type brick:Room . 249 | ?equip rdf:type brick:Equipment . 250 | ?meter brick:isPointOf ?equip . 251 | ?equip brick:isLocatedIn ?room . 252 | }""") 253 | print "-> {0} results".format(len(res)) 254 | 255 | print 256 | 257 | print "DO THIS!!! --- Fault Detection Diagnosis ---" 258 | 259 | print 260 | 261 | #GHC Can't Do this (no low-level power meters) 262 | print "--- Non-Intrusive Load Monitoring App ---" 263 | print "Get equipment, power meters and what room they are in" 264 | res = g.query(""" 265 | SELECT ?equip ?meter ?floor ?room 266 | WHERE { 267 | ?equip rdf:type brick:Equipment . 268 | ?meter rdf:type brick:Power_Meter . 269 | ?room rdf:type brick:Room . 270 | ?meter brick:isPointOf ?equip . 271 | ?equip brick:isLocatedIn ?room . 272 | } 273 | """) 274 | print "-> {0} results".format(len(res)) 275 | 276 | print 277 | 278 | #GHC Can't do this (no low-level power meters) 279 | print "--- Demand Response ---" 280 | print "Find all equipment (inside rooms) and associated power meters and control points" 281 | res = g.query(""" 282 | SELECT ?equip ?meter ?cmd 283 | WHERE { 284 | ?cmd rdf:type brick:Command . 285 | ?equip rdf:type brick:Equipment . 286 | ?meter rdf:type brick:Power_Meter . 287 | ?room rdf:type brick:Room . 288 | ?equip bf:isLocatedIn ?room . 289 | ?meter bf:isPointOf ?equip . 290 | ?cmd bf:isPointOf ?equip . 291 | }""") 292 | print "-> {0} results".format(len(res)) 293 | -------------------------------------------------------------------------------- /application_examples/demos/README.md: -------------------------------------------------------------------------------- 1 | # Demos 2 | 3 | This is a selection of demos developed to gain an understanding of different RDF features and present limitations as they were discovered. 4 | 5 | These demos were written as needs arose and may not all be equally relevant for the new audience. They should probably be replaced by another suite designed based on what is useful. 6 | 7 | Previously they were placed at the GTC location, but I moved them here as they were not specific to this building. As I am not sure where they should end up (or if we want them at all), I haven't bothered updating the paths and thus they won't work. 8 | 9 | -------------------------------------------------------------------------------- /application_examples/demos/demo_equipment: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import rdflib 4 | 5 | RDF = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 6 | RDFS = rdflib.Namespace('http://www.w3.org/2000/01/rdf-schema#') 7 | BRICK = rdflib.Namespace('https://brickschema.org/schema/1.0.1/Brick#') 8 | BRICKFRAME = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 9 | BRICKTAG = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickTag#') 10 | OWL = rdflib.Namespace('http://www.w3.org/2002/07/owl#') 11 | 12 | g = rdflib.Graph() 13 | g.bind('rdf', RDF) 14 | g.bind('rdfs', RDFS) 15 | g.bind('brick', BRICK) 16 | g.bind('bf', BRICKFRAME) 17 | g.bind('btag', BRICKTAG) 18 | g.bind('owl', OWL) 19 | g.parse('../BuildingSchema/Brick.ttl', format='turtle') 20 | g.parse('../BuildingSchema/BrickFrame.ttl', format='turtle') 21 | g.parse('../BuildingSchema/BrickTag.ttl', format='turtle') 22 | g.parse('sdu_gtc_simple.ttl', format='n3') 23 | 24 | source = '2.A.11' 25 | 26 | r = g.query( 27 | """SELECT DISTINCT ?equipment 28 | WHERE { 29 | ?equipment rdf:type brick:Equipment . 30 | }""") 31 | 32 | print('Equipment:') 33 | for pair in r: 34 | print(' - %s' % pair) 35 | -------------------------------------------------------------------------------- /application_examples/demos/demo_extra_namespace: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from rdflib import Graph, Namespace, URIRef, Literal 4 | import rdflib 5 | import json 6 | 7 | RDF = Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 8 | RDFS = Namespace('http://www.w3.org/2000/01/rdf-schema#') 9 | BRICK = Namespace('https://brickschema.org/schema/1.0.1/Brick#') 10 | BRICKFRAME = Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 11 | BRICKTAG = Namespace('https://brickschema.org/schema/1.0.1/BrickTag#') 12 | 13 | g = Graph() 14 | g.parse('../BuildingSchema/Brick.ttl', format='turtle') 15 | g.parse('../BuildingSchema/BrickFrame.ttl', format='turtle') 16 | g.parse('../BuildingSchema/BrickTag.ttl', format='turtle') 17 | g.bind('rdf' , RDF) 18 | g.bind('rdfs' , RDFS) 19 | g.bind('brick', BRICK) 20 | g.bind('bf' , BRICKFRAME) 21 | g.bind('btag' , BRICKTAG) 22 | 23 | # building 24 | BUILDING = Namespace('https://brickschema.org/schema/1.0.1/building_example#') 25 | g.bind('building', BUILDING) 26 | 27 | # heat exchanger class 28 | HX = Namespace('https://brickschema.org/schema/1.0.1/Brick/Heat_Exchanger#') 29 | g.bind('hx', HX) 30 | g.add( (BRICK['Function_Block'], RDF.isSubClassOf, BRICK['Thing']) ) 31 | g.add( (HX['Function_Block'] , RDF.isSubClassOf, BRICK['Function_Block']) ) 32 | g.add( (HX['Primary_Input'] , RDF.isSubClassOf, BRICK['Thing']) ) 33 | g.add( (HX['Primary_Output'] , RDF.isSubClassOf, BRICK['Thing']) ) 34 | g.add( (HX['Secondary_Input'] , RDF.isSubClassOf, BRICK['Thing']) ) 35 | g.add( (HX['Secondary_Output'] , RDF.isSubClassOf, BRICK['Thing']) ) 36 | g.add( (HX['Primary_Input'] , BRICKFRAME['feeds'], HX['Primary_Output']) ) 37 | g.add( (HX['Primary_Input'] , BRICKFRAME['feeds'], HX['Secondary_Output']) ) 38 | g.add( (HX['Secondary_Input'], BRICKFRAME['feeds'], HX['Primary_Output']) ) 39 | g.add( (HX['Secondary_Input'], BRICKFRAME['feeds'], HX['Secondary_Output']) ) 40 | 41 | # heat exchanger object 42 | hx1 = BUILDING['/hx1'] 43 | hx1_fb = BUILDING['/hx1_fb'] 44 | hx1_pi = BUILDING['/hx1_pi'] 45 | g.add( (hx1 , RDF.type, BRICK['Heat_Exchanger']) ) 46 | g.add( (hx1_fb, RDF.type, HX['Function_Block']) ) 47 | g.add( (hx1_pi, RDF.type, HX['Primary_Input']) ) 48 | g.add( (hx1_fb, BRICKFRAME['isPartOf'], hx1) ) 49 | g.add( (hx1_pi, BRICKFRAME['isPartOf'], hx1_fb) ) 50 | 51 | # some temperature sensor which feeds into the primary input of the heat exchanger 52 | temp = BUILDING['/temp'] 53 | g.add( (temp, RDF.type, BRICK['Temperature_Sensor']) ) 54 | g.add( (temp, BRICKFRAME['feeds'], hx1_pi) ) 55 | 56 | g.serialize('demo_extra_namespace.ttl', 'turtle') 57 | 58 | -------------------------------------------------------------------------------- /application_examples/demos/demo_extra_namespace_query: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import rdflib 4 | 5 | 6 | RDF = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 7 | RDFS = rdflib.Namespace('http://www.w3.org/2000/01/rdf-schema#') 8 | BRICK = rdflib.Namespace('https://brickschema.org/schema/1.0.1/Brick#') 9 | BRICKFRAME = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 10 | BRICKTAG = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickTag#') 11 | 12 | g = rdflib.Graph() 13 | g.bind('rdf' , RDF) 14 | g.bind('rdfs' , RDFS) 15 | g.bind('brick', BRICK) 16 | g.bind('bf' , BRICKFRAME) 17 | g.bind('btag' , BRICKTAG) 18 | g.parse('demo_extra_namespace.ttl', format='n3') 19 | 20 | # heat exchanger class 21 | HX = rdflib.Namespace('https://brickschema.org/schema/1.0.1/Brick/Heat_Exchanger#') 22 | g.bind('hx', HX) 23 | 24 | r = g.query( 25 | """SELECT DISTINCT ?temp ?hx_prim 26 | WHERE { 27 | ?temp a brick:Temperature_Sensor . 28 | ?hx_prim a hx:Primary_Input . 29 | ?temp bf:feeds ?hx_prim . 30 | }""") 31 | 32 | print('Which temperature sensors feeds which coils') 33 | for pair in r: 34 | print(' - %s --> %s' % pair) 35 | 36 | -------------------------------------------------------------------------------- /application_examples/demos/demo_function_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildSysUniformMetadata/GroundTruth/789ff13adc7713bb7cbfd374f370d9dc72ac07ac/application_examples/demos/demo_function_block.png -------------------------------------------------------------------------------- /application_examples/demos/demo_functional_block: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from rdflib import Graph, Namespace, URIRef, Literal 4 | import rdflib 5 | import json 6 | 7 | RDF = Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 8 | RDFS = Namespace('http://www.w3.org/2000/01/rdf-schema#') 9 | BRICK = Namespace('https://brickschema.org/schema/1.0.1/Brick#') 10 | BRICKFRAME = Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 11 | BRICKTAG = Namespace('https://brickschema.org/schema/1.0.1/BrickTag#') 12 | 13 | g = Graph() 14 | g.parse('../BuildingSchema/Brick.ttl', format='turtle') 15 | g.parse('../BuildingSchema/BrickFrame.ttl', format='turtle') 16 | g.parse('../BuildingSchema/BrickTag.ttl', format='turtle') 17 | g.bind('rdf' , RDF) 18 | g.bind('rdfs' , RDFS) 19 | g.bind('brick', BRICK) 20 | g.bind('bf' , BRICKFRAME) 21 | g.bind('btag' , BRICKTAG) 22 | 23 | # building 24 | BUILDING = Namespace('https://brickschema.org/schema/1.0.1/building_example#') 25 | g.bind('building', BUILDING) 26 | 27 | # heat exchanger function block and ports 28 | HX = Namespace('https://brickschema.org/schema/1.0.1/Brick/Heat_Exchanger#') 29 | g.bind('hx', HX) 30 | g.add( (BRICK['Function_Block'], RDF.isSubClassOf, BRICK['Thing']) ) 31 | g.add( (HX['Function_Block'] , RDF.isSubClassOf, BRICK['Function_Block']) ) 32 | g.add( (HX['Primary_Input'] , RDF.isSubClassOf, BRICK['Thing']) ) 33 | g.add( (HX['Primary_Output'] , RDF.isSubClassOf, BRICK['Thing']) ) 34 | g.add( (HX['Secondary_Input'] , RDF.isSubClassOf, BRICK['Thing']) ) 35 | g.add( (HX['Secondary_Output'] , RDF.isSubClassOf, BRICK['Thing']) ) 36 | g.add( (HX['Primary_Input'] , BRICKFRAME['feeds'], HX['Primary_Output']) ) 37 | g.add( (HX['Primary_Input'] , BRICKFRAME['feeds'], HX['Secondary_Output']) ) 38 | g.add( (HX['Secondary_Input'], BRICKFRAME['feeds'], HX['Secondary_Output']) ) 39 | 40 | # make two heat exchangers and connect some temperature sensors to them 41 | for i in range(2): 42 | # hx 43 | hx = BUILDING['/hx'+str(i)] 44 | hx_fb = BUILDING['/hx'+str(i)+'_fb'] 45 | hx_pi = BUILDING['/hx'+str(i)+'_pi'] 46 | hx_po = BUILDING['/hx'+str(i)+'_po'] 47 | g.add( (hx , RDF.type, BRICK['Heat_Exchanger']) ) 48 | g.add( (hx_fb, RDF.type, HX['Function_Block']) ) 49 | g.add( (hx_pi, RDF.type, HX['Primary_Input']) ) 50 | g.add( (hx_po, RDF.type, HX['Primary_Output']) ) 51 | g.add( (hx_fb, BRICKFRAME['isPartOf'], hx) ) 52 | g.add( (hx_pi, BRICKFRAME['isPartOf'], hx_fb) ) 53 | g.add( (hx_po, BRICKFRAME['isPartOf'], hx_fb) ) 54 | 55 | # some temperature sensor which feeds into the primary input of the heat exchanger 56 | temp = BUILDING['/temp'+str(i)+'_in'] 57 | g.add( (temp, RDF.type, BRICK['Temperature_Sensor']) ) 58 | g.add( (temp, BRICKFRAME['feeds'], hx_pi) ) 59 | 60 | # some temperature sensor which is being fed from the primary output of the heat exchanger 61 | temp = BUILDING['/temp'+str(i)+'_out'] 62 | g.add( (temp, RDF.type, BRICK['Temperature_Sensor']) ) 63 | g.add( (hx_po, BRICKFRAME['feeds'], temp) ) 64 | 65 | ######################################################################################### 66 | ############################################################################## setup #### 67 | 68 | print ' +------------------------------------------+' 69 | print ' | hx0_fb |' 70 | print ' | |' 71 | print ' +-----------------+ +------------------+' 72 | print '(temp0_in)---->| Primary_Input |---->| Primary_Output |---->(temp0_out)' 73 | print ' +-----------------+ +------------------+' 74 | print ' | |' 75 | print ' +-----------------+ +------------------+' 76 | print ' | Secondary_Input |---->| Secondary_Output |' 77 | print ' +-----------------+ +------------------+' 78 | print ' | |' 79 | print ' +------------------------------------------+' 80 | print '' 81 | print ' +------------------------------------------+' 82 | print ' | hx1_fb |' 83 | print ' | |' 84 | print ' +-----------------+ +------------------+' 85 | print '(temp1_in)---->| Primary_Input |---->| Primary_Output |---->(temp1_out)' 86 | print ' +-----------------+ +------------------+' 87 | print ' | |' 88 | print ' +-----------------+ +------------------+' 89 | print ' | Secondary_Input |---->| Secondary_Output |' 90 | print ' +-----------------+ +------------------+' 91 | print ' | |' 92 | print ' +------------------------------------------+' 93 | print '' 94 | 95 | ######################################################################################### 96 | ############################################################### disregarding context #### 97 | 98 | r = g.query( 99 | """SELECT DISTINCT ?t1 ?t2 100 | WHERE { 101 | ?t1 a brick:Temperature_Sensor . 102 | ?t2 a brick:Temperature_Sensor . 103 | ?pi a hx:Primary_Input . 104 | ?po a hx:Primary_Output . 105 | ?t1 bf:feeds ?pi . 106 | ?po bf:feeds ?t2 . 107 | }""") 108 | 109 | print 'Disregarding context:' 110 | for pair in r: 111 | print(' %s -> %s' % pair) 112 | print '' 113 | 114 | ######################################################################################### 115 | ################################################################ considering context #### 116 | 117 | r = g.query( 118 | """SELECT DISTINCT ?t1 ?t2 119 | WHERE { 120 | ?t1 a brick:Temperature_Sensor . 121 | ?t2 a brick:Temperature_Sensor . 122 | ?pi a hx:Primary_Input . 123 | ?po a hx:Primary_Output . 124 | ?t1 bf:feeds ?pi . 125 | ?po bf:feeds ?t2 . 126 | 127 | ?fb a hx:Function_Block . 128 | ?pi bf:isPartOf ?fb . 129 | ?po bf:isPartOf ?fb . 130 | }""") 131 | 132 | print 'Considering context:' 133 | for pair in r: 134 | print(' %s -> %s' % pair) 135 | 136 | -------------------------------------------------------------------------------- /application_examples/demos/demo_inheritance: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from rdflib import Graph, Namespace, URIRef, Literal 4 | import rdflib 5 | 6 | BS = Namespace(rdflib.term.URIRef('http://www.semanticweb.org/jbkoh/ontologies/2016/4/untitled-ontology-27#')) 7 | RDF = Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 8 | RDFS = Namespace('http://www.w3.org/2000/01/rdf-schema#') 9 | 10 | ################################################################################ 11 | ##################################################################### setup #### 12 | 13 | g = Graph() 14 | s = g.parse('../BuildingSchema/Brick.ttl', format='turtle', publicID='brick') 15 | g.bind('rdf', RDF) 16 | g.bind('rdfs', RDFS) 17 | g.bind('bs', BS) 18 | 19 | cooling_tower = URIRef('ct') 20 | g.add( (cooling_tower, RDF.type, BS['Cooling_Tower']) ) 21 | 22 | water_pump = URIRef('wp') 23 | g.add( (water_pump, RDF.type, BS['Water_Pump']) ) 24 | 25 | g.add( (cooling_tower, BS.feeds, water_pump) ) 26 | 27 | print ' [TagSet]' 28 | print ' ^' 29 | print ' |' 30 | print ' +-------+------+ inherits' 31 | print ' | |' 32 | print '[Cooling_Tower] [Water_Pump]' 33 | print ' | |' 34 | print ' | instance | instance' 35 | print ' | |' 36 | print ' (ct) --feeds--> (wp)' 37 | print '' 38 | 39 | ################################################################################ 40 | ############################################################## direct query #### 41 | 42 | r = g.query( 43 | """SELECT DISTINCT ?ct ?wp 44 | WHERE { 45 | ?ct a bs:Cooling_Tower . 46 | ?wp a bs:Water_Pump . 47 | ?ct bs:feeds ?wp . 48 | }""") 49 | 50 | print 'Matches for [Cooling_Tower feeds Water_Pump]:' 51 | for pair in r: 52 | print(' %s -> %s' % pair) 53 | print 'total: '+str(len(r)) 54 | print '' 55 | 56 | ################################################################################ 57 | ########################################################### inherited query #### 58 | 59 | r = g.query( 60 | """SELECT DISTINCT ?ct ?wp 61 | WHERE { 62 | ?ct a bs:Cooling_Tower . 63 | ?wp a bs:TagSet . 64 | ?ct bs:feeds ?wp . 65 | }""") 66 | 67 | print 'Matches for [Cooling_Tower feeds TagSet]:' 68 | for pair in r: 69 | print(' %s -> %s' % pair) 70 | print 'total: '+str(len(r)) 71 | print '' 72 | 73 | ################################################################################ 74 | ################################################## unrolled inherited query #### 75 | 76 | r = g.query( 77 | """SELECT DISTINCT ?ct ?someclass ?wp 78 | WHERE { 79 | ?ct a bs:Cooling_Tower . 80 | ?wp a ?someclass . 81 | ?ct bs:feeds ?wp . 82 | ?someclass rdfs:subClassOf* bs:TagSet . 83 | }""") 84 | 85 | print 'Matches for [Cooling_Tower feeds (?) rdfs:subClassOf* bs:TagSet]:' 86 | for pair in r: 87 | print(' %s -> %s -> %s' % pair) 88 | print 'total: '+str(len(r)) 89 | print '' 90 | 91 | -------------------------------------------------------------------------------- /application_examples/demos/demo_list_upstream_heating_elements: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import rdflib 4 | 5 | g = rdflib.Graph() 6 | g.parse('sdu_gtc.ttl', format='n3') 7 | 8 | source = '2.A.11' 9 | 10 | r = g.query( 11 | """SELECT DISTINCT ?heating_element 12 | WHERE { 13 | ?room ns1:hasName '"""+source+"""' . 14 | { 15 | ?heating_element a bs:Coil . 16 | ?heating_element bs:feeds+ ?room 17 | } UNION { 18 | { 19 | ?heating_element a bs:Radiator 20 | } UNION { 21 | ?heating_element a ns1:Floorheater 22 | } . 23 | ?heating_element ns1:affects+ ?room 24 | } . 25 | }""") 26 | 27 | print('Heating elements upstream of '+source+':') 28 | for pair in r: 29 | print(' - %s' % pair) 30 | -------------------------------------------------------------------------------- /application_examples/demos/demo_synonym: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import rdflib 4 | 5 | RDF = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 6 | RDFS = rdflib.Namespace('http://www.w3.org/2000/01/rdf-schema#') 7 | BRICK = rdflib.Namespace('http://buildsys.org/ontologies/Brick#') 8 | BRICKFRAME = rdflib.Namespace('http://buildsys.org/ontologies/BrickFrame#') 9 | BRICKTAG = rdflib.Namespace('http://buildsys.org/ontologies/BrickTag#') 10 | OWL = rdflib.Namespace('http://www.w3.org/2002/07/owl#') 11 | 12 | g = rdflib.Graph() 13 | g.bind('rdf', RDF) 14 | g.bind('rdfs', RDFS) 15 | g.bind('brick', BRICK) 16 | g.bind('bf', BRICKFRAME) 17 | g.bind('btag', BRICKTAG) 18 | g.bind('owl', OWL) 19 | g.parse('../BuildingSchema/Brick.ttl', format='turtle') 20 | g.parse('../BuildingSchema/BrickFrame.ttl', format='turtle') 21 | g.parse('../BuildingSchema/BrickTag.ttl', format='turtle') 22 | g.parse('sdu_gtc_simple.ttl', format='n3') 23 | 24 | source = '2.A.11' 25 | 26 | r = g.query( 27 | """SELECT DISTINCT ?equipment 28 | WHERE { 29 | ?equipment rdf:type ?class_equip . 30 | ?class_equip rdfs:subClassOf+ brick:HVAC . 31 | }""") 32 | 33 | print('Equipment (HVAC):') 34 | for pair in r: 35 | print(' - %s' % pair) 36 | 37 | r = g.query( 38 | """SELECT DISTINCT ?equipment 39 | WHERE { 40 | ?equipment rdf:type ?class_equip . 41 | ?class_equip rdfs:subClassOf+ brick:Heating_Ventilation_Air_Conditioning_System . 42 | }""") 43 | 44 | print('Equipment (Heating_Ventilation_Air_Conditioning_System):') 45 | for pair in r: 46 | print(' - %s' % pair) 47 | -------------------------------------------------------------------------------- /application_examples/demos/demo_temperature_of_hx_prim_in: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import rdflib 4 | 5 | g = rdflib.Graph() 6 | g.parse('sdu_gtc.ttl', format='n3') 7 | 8 | r = g.query( 9 | """SELECT DISTINCT ?temp ?hx_prim 10 | WHERE { 11 | ?temp a bs:Temperature,bs:Sensor . 12 | ?hx_prim a bs:Coil . 13 | ?temp bs:feeds ?hx_prim . 14 | }""") 15 | 16 | print('Temperature sensors which directly feeds into the primary coil') 17 | print('of a heat exchanger:') 18 | for pair in r: 19 | print(' - %s -> %s' % pair) 20 | print('Note: Due to a lag of tags the result is actually: Temperature') 21 | print(' sensors which directly feeds into a coil') 22 | -------------------------------------------------------------------------------- /application_examples/demos/demo_verb_matching: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import rdflib 4 | 5 | g = rdflib.Graph() 6 | g.parse('sdu_gtc.ttl', format='n3') 7 | 8 | r = g.query( 9 | """SELECT DISTINCT ?temp ?rel ?hx_prim 10 | WHERE { 11 | ?temp a bs:Temperature,bs:Sensor . 12 | ?hx_prim a bs:Coil . 13 | ?temp ?rel ?hx_prim . 14 | }""") 15 | 16 | print('How do temperature sensors relate to coils?') 17 | for pair in r: 18 | print(' - %s -(%s)-> %s' % pair) 19 | 20 | -------------------------------------------------------------------------------- /application_examples/demos/func_block_example.ttl: -------------------------------------------------------------------------------- 1 | # baseURI: http://buildsys.org/func_block_example 2 | # imports: https://brickschema.org/schema/1.0.1/Brick 3 | # prefix: ex 4 | 5 | @prefix bf: . 6 | @prefix brick: . 7 | @prefix ex: . 8 | @prefix owl: . 9 | @prefix rdf: . 10 | @prefix rdfs: . 11 | @prefix xsd: . 12 | 13 | 14 | rdf:type owl:Ontology ; 15 | owl:imports ; 16 | owl:versionInfo "Created with TopBraid Composer"^^xsd:string ; 17 | . 18 | ex:Heat_Exchanger_1 19 | rdf:type brick:Heat_Exchanger ; 20 | bf:functions ex:HxControlFunctionBlock ; 21 | bf:functions ex:HxWaterFunctionBlock ; 22 | . 23 | ex:Heat_Exchanger_Valve_1 24 | rdf:type brick:Valve ; 25 | bf:functions ex:ValveWaterFunctionBlock ; 26 | . 27 | ex:Heat_Exchanger_Valve_Command_1 28 | rdf:type brick:Heat_Exchanger_Valve_Command ; 29 | rdf:type bf:ObservedSignal ; 30 | bf:affects ex:Heat_Exchanger_Valve_1 ; 31 | . 32 | ex:Hot_Water_Return_Building 33 | rdf:type brick:Hot_Water ; 34 | rdf:type bf:ObservedSignal ; 35 | . 36 | ex:Hot_Water_Return_Campus 37 | rdf:type brick:Hot_Water ; 38 | rdf:type bf:ObservedSignal ; 39 | . 40 | ex:Hot_Water_Supply_Building 41 | rdf:type brick:Hot_Water ; 42 | rdf:type bf:ObservedSignal ; 43 | bf:feedsHeat ex:Hot_Water_Return_Campus ; 44 | bf:feedsWater ex:Hot_Water_Return_Building ; 45 | . 46 | ex:Hot_Water_Supply_Campus 47 | rdf:type brick:Hot_Water ; 48 | rdf:type bf:ObservedSignal ; 49 | bf:feedsHeat ex:Hot_Water_Return_Building ; 50 | bf:feedsWater ex:Hot_Water_Valve_Inflow ; 51 | . 52 | ex:Hot_Water_Supply_Temperature_Sensor_1 53 | rdf:type brick:Hot_Water_Supply_Temperature_Sensor ; 54 | rdf:type bf:ObservedSignal ; 55 | bf:observes ex:Hot_Water_Supply_Building ; 56 | . 57 | ex:Hot_Water_Supply_Temperature_Setpoint_1 58 | rdf:type brick:Hot_Water_Supply_Temperature_Setpoint ; 59 | rdf:type bf:ObservedSignal ; 60 | . 61 | ex:Hot_Water_Valve_Inflow 62 | rdf:type brick:Hot_Water ; 63 | rdf:type bf:UnobservedSignal ; 64 | bf:feedsWater ex:Hot_Water_Valve_Outflow ; 65 | . 66 | ex:Hot_Water_Valve_Outflow 67 | rdf:type brick:Hot_Water ; 68 | rdf:type bf:UnobservedSignal ; 69 | bf:feedsWater ex:Hot_Water_Return_Campus ; 70 | . 71 | ex:HxControlFunctionBlock 72 | rdf:type bf:ControlFunctionBlock ; 73 | bf:hasInput ex:Hot_Water_Supply_Temperature_Sensor_1 ; 74 | bf:hasInput ex:Hot_Water_Supply_Temperature_Setpoint_1 ; 75 | bf:hasOutput ex:Heat_Exchanger_Valve_Command_1 ; 76 | . 77 | ex:HxWaterFunctionBlock 78 | rdf:type bf:ResourceFunctionBlock ; 79 | bf:hasInput ex:Hot_Water_Supply_Building ; 80 | bf:hasInput ex:Hot_Water_Supply_Campus ; 81 | bf:hasOutput ex:Hot_Water_Return_Building ; 82 | bf:hasOutput ex:Hot_Water_Return_Campus ; 83 | . 84 | ex:ValveWaterFunctionBlock 85 | rdf:type bf:ResourceFunctionBlock ; 86 | bf:hasInput ex:Hot_Water_Valve_Inflow ; 87 | bf:hasOutput ex:Hot_Water_Valve_Outflow ; 88 | . 89 | 90 | ##### Below are new things I suggest. ##### 91 | 92 | bf:ControlFunctionBlock 93 | rdf:type owl:Class ; 94 | rdfs:subClassOf bf:FunctionBlock ; 95 | . 96 | bf:ResourceFunctionBlock 97 | rdf:type owl:Class ; 98 | rdfs:subClassOf bf:FunctionBlock ; 99 | . 100 | bf:affects 101 | rdf:type owl:ObjectProperty ; 102 | . 103 | bf:feedsHeat 104 | rdf:type owl:ObjectProperty ; 105 | rdfs:subPropertyOf bf:feeds ; 106 | . 107 | bf:feedsWater 108 | rdf:type owl:ObjectProperty ; 109 | rdfs:subPropertyOf bf:feeds ; 110 | . 111 | bf:functions 112 | rdf:type owl:ObjectProperty ; 113 | rdfs:range bf:FunctionBlock ; 114 | . 115 | bf:observes 116 | rdf:type owl:ObjectProperty ; 117 | . 118 | -------------------------------------------------------------------------------- /application_examples/example_building.py: -------------------------------------------------------------------------------- 1 | # import the rdflib 2 | from rdflib import Graph, Namespace, URIRef, Literal 3 | import rdflib 4 | 5 | # declare the namespaces. This will pull in the definition of the schema 6 | # if it exists. Else, we need to parse some file to fill in the missing symbols 7 | # is not pulling anything in from the web, I don't think? 8 | RDF = Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 9 | RDFS = Namespace('http://www.w3.org/2000/01/rdf-schema#') 10 | BRICK = Namespace('https://brickschema.org/schema/1.0.1/Brick#') 11 | BRICKFRAME = Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 12 | BRICKTAG = Namespace('https://brickschema.org/schema/1.0.1/BrickTag#') 13 | 14 | # This is the graph object that contains all of the schemas. We use this 15 | # graph to pull out classes and relationships, but any *instances* of these 16 | # are going to be stored in another graph. 17 | g = rdflib.Graph() 18 | # "bind()" simply means that we can use 'rdf' instead of the full URI for rdf when 19 | # referring to entities in its namespace. Just shorthand 20 | g.bind( 'rdf', RDF) 21 | g.bind( 'rdfs', RDFS) 22 | g.bind( 'brick', BRICK) 23 | g.bind( 'bf', BRICKFRAME) 24 | g.bind( 'btag', BRICKTAG) 25 | #g.parse('../BuildingSchema/BrickV2.ttl', format='turtle') 26 | #g.parse('../BuildingSchema/BrickFrame.ttl', format='turtle') 27 | #g.parse('../BuildingSchema/BrickTag.ttl', format='turtle') 28 | 29 | # We want to add nodes to the graph for our building. The building exists in its 30 | # own namespace, which we are calling EX 31 | 32 | EX = Namespace('https://brickschema.org/schema/1.0.1/building_example#') 33 | g.bind('ex', EX) 34 | 35 | # Once we have our namespace, we can start placing things in it. Lets create 36 | # some entity that will represent our building. We have a "Building" Location in 37 | # the brick schema, so we need to declare that some unique label within the EX 38 | # namespace "is a" building. This is achieved using the builtin RDF.type relationship. 39 | # Here, the label "building_1" is implicitly created when we mention it in the add() 40 | # function. Add()'s 3 arguments are: subject, predicate, object. 41 | g.add((EX.building_1, RDF.type, BRICK.Building)) 42 | # we can give it a name too 43 | g.add((EX.building_1, RDFS.label, Literal("Example Building Hall"))) 44 | # we can check now if our entity is known to be a location. This should be true because 45 | # we inherited that from BRICK.building, which is a subclass of Location 46 | print "SHOULD be True: ", (BRICK.Building, RDFS.subClassOf, BRICK.Location) in g 47 | # TODO: need a sparql query for this? 48 | res = g.query("""SELECT DISTINCT ?bldg 49 | WHERE { 50 | ?bldg rdf:type brick:Building 51 | } 52 | """) 53 | print "All buildings:" 54 | for row in res: 55 | print "%s" % row 56 | 57 | # now that we have a building, lets add 2 floors to it. 58 | # We implicitly create the 2 labels floor_1 and floor_2 that represent 59 | # the floor entities. We use the RDF.type relationship to say that they are 60 | # instances of the Floor class as defined by the BRICK schema. 61 | g.add((EX.floor_1, RDF.type, BRICK.Floor)) 62 | g.add((EX.floor_2, RDF.type, BRICK.Floor)) 63 | 64 | # We then link these floors to our example building by using the BRICKFRAME relationsihp 65 | # "isPartOf". 66 | g.add((EX.floor_1, BRICKFRAME.isPartOf, EX.building_1)) 67 | g.add((EX.floor_2, BRICKFRAME.isPartOf, EX.building_1)) 68 | 69 | # the query for "all floors in this building" 70 | res = g.query("""SELECT DISTINCT ?bldg ?floor 71 | WHERE { 72 | ?bldg rdf:type brick:Building . 73 | ?floor rdf:type brick:Floor . 74 | ?floor bf:isPartOf+ ?bldg . 75 | } 76 | """) 77 | for row in res: 78 | print "Building %s has floor %s" % row 79 | 80 | # now lets do the same for a few rooms. Here, to autogenerate some labels, we're tkaing 81 | # advantage of the fact that EX.floor_1 and EX["floor_1"] are equivalent. 82 | # Remember, each label needs to be *unique* within the namespace. 83 | for floor_num in [1,2]: 84 | floor = EX["floor_{0}".format(floor_num)] 85 | for room_num in [1,2,3,4]: 86 | room = EX["room_{0}_{1}".format(floor_num, room_num)] 87 | g.add((room, RDF.type, BRICK.Room)) 88 | g.add((room, BRICKFRAME.isPartOf, floor)) 89 | # TODO: query to demonstrate that we now know that those rooms are in the building 90 | res = g.query("""SELECT DISTINCT ?bldg ?room 91 | WHERE { 92 | ?bldg rdf:type brick:Building . 93 | ?room rdf:type brick:Room . 94 | ?room bf:isPartOf+ ?bldg . 95 | } 96 | """) 97 | for row in res: 98 | print "Building %s has room %s" % row 99 | 100 | # We have some structure to our building, so lets start adding in some equipment. 101 | # Sensors are straightforward to add. Lets put some CO2 and PIR and temperature sensors 102 | # in some rooms. 103 | # We *could* do the following: 104 | # for num in range(1,5): 105 | # temp_sensor = EX["temp_sensor_{0}".format(num)] 106 | # co2_sensor = EX["co2_sensor_{0}".format(num)] 107 | # pir_sensor = EX["pir_sensor_{0}".format(num)] 108 | # g.add((temp_sensor, RDF.type, BRICK.Sensor)) 109 | # g.add((co2_sensor, RDF.type, BRICK.Sensor)) 110 | # g.add((pir_sensor, RDF.type, BRICK.Sensor)) 111 | # 112 | # This successfully identifies all of these labels as being sensors, but it doesn't yet 113 | # tell us what kind of sensor they are. BRICK schema defines a tag Temperature which 114 | # is a subclass of PhysicalProperties, which is a subclass of MeasurementProperty, which 115 | # is a subclass of Tag. 116 | # 117 | # If we wanted to add this tag, we could do so to each of the instances, using a line like: 118 | # g.add((EX.temp_sensor_1, BRICKFRAME.hasTag, BRICK.Temperature)) 119 | # 120 | # However, we'd have to do this for *each* instance of a temperature sensor, co2 sensor, etc. 121 | # What if we forgot to label one? What if we later on want to associate more information 122 | # with what consists a temperature sensor? What we really want here is a subclass for each 123 | # of these sensor types. 124 | # 125 | # We would declare a temperature sensor class like the following: 126 | # BRICK.Temperature_Sensor RDFS.subClassOf BRICK.Sensor 127 | # BRICK.Temperature_Sensor BRICKFRAME.hasTag BRICK.Temperature 128 | # 129 | # Then we end up with something like 130 | # 131 | # for num in range(1,5): 132 | # temp_sensor = EX["temp_sensor_{0}".format(num)] 133 | # co2_sensor = EX["co2_sensor_{0}".format(num)] 134 | # pir_sensor = EX["pir_sensor_{0}".format(num)] 135 | # g.add((temp_sensor, RDF.type, BRICK.Temperature_Sensor)) 136 | # g.add((co2_sensor, RDF.type, BRICK.CO2_Sensor)) 137 | # g.add((pir_sensor, RDF.type, BRICK.PIR_Sensor)) 138 | # 139 | # It could be that in our building, we know slightly more about the temperature sensors: we want 140 | # to indicate that the temperature sensors in our building measure in Fahrenheit. We don't 141 | # want to add that to the *main* BRICK schema, because it isn't true for all temperature 142 | # sensors. However, we can create our own subclass and attach the property there 143 | # 144 | # EX.Fahrenheit_Temperature_Sensor RDFS.subClassOf BRICK.Temperature_Sensor 145 | # EX.Fahrenheit_Temperature_Sensor BRICKFRAME.hasUnit BRICK.Fahrenheit 146 | # 147 | # and then declare our instances using 148 | # g.add((temp_sensor, RDF.type, EX.Fahrenheit_Temperature_Sensor)) 149 | 150 | # add temperature sensor class 151 | g.add((EX.Fahrenheit_Temperature_Sensor, RDFS.subClassOf, BRICK.Temperature_Sensor)) 152 | g.add((EX.Fahrenheit_Temperature_Sensor, BRICKFRAME.hasUnit, BRICK.Fahrenheit)) 153 | 154 | # create the instances of our sensors 155 | for num in range(1,9): 156 | temp_sensor = EX["temp_sensor_{0}".format(num)] 157 | co2_sensor = EX["co2_sensor_{0}".format(num)] 158 | pir_sensor = EX["pir_sensor_{0}".format(num)] 159 | # declare sensors 160 | g.add((temp_sensor, RDF.type, EX.Fahrenheit_Temperature_Sensor)) 161 | g.add((co2_sensor, RDF.type, BRICK.CO2_Sensor)) 162 | g.add((pir_sensor, RDF.type, BRICK.Occupancy_Sensor)) 163 | 164 | # add sensor to room 165 | g.add((EX.temp_sensor_1, BRICKFRAME.isLocatedIn, EX.room_1_1)) 166 | g.add((EX.temp_sensor_2, BRICKFRAME.isLocatedIn, EX.room_1_2)) 167 | g.add((EX.temp_sensor_3, BRICKFRAME.isLocatedIn, EX.room_1_3)) 168 | g.add((EX.temp_sensor_4, BRICKFRAME.isLocatedIn, EX.room_1_4)) 169 | g.add((EX.temp_sensor_5, BRICKFRAME.isLocatedIn, EX.room_2_1)) 170 | g.add((EX.temp_sensor_6, BRICKFRAME.isLocatedIn, EX.room_2_2)) 171 | g.add((EX.temp_sensor_7, BRICKFRAME.isLocatedIn, EX.room_2_3)) 172 | g.add((EX.temp_sensor_8, BRICKFRAME.isLocatedIn, EX.room_2_4)) 173 | g.add((EX.temp_sensor_1, BRICKFRAME.isPointOf, EX.room_1_1)) 174 | g.add((EX.temp_sensor_2, BRICKFRAME.isPointOf, EX.room_1_2)) 175 | g.add((EX.temp_sensor_3, BRICKFRAME.isPointOf, EX.room_1_3)) 176 | g.add((EX.temp_sensor_4, BRICKFRAME.isPointOf, EX.room_1_4)) 177 | g.add((EX.temp_sensor_5, BRICKFRAME.isPointOf, EX.room_2_1)) 178 | g.add((EX.temp_sensor_6, BRICKFRAME.isPointOf, EX.room_2_2)) 179 | g.add((EX.temp_sensor_7, BRICKFRAME.isPointOf, EX.room_2_3)) 180 | g.add((EX.temp_sensor_8, BRICKFRAME.isPointOf, EX.room_2_4)) 181 | 182 | g.add((EX.co2_sensor_1, BRICKFRAME.isLocatedIn, EX.room_1_1)) 183 | g.add((EX.co2_sensor_2, BRICKFRAME.isLocatedIn, EX.room_1_2)) 184 | g.add((EX.co2_sensor_3, BRICKFRAME.isLocatedIn, EX.room_1_3)) 185 | g.add((EX.co2_sensor_4, BRICKFRAME.isLocatedIn, EX.room_1_4)) 186 | g.add((EX.co2_sensor_5, BRICKFRAME.isLocatedIn, EX.room_2_1)) 187 | g.add((EX.co2_sensor_6, BRICKFRAME.isLocatedIn, EX.room_2_2)) 188 | g.add((EX.co2_sensor_7, BRICKFRAME.isLocatedIn, EX.room_2_3)) 189 | g.add((EX.co2_sensor_8, BRICKFRAME.isLocatedIn, EX.room_2_4)) 190 | g.add((EX.co2_sensor_1, BRICKFRAME.isPointOf, EX.room_1_1)) 191 | g.add((EX.co2_sensor_2, BRICKFRAME.isPointOf, EX.room_1_2)) 192 | g.add((EX.co2_sensor_3, BRICKFRAME.isPointOf, EX.room_1_3)) 193 | g.add((EX.co2_sensor_4, BRICKFRAME.isPointOf, EX.room_1_4)) 194 | g.add((EX.co2_sensor_5, BRICKFRAME.isPointOf, EX.room_2_1)) 195 | g.add((EX.co2_sensor_6, BRICKFRAME.isPointOf, EX.room_2_2)) 196 | g.add((EX.co2_sensor_7, BRICKFRAME.isPointOf, EX.room_2_3)) 197 | g.add((EX.co2_sensor_8, BRICKFRAME.isPointOf, EX.room_2_4)) 198 | 199 | g.add((EX.pir_sensor_1, BRICKFRAME.isLocatedIn, EX.room_1_1)) 200 | g.add((EX.pir_sensor_2, BRICKFRAME.isLocatedIn, EX.room_1_2)) 201 | g.add((EX.pir_sensor_3, BRICKFRAME.isLocatedIn, EX.room_1_3)) 202 | g.add((EX.pir_sensor_4, BRICKFRAME.isLocatedIn, EX.room_1_4)) 203 | g.add((EX.pir_sensor_5, BRICKFRAME.isLocatedIn, EX.room_2_1)) 204 | g.add((EX.pir_sensor_6, BRICKFRAME.isLocatedIn, EX.room_2_2)) 205 | g.add((EX.pir_sensor_7, BRICKFRAME.isLocatedIn, EX.room_2_3)) 206 | g.add((EX.pir_sensor_8, BRICKFRAME.isLocatedIn, EX.room_2_4)) 207 | g.add((EX.pir_sensor_1, BRICKFRAME.isPointOf, EX.room_1_1)) 208 | g.add((EX.pir_sensor_2, BRICKFRAME.isPointOf, EX.room_1_2)) 209 | g.add((EX.pir_sensor_3, BRICKFRAME.isPointOf, EX.room_1_3)) 210 | g.add((EX.pir_sensor_4, BRICKFRAME.isPointOf, EX.room_1_4)) 211 | g.add((EX.pir_sensor_5, BRICKFRAME.isPointOf, EX.room_2_1)) 212 | g.add((EX.pir_sensor_6, BRICKFRAME.isPointOf, EX.room_2_2)) 213 | g.add((EX.pir_sensor_7, BRICKFRAME.isPointOf, EX.room_2_3)) 214 | g.add((EX.pir_sensor_8, BRICKFRAME.isPointOf, EX.room_2_4)) 215 | #TODO: do we *ALSO* use "hasPoint" here?, or conversely isPointOf? 216 | # these two lines are equivalent 217 | g.add((EX.pir_sensor_8, BRICKFRAME.isPointOf, EX.room_2_4)) 218 | g.add((EX.room_2_4, BRICKFRAME.hasPoint, EX.pir_sensor_8)) 219 | 220 | # now we need a notion of a power meter. The BRICK schema has a Power Meter concept, 221 | # under the hierarchy: Tag -> Point -> Meter -> Power -> Power Meter. 222 | # Let's attach a power meter to each of the floors 223 | g.add((EX.floor_power_meter_1, RDF.type, BRICK.Power_Meter)) 224 | g.add((EX.floor_power_meter_2, RDF.type, BRICK.Power_Meter)) 225 | g.add((EX.floor_1, BRICKFRAME.hasPoint, EX.floor_power_meter_1)) 226 | g.add((EX.floor_2, BRICKFRAME.hasPoint, EX.floor_power_meter_2)) 227 | 228 | # hasPoint is how we associate some sensor with what it measures? 229 | # TODO: Does the act of associating EX.floor_1 with EX.floor_power_meter_1 using the BRICKFRAME.hasPoint have any recursive qualities? 230 | 231 | # In our example building, we don't know a whole lot about the HVAC system. We do 232 | # know that we have an AHU, and that it has 3 VAVs per floor. 1 VAV serves 2 of the rooms. 233 | # The other 2 rooms are each served by 1 VAV 234 | 235 | # instantiate an AHU 236 | g.add((EX.ahu_1, RDF.type, BRICK.AHU)) 237 | # associate the AHU with the building 238 | # TODO: is there another, better way of doing this? 239 | g.add((EX.building_1, BRICKFRAME.hasPart, EX.ahu_1)) 240 | 241 | # instantiate our 6 VAVs 242 | g.add((EX.vav_1_1, RDF.type, BRICK.VAV)) 243 | g.add((EX.vav_1_2, RDF.type, BRICK.VAV)) 244 | g.add((EX.vav_1_3, RDF.type, BRICK.VAV)) 245 | g.add((EX.vav_2_1, RDF.type, BRICK.VAV)) 246 | g.add((EX.vav_2_2, RDF.type, BRICK.VAV)) 247 | g.add((EX.vav_2_3, RDF.type, BRICK.VAV)) 248 | 249 | # establish the VAVs as downstream of the AHU 250 | g.add((EX.ahu_1, BRICKFRAME.feeds, EX.vav_1_1)) 251 | g.add((EX.ahu_1, BRICKFRAME.feeds, EX.vav_1_2)) 252 | g.add((EX.ahu_1, BRICKFRAME.feeds, EX.vav_1_3)) 253 | g.add((EX.ahu_1, BRICKFRAME.feeds, EX.vav_2_1)) 254 | g.add((EX.ahu_1, BRICKFRAME.feeds, EX.vav_2_2)) 255 | g.add((EX.ahu_1, BRICKFRAME.feeds, EX.vav_2_3)) 256 | 257 | # instantiate 6 HVAC zones; one for each VAV 258 | g.add((EX.hvac_zone_1_1, RDF.type, BRICK.HVAC_Zone)) 259 | g.add((EX.hvac_zone_1_2, RDF.type, BRICK.HVAC_Zone)) 260 | g.add((EX.hvac_zone_1_3, RDF.type, BRICK.HVAC_Zone)) 261 | g.add((EX.hvac_zone_2_1, RDF.type, BRICK.HVAC_Zone)) 262 | g.add((EX.hvac_zone_2_2, RDF.type, BRICK.HVAC_Zone)) 263 | g.add((EX.hvac_zone_2_3, RDF.type, BRICK.HVAC_Zone)) 264 | 265 | # declare which rooms are in which HVAC Zone 266 | g.add((EX.hvac_zone_1_1, BRICKFRAME.hasPart, EX.room_1_1)) 267 | g.add((EX.hvac_zone_1_1, BRICKFRAME.hasPart, EX.room_1_2)) 268 | g.add((EX.hvac_zone_1_2, BRICKFRAME.hasPart, EX.room_1_3)) 269 | g.add((EX.hvac_zone_1_3, BRICKFRAME.hasPart, EX.room_1_4)) 270 | 271 | g.add((EX.hvac_zone_2_1, BRICKFRAME.hasPart, EX.room_1_1)) 272 | g.add((EX.hvac_zone_2_1, BRICKFRAME.hasPart, EX.room_1_2)) 273 | g.add((EX.hvac_zone_2_2, BRICKFRAME.hasPart, EX.room_1_3)) 274 | g.add((EX.hvac_zone_2_3, BRICKFRAME.hasPart, EX.room_1_4)) 275 | 276 | # declare that the VAVs feed the HVAC Zones 277 | g.add((EX.vav_1_1, BRICKFRAME.feeds, EX.hvac_zone_1_1)) 278 | g.add((EX.vav_1_2, BRICKFRAME.feeds, EX.hvac_zone_1_2)) 279 | g.add((EX.vav_1_3, BRICKFRAME.feeds, EX.hvac_zone_1_3)) 280 | 281 | g.add((EX.vav_2_1, BRICKFRAME.feeds, EX.hvac_zone_2_1)) 282 | g.add((EX.vav_2_2, BRICKFRAME.feeds, EX.hvac_zone_2_2)) 283 | g.add((EX.vav_2_3, BRICKFRAME.feeds, EX.hvac_zone_2_3)) 284 | 285 | # all temperature sensors in rooms downstream of an AHU 286 | res = g.query("""SELECT ?sensor ?room 287 | WHERE { 288 | ?sensor_type rdfs:subClassOf brick:Sensor . 289 | ?sensor_type bf:hasTag brick:Temperature . 290 | ?sensor rdf:type ?sensor_type . 291 | ?ahu rdf:type brick:AHU . 292 | ?ahu bf:feeds+ ?zone . 293 | ?zone bf:hasPart ?room . 294 | ?sensor bf:isPointOf ?room . 295 | } 296 | """) 297 | print "AHU has %d downstream temperature sensors" % len(res) 298 | for row in res: 299 | print row 300 | 301 | res = g.query(""" 302 | SELECT ?sensor ?sensor_type ?room 303 | WHERE { 304 | ?sensor_type rdfs:subClassOf brick:Sensor . 305 | ?sensor rdf:type ?sensor_type . 306 | ?room rdf:type brick:Room . 307 | ?sensor bf:isLocatedIn ?room . 308 | ?sensor bf:isPointOf ?room . 309 | 310 | { ?sensor_type bf:hasTag brick:Temperature } 311 | UNION 312 | { ?sensor_type bf:hasTag brick:CO2 } 313 | UNION 314 | { ?sensor_type bf:hasTag brick:Occupancy } 315 | } 316 | """) 317 | print len(res) 318 | 319 | # TODO: add Lighting 320 | 321 | # how to save our results to a Turtle file, which Protege can read 322 | g.serialize(destination='example_building.ttl', format='turtle') 323 | print len(g) 324 | -------------------------------------------------------------------------------- /application_examples/example_building.ttl: -------------------------------------------------------------------------------- 1 | @prefix bf: . 2 | @prefix brick: . 3 | @prefix btag: . 4 | @prefix ex: . 5 | @prefix rdf: . 6 | @prefix rdfs: . 7 | @prefix xml: . 8 | @prefix xsd: . 9 | 10 | ex:co2_sensor_1 a brick:CO2_Sensor ; 11 | bf:isLocatedIn ex:room_1_1 ; 12 | bf:isPointOf ex:room_1_1 . 13 | 14 | ex:co2_sensor_2 a brick:CO2_Sensor ; 15 | bf:isLocatedIn ex:room_1_2 ; 16 | bf:isPointOf ex:room_1_2 . 17 | 18 | ex:co2_sensor_3 a brick:CO2_Sensor ; 19 | bf:isLocatedIn ex:room_1_3 ; 20 | bf:isPointOf ex:room_1_3 . 21 | 22 | ex:co2_sensor_4 a brick:CO2_Sensor ; 23 | bf:isLocatedIn ex:room_1_4 ; 24 | bf:isPointOf ex:room_1_4 . 25 | 26 | ex:co2_sensor_5 a brick:CO2_Sensor ; 27 | bf:isLocatedIn ex:room_2_1 ; 28 | bf:isPointOf ex:room_2_1 . 29 | 30 | ex:co2_sensor_6 a brick:CO2_Sensor ; 31 | bf:isLocatedIn ex:room_2_2 ; 32 | bf:isPointOf ex:room_2_2 . 33 | 34 | ex:co2_sensor_7 a brick:CO2_Sensor ; 35 | bf:isLocatedIn ex:room_2_3 ; 36 | bf:isPointOf ex:room_2_3 . 37 | 38 | ex:co2_sensor_8 a brick:CO2_Sensor ; 39 | bf:isLocatedIn ex:room_2_4 ; 40 | bf:isPointOf ex:room_2_4 . 41 | 42 | ex:pir_sensor_1 a brick:Occupancy_Sensor ; 43 | bf:isLocatedIn ex:room_1_1 ; 44 | bf:isPointOf ex:room_1_1 . 45 | 46 | ex:pir_sensor_2 a brick:Occupancy_Sensor ; 47 | bf:isLocatedIn ex:room_1_2 ; 48 | bf:isPointOf ex:room_1_2 . 49 | 50 | ex:pir_sensor_3 a brick:Occupancy_Sensor ; 51 | bf:isLocatedIn ex:room_1_3 ; 52 | bf:isPointOf ex:room_1_3 . 53 | 54 | ex:pir_sensor_4 a brick:Occupancy_Sensor ; 55 | bf:isLocatedIn ex:room_1_4 ; 56 | bf:isPointOf ex:room_1_4 . 57 | 58 | ex:pir_sensor_5 a brick:Occupancy_Sensor ; 59 | bf:isLocatedIn ex:room_2_1 ; 60 | bf:isPointOf ex:room_2_1 . 61 | 62 | ex:pir_sensor_6 a brick:Occupancy_Sensor ; 63 | bf:isLocatedIn ex:room_2_2 ; 64 | bf:isPointOf ex:room_2_2 . 65 | 66 | ex:pir_sensor_7 a brick:Occupancy_Sensor ; 67 | bf:isLocatedIn ex:room_2_3 ; 68 | bf:isPointOf ex:room_2_3 . 69 | 70 | ex:temp_sensor_1 a ex:Fahrenheit_Temperature_Sensor ; 71 | bf:isLocatedIn ex:room_1_1 ; 72 | bf:isPointOf ex:room_1_1 . 73 | 74 | ex:temp_sensor_2 a ex:Fahrenheit_Temperature_Sensor ; 75 | bf:isLocatedIn ex:room_1_2 ; 76 | bf:isPointOf ex:room_1_2 . 77 | 78 | ex:temp_sensor_3 a ex:Fahrenheit_Temperature_Sensor ; 79 | bf:isLocatedIn ex:room_1_3 ; 80 | bf:isPointOf ex:room_1_3 . 81 | 82 | ex:temp_sensor_4 a ex:Fahrenheit_Temperature_Sensor ; 83 | bf:isLocatedIn ex:room_1_4 ; 84 | bf:isPointOf ex:room_1_4 . 85 | 86 | ex:temp_sensor_5 a ex:Fahrenheit_Temperature_Sensor ; 87 | bf:isLocatedIn ex:room_2_1 ; 88 | bf:isPointOf ex:room_2_1 . 89 | 90 | ex:temp_sensor_6 a ex:Fahrenheit_Temperature_Sensor ; 91 | bf:isLocatedIn ex:room_2_2 ; 92 | bf:isPointOf ex:room_2_2 . 93 | 94 | ex:temp_sensor_7 a ex:Fahrenheit_Temperature_Sensor ; 95 | bf:isLocatedIn ex:room_2_3 ; 96 | bf:isPointOf ex:room_2_3 . 97 | 98 | ex:temp_sensor_8 a ex:Fahrenheit_Temperature_Sensor ; 99 | bf:isLocatedIn ex:room_2_4 ; 100 | bf:isPointOf ex:room_2_4 . 101 | 102 | ex:ahu_1 a brick:AHU ; 103 | bf:feeds ex:vav_1_1, 104 | ex:vav_1_2, 105 | ex:vav_1_3, 106 | ex:vav_2_1, 107 | ex:vav_2_2, 108 | ex:vav_2_3 . 109 | 110 | ex:floor_power_meter_1 a brick:Power_Meter . 111 | 112 | ex:floor_power_meter_2 a brick:Power_Meter . 113 | 114 | ex:hvac_zone_1_1 a brick:HVAC_Zone ; 115 | bf:hasPart ex:room_1_1, 116 | ex:room_1_2 . 117 | 118 | ex:hvac_zone_1_2 a brick:HVAC_Zone ; 119 | bf:hasPart ex:room_1_3 . 120 | 121 | ex:hvac_zone_1_3 a brick:HVAC_Zone ; 122 | bf:hasPart ex:room_1_4 . 123 | 124 | ex:hvac_zone_2_1 a brick:HVAC_Zone ; 125 | bf:hasPart ex:room_1_1, 126 | ex:room_1_2 . 127 | 128 | ex:hvac_zone_2_2 a brick:HVAC_Zone ; 129 | bf:hasPart ex:room_1_3 . 130 | 131 | ex:hvac_zone_2_3 a brick:HVAC_Zone ; 132 | bf:hasPart ex:room_1_4 . 133 | 134 | ex:pir_sensor_8 a brick:Occupancy_Sensor ; 135 | bf:isLocatedIn ex:room_2_4 ; 136 | bf:isPointOf ex:room_2_4 . 137 | 138 | ex:vav_1_1 a brick:VAV ; 139 | bf:feeds ex:hvac_zone_1_1 . 140 | 141 | ex:vav_1_2 a brick:VAV ; 142 | bf:feeds ex:hvac_zone_1_2 . 143 | 144 | ex:vav_1_3 a brick:VAV ; 145 | bf:feeds ex:hvac_zone_1_3 . 146 | 147 | ex:vav_2_1 a brick:VAV ; 148 | bf:feeds ex:hvac_zone_2_1 . 149 | 150 | ex:vav_2_2 a brick:VAV ; 151 | bf:feeds ex:hvac_zone_2_2 . 152 | 153 | ex:vav_2_3 a brick:VAV ; 154 | bf:feeds ex:hvac_zone_2_3 . 155 | 156 | ex:building_1 a brick:Building ; 157 | rdfs:label "Example Building Hall" ; 158 | bf:hasPart ex:ahu_1 . 159 | 160 | ex:floor_1 a brick:Floor ; 161 | bf:hasPoint ex:floor_power_meter_1 ; 162 | bf:isPartOf ex:building_1 . 163 | 164 | ex:floor_2 a brick:Floor ; 165 | bf:hasPoint ex:floor_power_meter_2 ; 166 | bf:isPartOf ex:building_1 . 167 | 168 | ex:room_2_1 a brick:Room ; 169 | bf:isPartOf ex:floor_2 . 170 | 171 | ex:room_2_2 a brick:Room ; 172 | bf:isPartOf ex:floor_2 . 173 | 174 | ex:room_2_3 a brick:Room ; 175 | bf:isPartOf ex:floor_2 . 176 | 177 | ex:room_2_4 a brick:Room ; 178 | bf:hasPoint ex:pir_sensor_8 ; 179 | bf:isPartOf ex:floor_2 . 180 | 181 | ex:Fahrenheit_Temperature_Sensor bf:hasUnit brick:Fahrenheit ; 182 | rdfs:subClassOf brick:Temperature_Sensor . 183 | 184 | ex:room_1_1 a brick:Room ; 185 | bf:isPartOf ex:floor_1 . 186 | 187 | ex:room_1_2 a brick:Room ; 188 | bf:isPartOf ex:floor_1 . 189 | 190 | ex:room_1_3 a brick:Room ; 191 | bf:isPartOf ex:floor_1 . 192 | 193 | ex:room_1_4 a brick:Room ; 194 | bf:isPartOf ex:floor_1 . 195 | 196 | -------------------------------------------------------------------------------- /application_examples/names.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildSysUniformMetadata/GroundTruth/789ff13adc7713bb7cbfd374f370d9dc72ac07ac/application_examples/names.xlsx -------------------------------------------------------------------------------- /application_examples/paper_apps.md: -------------------------------------------------------------------------------- 1 | ## How to run Queries 2 | 3 | Running these queries isn't too bad using the `rdflib` Python library. The gist of the code 4 | is: 5 | 6 | ```python 7 | import rdflib 8 | 9 | g = rdflib.Graph() 10 | g.parse('.ttl', format='ttl') 11 | 12 | # query goes here 13 | res = g.query(""" 14 | SELECT ?vav ?room 15 | WHERE { 16 | ?vav rdf:type brick:VAV . 17 | ?room rdf:type brick:Room . 18 | 19 | ?vav bf:feeds+ ?zone . 20 | ?room bf:isPartOf ?zone . 21 | } 22 | """) 23 | print "Number of results: {0}".format(len(res)) 24 | print "Results:" 25 | for subject, predicate, object in res: 26 | print subject, predicate, object 27 | ``` 28 | 29 | ## Occupancy Modeling 30 | 31 | - For each room, we want: 32 | - temperature sensor 33 | - co2 sensor 34 | - pir sensor 35 | - power meter for any equipment in the room 36 | 37 | - identify meters for any HVAC equipment 38 | - identify meters for any lighting equipment 39 | 40 | ```sql 41 | -- find the sensors for all of the rooms 42 | SELECT ?sensor ?sensor_type ?room 43 | WHERE { 44 | -- get all sensor classes that measure Temperature, CO2 or occupancy 45 | ?sensor_type rdfs:subClassOf brick:Sensor . 46 | { ?sensor_type bf:hasTag btag:Temperature } 47 | UNION 48 | { ?sensor_type bf:hasTag btag:CO2 } 49 | UNION 50 | { ?sensor_type bf:hasTag btag:Occupancy } 51 | 52 | -- get all sensors of those classes 53 | ?sensor rdf:type ?sensor_type . 54 | 55 | -- restrict sensors such that they are located in a room 56 | -- and measure that room (should filter out HVAC equipment 57 | -- sensors that feed into the room) 58 | ?room rdf:type brick:Room . 59 | ?sensor bf:isLocatedIn ?room . 60 | ?sensor bf:measures ?room . 61 | 62 | } 63 | 64 | -- find all power meters for equipment in any of the rooms 65 | SELECT ?meter ?equipment ?room 66 | WHERE { 67 | -- define the types that we're looking for 68 | ?meter rdf:type brick:Power_Meter . 69 | ?room rdf:type brick:Room . 70 | ?equipment rdf:type brick:Equipment . 71 | 72 | -- return the meters that measure equipment that is located 73 | -- in some room 74 | ?equipment bf:isLocatedIn ?room . 75 | ?meter bf:measures ?equipment . 76 | } 77 | 78 | -- find all power meters for any HVAC equipment 79 | SELECT ?meter ?equipment ?room 80 | WHERE { 81 | -- define the types that we're looking for 82 | ?meter rdf:type brick:Power_Meter . 83 | ?equipment rdf:type brick:Equipment . 84 | ?room rdf:type brick:Room . 85 | 86 | -- return meter that measures HVAC equipment 87 | -- upstream of some room 88 | ?meter bf:measures ?equipment . 89 | ?equipment bf:hasTag btag:HVAC . 90 | ?equipment bf:feeds+ ?zone . 91 | ?zone bf:hasPart ?room . 92 | } 93 | 94 | -- find all power meters for any Lighting equipment 95 | SELECT ?meter ?equipment ?room 96 | WHERE { 97 | ?meter rdf:type brick:Power_Meter . 98 | ?equipment rdf:type brick:Equipment . 99 | ?room rdf:type brick:Room . 100 | 101 | ?meter bf:measures ?equipment . 102 | ?equipment bf:hasTag btag:Lighting . 103 | ?zone bf:hasPart ?room . 104 | 105 | -- here we aren't sure of the relationship, so 106 | -- we capture both ways 107 | { ?equipment bf:feeds+ ?zone } 108 | UNION 109 | { ?equipment bf:feeds+ ?room } 110 | 111 | } 112 | ``` 113 | 114 | 115 | ## Energy Apportionment 116 | 117 | - presence: 118 | - PIR sensors in a room, in a cubicle 119 | - lighting: 120 | - find pairs of illumination sensors with lighting equipment in each room 121 | 122 | Otherwise very similar to the above application 123 | 124 | ## Web Displays 125 | 126 | - reheat valve command for all VAVs, and the associated reheat coil 127 | - airflow sensor for all VAVs 128 | - map VAVs to hvac zones and to rooms in hvac zones 129 | - find the schedule for the HVAC system 130 | - find power meters for: 131 | - cooling loop 132 | - heating loop 133 | - hvac system 134 | - lightign system 135 | - equipment in rooms 136 | 137 | 138 | ```sql 139 | -- reheat valve command for all VAVs 140 | SELECT ?reheat_vlv_cmd ?vav 141 | WHERE { 142 | -- declare the types 143 | ?reheat_vlv_cmd rdf:type brick:Reheat_Valve_Command . 144 | ?vav rdf:type brick:VAV . 145 | 146 | -- return reheat valve command points associated with some VAV 147 | ?vav bf:hasPoint+ ?reheat_vlv_cmd . 148 | } 149 | 150 | -- airflow sensor for all VAVs 151 | SELECT ?airflow_sensor ?room ?vav 152 | WHERE { 153 | -- define some generic air flow sensor type 154 | ?airflow_sensor rdf:type brick:Sensor . 155 | ?airflow_sensor bf:hasTag btag:Air . 156 | ?airflow_sensor bf:hasTag btag:Flow . 157 | 158 | ?vav rdf:type brick:VAV . 159 | ?room rdf:type brick:Room . 160 | 161 | -- return airflow sensors that are associated with some VAV 162 | -- This may be that it is part of the VAV or it is downstream 163 | -- of a VAV 164 | { ?airflow_sensor bf:isPartOf ?vav } 165 | UNION 166 | { ?vav bf:feeds+ ?airflow_sensor } 167 | 168 | -- TODO: is this sufficient, or do we need to 169 | -- only return airflow sensors that are upstream of some room? 170 | } 171 | 172 | -- map VAVs to hvac zones and rooms 173 | SELECT ?vav ?room 174 | WHERE { 175 | ?vav rdf:type brick:VAV . 176 | ?room rdf:type brick:Room . 177 | 178 | -- VAVs feed some zone, and that zone contains rooms 179 | ?vav bf:feeds+ ?zone . 180 | ?room bf:isPartOf ?zone . 181 | } 182 | 183 | -- find power meters for cooling loop, heating loop 184 | SELECT ?equip ?equip_type ?meter 185 | WHERE { 186 | ?equip_type rdfs:subClassOf brick:Equipment . 187 | ?equip rdf:type ?equip_type . 188 | ?meter rdf:type brick:Power_Meter . 189 | 190 | ?equip rdfs:subClassOf brick:Water_System . 191 | { ?equip bf:hasTag btag:Chilled } 192 | UNION 193 | { ?equip bf:hasTag btag:Hot } 194 | 195 | ?meter bf:measures ?equip . 196 | 197 | } 198 | ``` 199 | 200 | ## Model-Predictive Control 201 | 202 | ```sql 203 | -- find all buildings, floors, hvac zones, rooms 204 | SELECT ?bldg ?floor? ?hvac_zone ?room 205 | WHERE { 206 | ?bldg rdf:type brick:Building . 207 | ?floor rdf:type brick:Floor . 208 | ?room rdf:type brick:Room . 209 | ?hvac_zone rdf:type brick:Zone . 210 | ?hvac_zone bf:hasTag btag:HVAC . 211 | 212 | ?floor bf:isPartOf ?bldg . 213 | ?room bf:isPartOf ?floor . 214 | ?room bf:isPartOf ?hvac_zone . 215 | } 216 | 217 | -- find windows in the room 218 | 219 | -- grab the orientation of the room if we have it 220 | SELECT ?room ?orientation 221 | WHERE { 222 | ?room rdf:type brick:Room . 223 | ?room rdfs:hasProperty brick:Orientation . 224 | ?orientation rdf:type brick:Orientation . 225 | } 226 | 227 | -- grab all VAVs and AHUs and zones 228 | SELECT ?vav ?ahu ?hvac_zone 229 | WHERE { 230 | ?vav rdf:type brick:VAV . 231 | ?ahu rdf:type brick:AHU . 232 | ?ahu bf:feeds ?vav . 233 | ?hvac_zone rdf:type brick:Zone . 234 | ?hvac_zone bf:hasTag btag:HVAC . 235 | ?vav bf:feeds ?hvac_zone . 236 | } 237 | ``` 238 | 239 | ## Participatory Feedback 240 | ```sql 241 | -- associate lighting with rooms 242 | SELECT ?light_equip ?light_state ?light_cmd ?room 243 | WHERE { 244 | ?light_equip rdf:type brick:Equipment . 245 | ?light_equip bf:hasTag btag:Lighting . 246 | ?light_equip bf:feeds brick:?zone . 247 | ?zone rdf:type brick:Zone . 248 | ?zone bf:hasTag btag:Lighting . 249 | ?zone bf:contains ?room . 250 | ?room rdf:type brick:Room . 251 | 252 | ?light_state rdf:type brick:Status . 253 | ?light_state bf:isPointOf ?light_equip . 254 | ?light_state bf:hasTag btag:Luminance . 255 | 256 | ?light_cmd rdf:type brick:Command . 257 | ?light_cmd bf:isPointOf ?light_equip . 258 | ?light_cmd bf:hasTag btag:Luminance . 259 | } 260 | 261 | -- find all power meters and associate them with floor and room 262 | SELECT ?meter ?floor ?room 263 | WHERE { 264 | ?meter rdf:type brick:Sensor . 265 | ?meter bf:hasTag btag:Power . 266 | ?loc rdf:type brick:Location . 267 | 268 | { ?room bf:isLocatedIn ?loc } 269 | UNION 270 | { ?room bf:isPartOf ?loc } 271 | 272 | ?meter bf:isPointOf+ ?loc 273 | } 274 | ``` 275 | 276 | ## Fault Detection and Diagnosis 277 | We need 11 common points in each AHU to run FDD rules. Those points can be seen in FDD_APP.ipynb. In one building, to get one type of points for all AHUs, we can define the following command 278 | ```python 279 | def get_points(acronym,brick_name,g): 280 | res = g.query(""" 281 | SELECT ?%s 282 | WHERE { 283 | ?%s rdf:type brick:%s . 284 | ?ahu rdf:type brick:AHU . 285 | ?%s ns1:isPointOf ?ahu . 286 | } 287 | """ % (acronym,acronym,brick_name,acronym)) 288 | 289 | return list(res) 290 | ``` 291 | For example, if we need the outside air temperature(OAT), which is defined as "Outside_Air_Temperature_Sensor" in BRICK, we can run 292 | ```python 293 | import rdflib 294 | 295 | g = rdflib.Graph() 296 | g.parse('../CMU-Yuvraj/GHCYuvraj_brick.ttl', format='turtle') 297 | 298 | res = get_points("OAT","Outside_Air_Temperature_Sensor",g) 299 | ``` 300 | 301 | ## Non-Intrusive Load Monitoring 302 | 303 | ```sql 304 | -- find all equipment inside rooms and associated power meters 305 | SELECT ?equip ?meter ?floor ?room 306 | WHERE { 307 | ?equip rdf:type brick:Equipment . 308 | ?meter rdf:type brick:Sensor . 309 | ?meter bf:hasTag btag:Power . 310 | ?loc rdf:type brick:Location . 311 | 312 | { ?room bf:isLocatedIn ?loc } 313 | UNION 314 | { ?room bf:isPartOf ?loc } 315 | 316 | ?meter bf:isPointOf+ ?loc 317 | 318 | { ?equip bf:isLocatedIn+ ?loc } 319 | UNION 320 | { ?equip bf:isPartOf+ ?loc } 321 | } 322 | ``` 323 | 324 | ## Demand Response 325 | 326 | ```sql 327 | -- find all equipment (inside rooms) and associated power meters and control points 328 | SELECT ?equip ?meter ?cmd 329 | WHERE { 330 | ?cmd rdf:type brick:Command . 331 | ?equip rdf:type brick:Equipment . 332 | ?meter rdf:type brick:Sensor . 333 | ?meter bf:hasTag btag:Power . 334 | ?room rdf:type brick:Room . 335 | ?equip bf:isLocatedIn ?room . 336 | ?meter bf:isPointOf ?equip . 337 | ?cmd bf:isPointOf ?equip . 338 | } 339 | ``` 340 | -------------------------------------------------------------------------------- /application_examples/runall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | for building in `ls ../building_instances/*.ttl`; do 4 | echo $building 5 | python RUN_APPS.py $building 6 | done 7 | -------------------------------------------------------------------------------- /doc/figs/heat_exchanger.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildSysUniformMetadata/GroundTruth/789ff13adc7713bb7cbfd374f370d9dc72ac07ac/doc/figs/heat_exchanger.pdf -------------------------------------------------------------------------------- /etc/instance_generators/EBU3B_UCSD/README: -------------------------------------------------------------------------------- 1 | Name of building : Engineering Building Unit 3B 2 | Number of Sensors : 4594 3 | Built in 2004 4 | BMS System : Johnson Controls 5 | 6 | Files provided : 7 | 1. ebu3b_description_to_tagset.csv 8 | Descriptions given by the vendor are unique. We map each description to a Tagset defined in Brick to represent its point type. This is used in "ebu3b_brickgenerator.ipynb" to normalize point types. 9 | 10 | 2. ebu3b_sensor_types_location.csv 11 | This contains raw labels and metadata given by the vendor and its ground truth relationships and point types. Point types here are customized (not Brick). 12 | 13 | 3. ebu3b_brickgenerator.ipynb 14 | It takes 1. and 2. to generate normalized Brick metadata, ebu3b_brick.ttl. Just run the file in any Jupyter or Ipython Notebook environment. 15 | 16 | 17 | Appendix. 18 | Description for the ground truth file. 19 | 20 | We provide both the native information obtained from BACnet and ground truth information as interpreted by us. Everything is provided as an Excel as well as CSV file. We will provide mapping to Haystack in the future. 21 | 22 | The file consists of a list of points in a building. The columns indicate different metadata attributes. 23 | 24 | BACnet Device ID: The address of middlebox in the BACnet network. In our university, buildings can be associated with 1 to 8 middleboxes. A middlebox device can contain information of approximately 2000 points. 25 | 26 | BACnet Object Type: The data type assigned to a point by BACnet. These indicate both the data type as well as if the point is an input (sensor) or output (actuator/configuation parameter). 27 | 28 | BACnet Object ID: The ID assigned by BACnet to each point in the middlebox device 29 | Unique Identifier: We concatenate BACnet Device ID, Object Type and Object ID to obtain a unique ID for every point. 30 | 31 | BACnet Name: The name field in BACnet object 32 | 33 | Johnson Controls Name: A proprietary field in BACnet object used by UCSD vendor Johnson Controls 34 | 35 | BACnet Description: A generic description field inside BACnet object. Our building vendors typically describe the type of point in this field. 36 | 37 | BACnet Unit: Unit field in BACnet object. Each number indicates a unique unit such as %, kW, etc. 38 | 39 | Ground Truth Point Type: Our manually interpreted ground point type from the metadata available. 40 | 41 | Point Ref: Some points are provided references such as PID 1, Temperature 25. We assign this to Point Ref. 42 | 43 | Location: Location of equipment. Typically room numbers in the building. 44 | 45 | Equipment Type: Our manually interpreted equipment type from metadata. This field tries to include equipment which might be nested together. For example, an AHU has supply and return fans. We use Equipment Subsystems to express this hierarchy. 46 | 47 | Equipment Ref: Number assigned to equipment. If there are two supply fans, their corresponding references may be 1 and 2. 48 | 49 | Equipment Subsystem: The hierarchical relationship between equipment. For example, AHU contains supply and return fans. 50 | Building: Building name. There are a few spurious points which may belong to other buildings. 51 | 52 | 53 | -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/AHURelations.csv: -------------------------------------------------------------------------------- 1 | First,Second,Third AHU_12,feeds,VAV_Room_7723 AHU_10,feeds,VAV_Room_9203_Office AHU_11,feeds,VAV_Room_7219_Office AHU_8,feeds,VAV_Room_4205_Office AHU_10,feeds,VAV_Room_8133_Office AHU_12,feeds,VAV_Room_7517 AHU_10,feeds,VAV_Room_8122_Office AHU_9,feeds,VAV_Room_7027_Admin_Office AHU_8,feeds,VAV_Room_3101_Cafe_-_East_Wall AHU_7,feeds,VAV_Room_6115_Conference_Slave AHU_12,feeds,VAV_Room_6416 AHU_12,feeds,VAV_Room_5721 AHU_12,feeds,VAV_Room_5713 AHU_12,feeds,VAV_Room_7707 AHU_12,feeds,VAV_Room_5413 AHU_4,feeds,VAV_Room_2102 AHU_9,feeds,VAV_Room_6025_Office AHU_12,feeds,VAV_Room_7609 AHU_12,feeds,VAV_Room_6413 AHU_8,feeds,VAV_Room_4126_Office AHU_9,feeds,VAV_Corridor_6200 AHU_9,feeds,VAV_Room_8107_Office AHU_9,feeds,VAV_Room_8008_Office AHU_9,feeds,VAV_Room_6011_Storage AHU_9,feeds,VAV_Room_8108_Office AHU_10,feeds,VAV_Room_7111_Office AHU_12,feeds,VAV_Room_5505 AHU_12,feeds,VAV_Room_7401 AHU_11,feeds,VAV_Room_9108_Office AHU_9,feeds,VAV_Room_9005_Office AHU_9,feeds,VAV_Room_7004_Office AHU_9,feeds,VAV_Room_8217_Office AHU_4,feeds,VAV_Room_2107 AHU_12,feeds,VAV_Room_5407 AHU_10,feeds,VAV_Room_8229_Office AHU_12,feeds,VAV_Room_5707 AHU_9,feeds,VAV_Room_8009_Office AHU_12,feeds,VAV_Room_6505 AHU_10,feeds,VAV_Room_7121_Office AHU_8,feeds,VAV_Room_5007_Office AHU_11,feeds,VAV_Room_7207_Office AHU_12,feeds,VAV_Room_7709 AHU_9,feeds,VAV_Room_7021_Admin_Office AHU_11,feeds,VAV_Room_6215_Office AHU_8,feeds,VAV_Room_4102_Classroom AHU_10,feeds,VAV_Corridor_8100_Central AHU_9,feeds,VAV_Room_9004_Office AHU_9,feeds,VAV_Room_8219_Office AHU_10,feeds,VAV_Room_7227_Office AHU_12,feeds,VAV_Room_7416 AHU_9,feeds,VAV_Room_6012_Open_Project_Space AHU_12,feeds,VAV_Room5510 AHU_10,feeds,VAV_Room_6113_T.D._Office AHU_12,feeds,VAV_Corr_5700_East AHU_10,feeds,VAV_Room_9231_Office AHU_10,feeds,VAV_Room_7224_Project AHU_8,feeds,VAV_Room_4124_Office AHU_8,feeds,VAV_Corridor_4100_Northwest AHU_12,feeds,VAV_Room_6715 AHU_9,feeds,VAV_Room_9007_Office AHU_8,feeds,VAV_Room_4103_Office AHU_10,feeds,VAV_Corridor_9100_West AHU_12,feeds,VAV_Room_6401 AHU_9,feeds,VAV_Room_6013_Office AHU_10,feeds,VAV_Room_9208_Project_Room AHU_4,feeds,VAV_Room_2111 AHU_12,feeds,VAV_Room_4405 AHU_10,feeds,VAV_Room_9113_Office AHU_12,feeds,VAV_Room_6511 AHU_12,feeds,VAV_Room_6509 AHU_11,feeds,VAV_Room_7208_Project AHU_12,feeds,VAV_Room7407 AHU_12,feeds,VAV_Room_6405 AHU_9,feeds,VAV_Room_6017_Office AHU_12,feeds,VAV_Room_5511 AHU_10,feeds,VAV_Room_7114_Project AHU_11,feeds,VAV_Room_7218_Storage AHU_11,feeds,VAV_Room_6221_Office AHU_9,feeds,VAV_Room_8025_Open_Project AHU_4,feeds,VAV_Room_1106 AHU_10,feeds,VAV_Room_9114_Office AHU_11,feeds,VAV_Room_6210_Open_Project_Space AHU_9,feeds,VAV_Room_8017_Office AHU_12,feeds,VAV_Room_6507 AHU_12,feeds,VAV_Room_5503 AHU_10,feeds,VAV_Room_7115_Office AHU_10,feeds,VAV_Room_7119_Office AHU_12,feeds,VAV_Room_6415 AHU_9,feeds,VAV_Room_8206_Copy_Room AHU_9,feeds,VAV_Room_8007_Office AHU_9,feeds,VAV_Room_8002_Office AHU_9,feeds,VAV_Room_8003_Office AHU_10,feeds,VAV_Room_9233_Future_Use AHU_10,feeds,VAV_Room_6101E_Collaborative_Common AHU_7,feeds,VAV_Room_6115_Conference_Master AHU_7,feeds,VAV_Room_6121_Conference_Room AHU_12,feeds,VAV_Room_5703 AHU_12,feeds,VAV_Room7603 AHU_10,feeds,VAV_Room_9200_Future_Use AHU_12,feeds,VAV_Room_6603 AHU_12,feeds,VAV_Room_7701 AHU_10,feeds,VAV_Room_9127_Office AHU_12,feeds,VAV_Room_5723 AHU_9,feeds,VAV_Room_7003_Office AHU_4,feeds,VAV_Room_2109 AHU_10,feeds,VAV_Room_8120_Office AHU_9,feeds,VAV_Room_8205_Office AHU_8,feeds,VAV_Room_5003_Office AHU_10,feeds,VAV_Room_9125_Office AHU_9,feeds,VAV_Room_9012_Open_Project_Space AHU_4,feeds,VAV_Room_2110 AHU_12,feeds,VAV_Room_6607 AHU_8,feeds,VAV_Corridor_4100_North AHU_9,feeds,VAV_Room_8001_Office AHU_8,feeds,VAV_Room_4113_Office AHU_12,feeds,VAV_Room_5711 AHU_10,feeds,VAV_Room_7122_Storage AHU_12,feeds,VAV_Room_7403 AHU_4,feeds,VAV_Room2101 AHU_10,feeds,VAV_Room_9205_Office AHU_12,feeds,VAV_Room_6411 AHU_10,feeds,VAV_Corridor_9200_North AHU_12,feeds,VAV_Room_5506_Open_Project AHU_12,feeds,VAV_Room_7601 AHU_9,feeds,VAV_Room_6203_Office AHU_9,feeds,VAV_Room_7017_Admin_Office AHU_10,feeds,VAV_Room_8129_Office AHU_8,feeds,VAV_Room_4201_Office AHU_8,feeds,VAV_Room_3805_E.E.C. AHU_12,feeds,VAV_Room_5414 AHU_10,feeds,VAV_Room_8228_Project AHU_3,feeds,VAV_Room_4211_Classroom AHU_10,feeds,VAV_Room_9227_Office AHU_12,feeds,VAV_Room_6409 AHU_12,feeds,VAV_Room_4411 AHU_12,feeds,VAV_Room_7501 AHU_9,feeds,VAV_Room_6019_Office AHU_9,feeds,VAV_Room_8215_Office AHU_9,feeds,VAV_Room_6027_Office AHU_9,feeds,VAV_Room_7001_Office AHU_12,feeds,VAV_Room_6713 AHU_10,feeds,VAV_Room_9115_Conference_Room AHU_10,feeds,VAV_Room_7117_Office AHU_11,feeds,VAV_Room_9110_Office AHU_10,feeds,VAV_Room_9221_Office AHU_10,feeds,VAV_Corridor_6100 AHU_12,feeds,VAV_Room_6501 AHU_9,feeds,VAV_Room_9013_Office AHU_11,feeds,VAV_Room_7300_Reception AHU_12,feeds,VAV_Room_5412_5418_5716 AHU_3,feeds,VAV_Room_4215_Classroom AHU_8,feeds,VAV_Room_4107_Office AHU_8,feeds,VAV_Room_5001_Office AHU_9,feeds,VAV_Room_6010_Office AHU_4,feeds,VAV_Room_2108 AHU_8,feeds,VAV_Room_5113_Dean_Office AHU_10,feeds,VAV_Room_7225_Office AHU_12,feeds,VAV_Room_5701 AHU_12,feeds,VAV_Room_6705 AHU_10,feeds,VAV_Room_8231_Office AHU_12,feeds,VAV_Room_6503 AHU_12,feeds,VAV_Corridor_4801 AHU_10,feeds,VAV_Room_9210_Open_Project_Space AHU_9,feeds,VAV_Room_8010_Office AHU_8,feeds,VAV_Room_4007_Office AHU_11,feeds,VAV_Room_5000_Study_Carrell_Lobby AHU_10,feeds,VAV_Room_6105_Reception_Mail AHU_10,feeds,VAV_Room_8200_Future_Use AHU_12,feeds,VAV_Room_7409 AHU_12,feeds,VAV_Room_7515 AHU_8,feeds,VAV_Room_5119_Dean_Suite AHU_9,feeds,VAV_Room_8013_Office AHU_11,feeds,VAV_Corridor_7300 AHU_9,feeds,VAV_Room_6001_Office AHU_8,feeds,VAV_Room_5009_Kitchenette AHU_11,feeds,VAV_Room_9103_Office AHU_9,feeds,VAV_Room_7025_Admin_Office AHU_9,feeds,VAV_Room_6007_Office AHU_9,feeds,VAV_Room_7002_Office AHU_11,feeds,VAV_Room_6219_Office AHU_11,feeds,VAV_Room_9101_Office AHU_11,feeds,VAV_Room_7200_Future_Use AHU_11,feeds,VAV_Room_7105_Office AHU_12,feeds,VAV_Room_7711 AHU_9,feeds,VAV_Room_7023_Admin_Office AHU_10,feeds,VAV_Room_9206_Copy_Room AHU_9,feeds,VAV_Room_8014_Open_Project AHU_9,feeds,VAV_Room_8006_Office AHU_9,feeds,VAV_Room_9019_Office AHU_10,feeds,VAV_Room_7110_Office AHU_10,feeds,VAV_Corridor_9100_North AHU_12,feeds,VAV_Room_7715 AHU_12,feeds,VAV_Room_7507 AHU_12,feeds,VAV_Room_6717 AHU_10,feeds,VAV_Room_7221_Office AHU_10,feeds,VAV_Room_8113_Office AHU_8,feeds,VAV_Corridor_3200 AHU_9,feeds,VAV_Room_8101_Office AHU_9,feeds,VAV_Room_9009_Office AHU_12,feeds,VAV_Room_6404 AHU_12,feeds,VAV_Room_6417 AHU_10,feeds,VAV_Room_9120_Office AHU_12,feeds,VAV_Room_7404 AHU_8,feeds,VAV_Room_5013_Admin_Office AHU_9,feeds,VAV_Room_6008_Office AHU_9,feeds,VAV_Room_8019_Office AHU_9,feeds,VAV_Room_8221_Office AHU_9,feeds,VAV_Room_6006_Office AHU_9,feeds,VAV_Room_9023_Office AHU_8,feeds,VAV_Room_4214_Storage AHU_10,feeds,VAV_Room_9219_Office AHU_9,feeds,VAV_Room_8021_Office AHU_10,feeds,VAV_Room_8115_Conference AHU_9,feeds,VAV_Room_7011_Project AHU_8,feeds,VAV_Room_3201_Project AHU_9,feeds,VAV_Corridor_8800 AHU_11,feeds,VAV_Room_6220_Project_Room AHU_12,feeds,VAV_Room_5509 AHU_11,feeds,VAV_Room_7203_Office AHU_10,feeds,VAV_Room_9107_Office AHU_8,feeds,VAV_Room_4000_Bridge AHU_11,feeds,VAV_Room_5208_Conference_Room AHU_10,feeds,VAV_Room_9232_Project_Room AHU_10,feeds,VAV_Room_7107W__Project AHU_8,feeds,VAV_Room_5109_Admin_Office AHU_9,feeds,VAV_Room_6003_Office AHU_12,feeds,VAV_Room_5519 AHU_9,feeds,VAV_Room_8225_Office_Slave AHU_9,feeds,VAV_Room_7010_Office AHU_9,feeds,VAV_Room_8208_Project AHU_9,feeds,VAV_Room_9015_Office AHU_11,feeds,VAV_Corridor_7200_South AHU_12,feeds,VAV_Room5405 AHU_8,feeds,VAV_Room_4111_Office AHU_10,feeds,VAV_Room_8116_Office AHU_10,feeds,VAV_Room_9126_Project_Room AHU_9,feeds,VAV_Room_9011_Office AHU_12,feeds,VAV_Room5411 AHU_12,feeds,VAV_Room_5717 AHU_10,feeds,VAV_Room_7123_Office AHU_8,feeds,VAV_Room_5105_Admin_Office AHU_9,feeds,VAV_Room_8223_Office_Master AHU_12,feeds,VAV_Room_6407 AHU_12,feeds,VAV_Room_7703 AHU_12,feeds,VAV_Room_7719 AHU_12,feeds,VAV_Room_6403 AHU_8,feeds,VAV_Room_5005_Office AHU_10,feeds,VAV_Room_6109_Project_Room AHU_11,feeds,VAV_Room_6213_Office AHU_11,feeds,VAV_Room_7108_Office AHU_8,feeds,VAV_Room_3101_Cafe_-_North_Wall AHU_12,feeds,VAV_Room6513 AHU_8,feeds,VAV_Room_4117_Office AHU_12,feeds,VAV_Room_7503 AHU_12,feeds,VAV_Room_6711 AHU_9,feeds,VAV_Room_7009_Office AHU_12,feeds,VAV_Room_6604 AHU_12,feeds,VAV_Room5513 AHU_12,feeds,VAV_Room7513 AHU_9,feeds,VAV_Room_8023_Office AHU_12,feeds,VAV_Room_5515 AHU_12,feeds,VAV_Room_7405 AHU_9,feeds,VAV_Room_9001_Reading_Room AHU_10,feeds,VAV_Room_8200_Open_Project AHU_11,feeds,VAV_Room_9022_Project_Room AHU_12,feeds,VAV_Room_6414 AHU_9,feeds,VAV_Room_7007_Office AHU_10,feeds,VAV_Room_6111_Project_Room AHU_8,feeds,VAV_Room_4003_Office AHU_8,feeds,VAV_Room_5111_Admin_Office AHU_12,feeds,VAV_Room6412_6418_6716 AHU_12,feeds,VAV_Room_7509 AHU_8,feeds,VAV_Room_3101_Cafe_-_Northwest_Wall AHU_10,feeds,VAV_Room_9225_Office AHU_12,feeds,VAV_Room7411 AHU_4,feeds,VAV_Room_2105 AHU_9,feeds,VAV_Room_9021_Office AHU_8,feeds,VAV_Corridor_5300_West AHU_9,feeds,VAV_Room_6207_Office AHU_8,feeds,VAV_Corridor_5100 AHU_10,feeds,VAV_Room_8127_Office AHU_8,feeds,VAV_Corridor_5300_North AHU_9,feeds,VAV_Room_7012_Project_Space AHU_12,feeds,VAV_Room_7511 AHU_8,feeds,VAV_Room_4101_Classroom AHU_10,feeds,VAV_Corridor_9200_South AHU_9,feeds,VAV_Room_8102_Conference AHU_12,feeds,VAV_Room_5404 AHU_12,feeds,VAV_Room_7717 AHU_10,feeds,VAV_Room_9230_Project_Room AHU_9,feeds,VAV_Room_7006_Office AHU_11,feeds,VAV_Room_5209_Study_Carrells AHU_8,feeds,VAV_Room_5011_Admin_Office AHU_9,feeds,VAV_Room_8011_Office AHU_12,feeds,VAV_Room_7413 AHU_11,feeds,VAV_Room_6223_Office AHU_9,feeds,VAV_Room_6021_Office AHU_11,feeds,VAV_Room_6225_Office AHU_8,feeds,VAV_Room_5103_Admin_Office AHU_11,feeds,VAV_Room_7213_Office AHU_11,feeds,VAV_Room_7205_Office AHU_10,feeds,VAV_Room_8112_Office AHU_12,feeds,VAV_Room_5409 AHU_10,feeds,VAV_Room_9207_Office AHU_11,feeds,VAV_Room_6214_Storage AHU_12,feeds,VAV_Room_5416_Open_Project_Space AHU_9,feeds,VAV_Room_8218_Storage AHU_9,feeds,VAV_Room_7005_Office AHU_9,feeds,VAV_Room_8106_Office AHU_10,feeds,VAV_Room_9229_Office AHU_10,feeds,VAV_Room_7113_Office AHU_7,feeds,VAV_Room_6119_Kitchenette AHU_10,feeds,VAV_Room_8118_Office AHU_12,feeds,VAV_Room_7415 AHU_11,feeds,VAV_Corridor_5200_Central AHU_10,feeds,VAV_Room_9123_Office AHU_12,feeds,VAV_Room_5401 AHU_10,feeds,VAV_Room_6102_Kitchenette AHU_9,feeds,VAV_Room_8005_Office AHU_12,feeds,VAV_Room_7705 AHU_12,feeds,VAV_Room7721 AHU_9,feeds,VAV_Room_8109_Office AHU_9,feeds,VAV_Room_6004_Office AHU_10,feeds,VAV_Room_9116 AHU_12,feeds,VAV_Room7605 AHU_12,feeds,VAV_Room_7607 AHU_12,feeds,VAV_Room_4837 AHU_3,feeds,VAV_Room_5222_Classroom AHU_8,feeds,VAV_Room_4005_Office AHU_9,feeds,VAV_Room_6005_Office AHU_10,feeds,VAV_Room_9111_Office AHU_12,feeds,VAV_Room_5415 AHU_12,feeds,VAV_Room7412 AHU_12,feeds,VAV_Room6601 AHU_8,feeds,VAV_Room_4105_Office AHU_8,feeds,VAV_Room_5117_Conference AHU_9,feeds,VAV_Room_9017_Office AHU_12,feeds,VAV_Room_5419 AHU_9,feeds,VAV_Room_6029_Office AHU_9,feeds,VAV_Room_8203_Office AHU_12,feeds,VAV_Room_5501 AHU_10,feeds,VAV_Room_8114_Office AHU_12,feeds,VAV_Room_7713 AHU_9,feeds,VAV_Room_6002_Project_Room AHU_11,feeds,VAV_Room_9112_Office AHU_10,feeds,VAV_Corridor_6300_to_Hillman AHU_10,feeds,VAV_Room_9118_Office AHU_12,feeds,VAV_Room_5403 AHU_8,feeds,VAV_Room_4115_Office AHU_10,feeds,VAV_Room_8227_Office AHU_10,feeds,VAV_Room_6107_Copy_Room AHU_12,feeds,VAV_Room_5516 AHU_9,feeds,VAV_Room_8018_Project AHU_9,feeds,VAV_Room_8211_Office_Slave AHU_8,feeds,VAV_Room_4203_Office AHU_12,feeds,VAV_Room_5507 AHU_8,feeds,VAV_Room_4109_Office AHU_10,feeds,VAV_Room_7223_Office AHU_9,feeds,VAV_Room_8015_Office AHU_10,feeds,VAV_Room_7127_Office AHU_12,feeds,VAV_Room_5417 AHU_9,feeds,VAV_Room_9003_Office AHU_10,feeds,VAV_Room_8125_Office AHU_11,feeds,VAV_Room_9105_Office AHU_10,feeds,VAV_Room_9223_Office AHU_11,feeds,VAV_Room_6217_Office AHU_9,feeds,VAV_Room_8110_Office AHU_12,feeds,VAV_Room_7505 AHU_10,feeds,VAV_Room_6101W_Collaborative_Common AHU_7,feeds,VAV_Room_6117_Storage AHU_9,feeds,VAV_Room_7015_Lobby AHU_10,feeds,VAV_Room_7129_Office AHU_11,feeds,VAV_Room_7217_Office AHU_8,feeds,VAV_Room_4001_Office AHU_12,feeds,VAV_Room_7414 AHU_9,feeds,VAV_Room_6205_Office AHU_11,feeds,VAV_Room_7215_Office AHU_12,feeds,VAV_Room_5719 AHU_12,feeds,VAV_Room_6515 AHU_8,feeds,VAV_Room_5107_Admin_Office AHU_10,feeds,VAV_Room_7125_Office AHU_8,feeds,VAV_Room_3101_Cafe_-_South_Wall AHU_12,feeds,VAV_Room_6703 AHU_12,feeds,VAV_Room_6701 AHU_9,feeds,VAV_Room_6023_Office AHU_11,feeds,VAV_Room_7103_Project AHU_4,feeds,VAV_Room_1102 AHU_8,feeds,VAV_Room_4122_Office AHU_10,feeds,VAV_Room_7107E_Project AHU_9,feeds,VAV_Room_8103_Office AHU_11,feeds,VAV_Room_9025_Open_Project_Space AHU_10,feeds,VAV_Room_8111_Office AHU_9,feeds,VAV_Room_8207_Office AHU_10,feeds,VAV_Room_8123_Office AHU_9,feeds,VAV_Room_8214_Nursing_Room AHU_12,feeds,VAV_Room_6719 AHU_12,feeds,VAV_Room_6709 AHU_10,feeds,VAV_Room_9109_Office AHU_12,feeds,VAV_Room_5705 AHU_11,feeds,VAV_Corridor_7200_Open_Project_Space AHU_8,feeds,VAV_Room_3101_Cafe_-_Southwest_Wall AHU_12,feeds,VAV_Room_6830 AHU_10,feeds,VAV_Room_7112_Office AHU_9,feeds,VAV_Room_8211_Office_Master AHU_12,feeds,VAV_Room6609 AHU_10,feeds,VAV_Corridor_8100_West AHU_9,feeds,VAV_Room_8105_Office AHU_9,feeds,VAV_Room_7008_Office AHU_9,feeds,VAV_Room_7019_Dept_Head_Office AHU_11,feeds,VAV_Corridor_5200_South AHU_10,feeds,VAV_Corridor_8200 AHU_10,feeds,VAV_Corridor_7200_North AHU_11,feeds,VAV_Room_9106_Office AHU_11,feeds,VAV_Room_5214_Storage AHU_9,feeds,VAV_Room_9002_Office AHU_8,feeds,VAV_Room_5101_Work_Copy_Print AHU_8,feeds,VAV_Room_3000_Classroom AHU_11,feeds,VAV_Room_7211_Office AHU_12,feeds,VAV_Room_5517 AHU_9,feeds,VAV_Room_9006_Office AHU_12,feeds,VAV_Room_6707 AHU_12,feeds,VAV_Room_6605 AHU_9,feeds,VAV_Room_6015_Office AHU_12,feeds,VAV_Room_5715 AHU_10,feeds,VAV_Room_9129_Office AHU_9,feeds,VAV_Room_9008_Office AHU_12,feeds,VAV_Room_5709 AHU_8,feeds,VAV_Corridor_4300_North AHU_8,feeds,VAV_Corridor_4300_South AHU_11,feeds,VAV_Room_6227_Office AHU_9,feeds,VAV_Room_6009_Office AHU_12,feeds,VAV_Room_5508 AHU_11,feeds,VAV_Room_6211_Office -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/CMU_AHU_OddBuildingTagSet.csv: -------------------------------------------------------------------------------- 1 | Bas1,Bas2,Bas3,TagSet,,Tags,Equipment CMU/SCSC Gates/Third Floor/AHU-2 I/O/auto cc sp,auto cc sp,ahu cool sp,AHU Auto Cooling Setpoint,,Cooling;Setpoint;Temperature,AHU CMU/SCSC Gates/Third Floor/AHU-2 I/O/bypass CFM,bypass CFM,ahu bypass air flow sensor,Bypass Air Flow Sensor,,Bypass;Airflow;Sensor,AHU CMU/SCSC Gates/Third Floor/AHU-2 I/O/CHW Valve VDC,CHW Valve VDC,ahu chilled water valve vfd,Run Direction Status,,Water;Chilled;Valve;Sensor,VFD;Chilled Water Valve CMU/SCSC Gates/Third Floor/AHU-2 I/O/chw vlv,chw vlv,ahu chilled water valve cmd,Chilled Water Valve,,Water;Chilled;Valve;Command, CMU/SCSC Gates/Third Floor/AHU-2 I/O/Cool Request,Cool Request,vav cool cmd,Cooling Command,,VAV;Cooling;Request,AHU CMU/SCSC Gates/Third Floor/AHU-2 I/O/Cooling demand %,Cooling demand %,ahu cooling stage cmd,Cooling Request Percent Setpoint,,Cooling,AHU CMU/SCSC Gates/Third Floor/AHU-2 I/O/current cc sp,current cc sp,ahu cur cool sp,AHU Current Cooling Setpoint,,Cooling;Setpoint;Temperature,AHU CMU/SCSC Gates/Third Floor/AHU-2 I/O/current exhaust CFM SP,current exhaust CFM SP,ahu cur exhaust fan air flow sp,Exhaust Fan Air Flow Setpoint,,Exhaust;Fan;Airflow;Setpoint,Fan CMU/SCSC Gates/Third Floor/AHU-2 I/O/current max RA CO2 setpt,current max RA CO2 setpt,ahu cur max return air co2 sp,Max Return Air CO2 Setpoint,,CO2;Return;Setpoint;air,AHU CMU/SCSC Gates/Third Floor/AHU-2 I/O/EA damper,EA damper,ahu vfd air exhaust damper,Exhaust Air Damper,,Damper;Air;Exhaust,Damper CMU/SCSC Gates/Third Floor/AHU-2 I/O/EF piezo,EF piezo,ahu vfd fan exhaust,Exhaust Fan Piezoelectric Sensor,,Exaust;Fan;Sensor;Piezoelectric, CMU/SCSC Gates/Third Floor/AHU-2 I/O/enth wheel RPM,enth wheel RPM,ahu heatWheel unit,Heat Wheel Speed,,Enthalpy;Heating;RPM;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/enth wheel Volts,enth wheel Volts,ahu heatWheel unit,Heat Wheel Voltage,,Enthalpy;Heating;Volts;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/enth whl vfd,enth whl vfd,ahu heatWheel vfd,Heat Wheel VFD,,Enthalpy;Heating;VFD;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/EW DP,EW DP,ahu cmd,Heat Wheel Differential Pressure,,Enthalpy;Heating;DifferntialPressure;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/EW sup temp,EW sup temp,ahu entering air temp,Heat Wheel Supply Air Temperature Sensor,,Enthalpy;Heating;Air;Temperature;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/exh fan vfd,exh fan vfd,ahu exhaust fan vfd,Variable Frequency Drive,,Exhaust;Fan;VFD;Sensor;Equip;, CMU/SCSC Gates/Third Floor/AHU-2 I/O/exhaust CFM,exhaust CFM,ahu exhaust air flow sensor,Exhaust Air Flow Sensor,,Exhaust;Fan;Airflow;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/exhaust demand,exhaust demand,ahu exhaust cmd,Exhaust Fan Start Stop Command,,Exhaust;Fan;Airflow;Command, CMU/SCSC Gates/Third Floor/AHU-2 I/O/exhaust temp,exhaust temp,ahu exhaust temp,Exhaust Air Temperature Sensor,,Exhuast;Airflow;Temperature;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/exhaust vfd volts,exhaust vfd volts,ahu exhaust vfd volt,VFD Voltage Sensor,,Exhaust;VFD;Volts;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/Heat Request,Heat Request,vav heat cmd,Heating Command,,VAV;Heating;Command, CMU/SCSC Gates/Third Floor/AHU-2 I/O/htg demand,htg demand,ahu cmd,Heat Request Percent Setpoint,,Heating;Request;Demand;, CMU/SCSC Gates/Third Floor/AHU-2 I/O/OA damper,OA damper,ahu outside air damper,Outside Air Damper Position Sensor,,Outside;Airflow;Damper;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/oa dewpoint,oa dewpoint,ahu outside air humidity temp sensor,Outside Air Dewpoint Sensor,,Outside;Air;Humidity;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/OA dmpr fb,OA dmpr fb,ahu outside air damper,Outside Air Damper Position Command,,Outside;Airflow;Damper;Command, CMU/SCSC Gates/Third Floor/AHU-2 I/O/oa enthalpy,oa enthalpy,ahu outside air humidity temp energy sensor,Outside Air Enthalpy Sensor,,Outside;Air;Enthalpy;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/oa grains,oa grains,ahu outside air humidity temp sensor,Outside Air Grains Sensor,,Outside;Air;Grains;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/outdoor CO2,outdoor CO2,ahu outside air co2,Outside Air CO2 Sensor,,Outside;Air;CO2;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/outdoor RH,outdoor RH,ahu outside humidity,Outside Air Humidity Sensor,,Outside;Air;Humidigy;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/outdoor temp,outdoor temp,outside air temp sensor,Outside Air Temperature Sensor,,Outside;Air;Temperature;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/Outside Airflow CFM,Outside Airflow CFM,outside air flow sensor,Outside Air Flow Sensor,,Outside;Airflow;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/preheat sup t,preheat sup t,ahu hotWaterHeat entering air temp sensor,Preheat Supply Air Temperature,,Heating;Air;Temperature;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/preheat valve VDC,preheat valve VDC,ahu heat vfd,Preheat Valve VFD,,Heating;VFD;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/Preheating demand %,Preheating demand %,ahu heating cmd,Preheat Demand Setpoint,,Heating;Demand;, CMU/SCSC Gates/Third Floor/AHU-2 I/O/RA CO2,RA CO2,ahu return air co2 sensor,Return Air CO2 Sensor,,Return;Air;CO2;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/ra dewpoint,ra dewpoint,ahu return air humidity temp sensor,Return Air Dewpoint Sensor,,Return;Air;Humidity;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/ra enthalpy,ra enthalpy,ahu return air humidity temp energy sensor,Return Air Enthalpy Sensor,,Return;Air;Enthalpy;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/ra grains,ra grains,ahu return air humidity temp sensor,Return Air Grains Sensor,,Return;Air;grains;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/recirc damper,recirc damper,ahu recirculate air damper,Mixed Air Damper Position Sensor,,Mixed;Air;Damper;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/recirc dmpr fb,recirc dmpr fb,ahu recirculate air damper cmd,Mixed Air Damper Position Command,,Mixed;Air;Damper;Command, CMU/SCSC Gates/Third Floor/AHU-2 I/O/return CFM,return CFM,ahu return air flow sensor,Return Fan Air Flow Sensor,,Return;Fan;Airflow;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/return rh,return rh,ahu return air reheat valve cmd,Return Air Preheat Valve Command,,Return;Air;Heating;Valve;Command, CMU/SCSC Gates/Third Floor/AHU-2 I/O/return temp,return temp,ahu return air temp sensor,Return Air Temperature Sensor,,Return;Air;Temperature;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/Run,Run,cmd,Run Time Sensor,,Run;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/Run Request,Run Request,cmd,Run Request Command,,Run;Command, CMU/SCSC Gates/Third Floor/AHU-2 I/O/SA Duct Press,SA Duct Press,ahu discharge air pressure sensor,Discharge Air Static Pressure Sensor,,Discharge;Air;Pressure;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/SF piezo,SF piezo,ahu entering fan,Supply Fan Piezoelectric Sensor,,Supply;Fan;Piezoelectric;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/sup fan vfd,sup fan vfd,ahu discharge air fan vfd cmd,Discharge Air Static Pressure Setpoint,,Discharge;Air;Fan;VFD;Command, CMU/SCSC Gates/Third Floor/AHU-2 I/O/Supply Air Temp,Supply Air Temp,ahu discharge air temp sensor,Discharge Air Temperature Sensor,,Discharge;Air;Temperature;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/supply CFM,supply CFM,ahu discharge air flow sensor,Supply Fan Air Flow Sensor,,Discharge;Airflow;Air;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/supply demand,supply demand,ahu entering air cmd,Discharge Air Flow Command,,Discharge;Airflow;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/supply temp,supply temp,ahu discharge air temp sensor,Discharge Air Temperature Sensor,,Discharge;Air;Temperature;Sensor, CMU/SCSC Gates/Third Floor/AHU-2 I/O/supply vfd volts,supply vfd volts,ahu entering vfd volt,Supply Fan Piezoelectric Sensor,,Supply;Fan;VFD;Volt, CMU/SCSC Gates/Third Floor/AHU-2 I/O/ZTMP HI,ZTMP HI,zone air temp max,Zone Cooling Temperature Setpoint,,Temperature;Air;SetPoint;Alarm, CMU/SCSC Gates/Third Floor/AHU-2 I/O/ZTMP LO,ZTMP LO,zone air temp min,Zone Heating Temperature Setpoint,,Temperature;Air;SetPoint;Alarm, CMU/SCSC Gates/Eighth Floor/8126 Machine Room CRAC-9/% Capacity,% Capacity,equip chiller coolingCapacity,CRAC Capacity Setpoint,,Temperature;Cooling;Air;Capacity, CMU/SCSC Gates/Eighth Floor/8126 Machine Room CRAC-9/Fan Run Hours,Fan Run Hours,fan vfd equip run cmd,Discharge Air Flow Demand Sensor,,Discharge;Airflow;Air;Command, CMU/SCSC Gates/Eighth Floor/8126 Machine Room CRAC-9/Humidifier Run Hours,Humidifier Run Hours,humidifier run cmd,Humidification On Off Status,,Humidity;Air;Command, CMU/SCSC Gates/Eighth Floor/8126 Machine Room CRAC-9/Humidity,Humidity,humidity sensor,Humidity Sensor,,Humidity;Air;Sensor, CMU/SCSC Gates/Eighth Floor/8126 Machine Room CRAC-9/Temperature,Temperature,temp sensor,Zone Temperature Sensor,,Temperature;Air;Sensor, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Airflow,Airflow,vav air flow sensor,Discharge Air Flow Sensor,,Discharge;Airflow;Air;Sensor, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Airflow Request,Airflow Request,air flow cmd,Discharge Air Flow Command,,Discharge;Airflow;Air;Command, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Airflow Setpoint,Airflow Setpoint,vav air flow sp,Cooling Max Discharge Air Flow Setpoint,,Discharge;Airflow;Air;Setpoint, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Cool Request,Cool Request,vav cool cmd,Cooling Command,,Temperature;Cooling;Air;Command, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Damper Position,Damper Position,vav damper sensor,Damper Position Sensor,,Damper;Air;Sensor, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Discharge Temp,Discharge Temp,vav discharge air temp sensor,Discharge Air Temperature Sensor,,Disrchage;Temperature;Air;Sensor, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Fan Start,Fan Start,fan cmd,Supply Fan Start Stop Command,,Air;Fan;Command, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Fan Status,Fan Status,fan curstatus,Supply Fan Start Stop Status,,Air;Fan;Sensor, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Flow Control _ Flow Input,Flow Control _ Flow Input,air flow sensor,Supply Fan Air Flow Sensor,,Airflow;Air;Fan;Command, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Heat Request,Heat Request,vav heat cmd,Heating Command,,Heating;Command;, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/HWV Command,HWV Command,vav hot water valve cmd,Domestic Hot Water Valve Command,,Water;Heating;Command, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Run,Run,cmd,Run Time Sensor,,Run;Sensor, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Run Request,Run Request,cmd,Run Request Command,,Run;Command, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Schedule,Schedule,cmd,Schedule Setpoint,,Command, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/Zone Temp _ Zone Temp,Zone Temp _ Zone Temp,zone air temp sensor,Zone Temperature Sensor,,Temperature;Air;Sensor, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/ZTMP HI,ZTMP HI,zone air temp max,Zone Cooling Temperature Setpoint,,Temperature;Air;Setpoint;Alarm, CMU/SCSC Gates/Fourth Floor/FSB-1 Room 4307 Classroom/ZTMP LO,ZTMP LO,zone air temp min,Zone Heating Temperature Setpoint,,Temperature;Air;Setpoint;Alarm, CMU/SCSC Gates/Third Floor/Steam Flow Meter Interface/Instant Demand,Instant Demand,hot water meter cmd,Current Usage Meter,,Steam;Demand;Equip, CMU/SCSC Gates/Third Floor/Steam Flow Meter Interface/Peak Today,Peak Today,enegy max meter,Peak Energy Today Meter,,Energy;Sensor;Equip, CMU/SCSC Gates/Third Floor/Steam Flow Meter Interface/Usage MTD,Usage MTD,steam flow meter,Monthly Usage Meter,,Steam;Sensor;Estimation;Equip, CMU/SCSC Gates/Third Floor/Steam Flow Meter Interface/Usage Today,Usage Today,steam flow meter,Usage Today Meter,,Steam;Sensor;Estimation;Equip, CMU/SCSC Gates/Third Floor/Steam Flow Meter Interface/Usage YTD,Usage YTD,steam flow meter,Yearly Usage Meter,,Steam;Sensor;Estimation;Equip, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Airflow,Airflow,vav air flow sensor,Discharge Air Flow Sensor,,Discharge;Airflow;Air;Sensor, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Airflow Request,Airflow Request,air flow cmd,Discharge Air Flow Command,,Discharge;Airflow;Air;Command, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Airflow Setpoint,Airflow Setpoint,vav air flow sp,Discharge Air Flow Setpoint,,Discharge;Airflow;Air;Setpoint, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Cool Request,Cool Request,vav cool cmd,Cooling Command,,Temperature;Cooling;Air;Command, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Damper Position,Damper Position,vav damper sensor,Damper Position Sensor,,Damper;Air;Sensor, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Discharge Temp,Discharge Temp,vav discharge air temp sensor,Discharge Air Temperature Sensor,,Disrchage;Temperature;Air;Sensor, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Flow Control _ Flow Input,Flow Control _ Flow Input,air flow sensor,Supply Fan Air Flow Sensor,,Airflow;Air;Fan;Command, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Heat Request,Heat Request,vav heat cmd,Heating Command,,Heating;Command;, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/HWV Command,HWV Command,vav hot water valve cmd,Domestic Hot Water Valve Command,,Water;Heating;Command, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/OCC Sensor,OCC Sensor,occ sensor,Occupancy Sensor,,Occupancy;Sensor, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Run,Run,cmd,Run Time Sensor,,Run;Sensor, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Run Request,Run Request,cmd,Run Request Command,,Run;Command, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Schedule,Schedule,cmd,Schedule Setpoint,,Command, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Zone Temp _ Zone Temp,Zone Temp _ Zone Temp,zone air temp sensor,Zone Temperature Sensor,,Temperature;Air;Sensor, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/ZTMP HI,ZTMP HI,zone air temp max,Zone Cooling Temperature Setpoint,,Temperature;Air;SetPoint;Alarm, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/ZTMP LO,ZTMP LO,zone air temp min,Zone Heating Temperature Setpoint,,Temperature;Air;SetPoint;Alarm, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/OA Temp,,,Outside Air Temperature Sensor,,Outside;Air;Temperature;Sensor, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Zone CO2,,,CO2 Sensor,,CO2;Air;Sensor;, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/ZCO2_HI,,,CO2 High Alarm,,CO2;Air;Setpoint;Alarm, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Max CO2 Level,,,CO2 High Alarm,,C02;Air;Setpoint;Alarm, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/FANCOIL ALARM,,,Fan Overload Alarm,,Fan;Alarm;, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/Zone Temp,,,Zone Temperature Sensor,,Temperature;Air;Sensor, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/RH Valve %,,,Reheat Valve Command,,Valve;Command;Reheat, CMU/SCSC Gates/Eighth Floor/VAV Room 8001 Office/PRV Command,,,Perimeter Heating Valve Command,,Valve;Command;Heat, -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/Parser.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import operator 3 | import pickle 4 | import shelve 5 | import re 6 | from collections import Counter, defaultdict, OrderedDict, deque 7 | import csv 8 | import rdflib 9 | from rdflib.namespace import OWL, RDF, RDFS 10 | from rdflib import URIRef 11 | import os 12 | 13 | def main(): 14 | Total = dict() 15 | Tagsets = dict() 16 | TagsetsToTags = dict() 17 | Equipment = dict() 18 | print "hi" 19 | BRICK = rdflib.Namespace('https://brickschema.org/schema/1.0.1/Brick#') 20 | BRICKFRAME = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 21 | GHC = rdflib.Namespace('http://cmu.edu/building/ontology/ghc#') 22 | #RDF, RDFS and OWL have already been imported in the library initializations 23 | print GHC["test"] 24 | #Initiate graph from base ttl file 25 | g = rdflib.Graph() 26 | g.bind('GHC', GHC) 27 | g.bind('brick', BRICK) 28 | # new = rdflib.Graph() 29 | 30 | #new.parse('GHCYuvraj_brick.ttl',format='ttl') 31 | # g.parse('../BuildingSchema/Brick.ttl', format='turtle') 32 | count1 = 0 33 | count2 = 0 34 | changeablemapping = dict() 35 | with open('CMU_GHC.csv', 'rU') as DataFile: 36 | with open('CMU_AHU_OddBuildingTagSet.csv','rU') as Mapping: 37 | with open('TagSets.csv','rU') as GDocs: 38 | changeable = csv.DictReader(GDocs) 39 | for row in changeable: 40 | Value = row['Dimension'] 41 | Key = row['TagSet'] 42 | Key = re.sub(' ','_',Key) 43 | Values = Value.split('>') 44 | if (len(Values)>1): 45 | changeablemapping[Key] = Values 46 | # print Values 47 | reader = csv.DictReader(Mapping) 48 | for row in reader: 49 | #print row['Bas1'], row['TagSet'], row['Tags'] 50 | BasTag = row['Bas1'] 51 | ListBasTag = BasTag.split('/') 52 | length = len(ListBasTag) 53 | Key = ListBasTag[length-1] 54 | # print Key 55 | x=row['TagSet'] 56 | NewX = re.sub(' ','_',x) 57 | Key = re.sub(' ','_',Key) 58 | # print NewX 59 | Tagsets[Key] = NewX 60 | Tags = row['Tags'] 61 | listTags = Tags.split(';') 62 | TagsetsToTags[NewX]=listTags 63 | if(NewX in changeablemapping.keys()): 64 | # print "1" 65 | pass 66 | else: 67 | print "2",NewX 68 | # print ListBasTag 69 | MapReader = csv.reader(Mapping, delimiter=' ',quotechar='|') 70 | # for row in MapReader: 71 | # print row 72 | reader = csv.DictReader(DataFile) 73 | # g.add((GHC['GHC_HVAC'],RDF.type,OWL.NamedIndividual)) 74 | # g.add((GHC['GHC_HVAC'],RDF.type,BRICK['HVAC'])) 75 | for row in reader: 76 | New = row['bas_raw'] 77 | ListBasTag = New.split('/') 78 | length = len(ListBasTag) 79 | Key = ListBasTag[length-1] 80 | Key = re.sub(' ','_',Key) 81 | y=0 82 | if('Parking' in ListBasTag[2]): 83 | y=1 84 | 85 | NewKey = ListBasTag[1]+'/'+ListBasTag[3+y]+'/'+Key 86 | NewKey = re.sub(' ','_',NewKey) 87 | x = GHC[NewKey] 88 | # g.add((Key,RDF.type,OWL.NamedIndividual)) 89 | # g.add((Key,RDF.type,BRICK[Tagsets[key]])) 90 | # print Key 91 | Equip = "" 92 | BelongsTo = "" 93 | if Key in Tagsets: 94 | Total[Key]=1 95 | count1+=1 96 | g.add((x,RDF.type,OWL.NamedIndividual)) 97 | g.add((x,RDF.type,BRICK[Tagsets[Key]])) 98 | location = "" 99 | for i in range(0,3+y): 100 | location=location+ListBasTag[i] 101 | 102 | location = re.sub(' ','_',location) 103 | g.add((GHC[location],RDF.type,OWL.NamedIndividual)) 104 | g.add((GHC[location],RDF.type,BRICK["Location"])) 105 | # g.add((x,BRICK.hasLocation,GHC[location])) 106 | if 'AHU' in ListBasTag[3+y]: 107 | Equip="AHU" 108 | elif 'VAV' in ListBasTag[3+y] or 'FSB' in ListBasTag[3+y]: 109 | # print ListBasTag[3+y] 110 | Equip="VAV" 111 | elif 'CRAC' in ListBasTag[3+y]: 112 | Equip="CRAC" 113 | elif 'FCU' in ListBasTag[3+y]: 114 | # print "HELLO" 115 | Equip="Fan_Coil_Unit" 116 | else: 117 | #print ListBasTag[3+y],NewKey 118 | if('Usage' in NewKey or 'Peak' in NewKey): 119 | Equip = "Meter" 120 | else: 121 | pass 122 | #print NewKey 123 | # mapping = changeablemapping[Tagsets[Key]] 124 | # if(len(mapping) == 4): 125 | # Equip = re.sub(' ','_',mapping[3]) 126 | # BelongsTo ="" 127 | # if(len(mapping) == 3): 128 | # Equip = re.sub(' ','_',mapping[2]) 129 | # BelongsTo = re.sub(' ','_',mapping[1]) 130 | # if(len(mapping) > 4): 131 | # Equip = re.sub(' ','_',mapping[4]) 132 | # BelongsTo = re.sub(' ','_',mapping[3]) 133 | 134 | # LowestEquip = mapping[len(mapping)-1] 135 | # NewEquipment = ListBasTag[1]+'/'+ListBasTag[3+y]+'/'+Equip 136 | # NewBelongs = ListBasTag[1]+'/'+ListBasTag[3+y]+'/'+BelongsTo 137 | # NewEquipment = re.sub(' ','_',NewEquipment) 138 | # NewBelong = re.sub(' ','_',NewBelongs) 139 | 140 | blank = re.sub(' ','_',ListBasTag[3+y]) 141 | # print changeablemapping[Tagsets[Key]], Key 142 | # # print blank, ListBasTag[3+y] 143 | # NewEquip = NewEquipment 144 | # print NewBelong, NewEquip, x 145 | if not (blank in Equipment) and not 'Interface' in ListBasTag[3+y] and Equip!="": 146 | 147 | Equipment[blank] = 1 148 | g.add((GHC[blank],RDF.type, OWL.NamedIndividual)) 149 | g.add((GHC[blank],RDF.type, BRICK[Equip])) 150 | if(Equip != "Meter" and Equip != "AHU"): 151 | number = re.search('[0-9]+',blank) 152 | floor = number.group()[0] 153 | g.add((GHC[floor+"Floor"], RDF.type, BRICK["Floor"])) 154 | g.add((GHC[blank+"Room"], BRICKFRAME.hasPart, GHC[blank+"Room"])) 155 | g.add((GHC[blank+"Room"], RDF.type, OWL.NamedIndividual)) 156 | g.add((GHC[blank+"Room"], RDF.type, BRICK["Room"])) 157 | if(Equip != "FCU"): 158 | g.add((GHC[blank+"Zone"], RDF.type, OWL.NamedIndividual)) 159 | g.add((GHC[blank+"Zone"], RDF.type, BRICK["HVAC_Zone"])) 160 | g.add((GHC[blank+"Zone"], BRICKFRAME.hasPoint, GHC[blank+"Room"])) 161 | g.add((GHC[blank+"Room"], BRICKFRAME.isPointOf, GHC[blank+"Zone"])) 162 | g.add((GHC[blank], BRICKFRAME.feeds, GHC[blank+"Zone"])) 163 | g.add((GHC[blank], BRICKFRAME.feeds, GHC[blank+"Room"])) 164 | g.add((GHC[blank+"Room"], BRICKFRAME.isFedBy, GHC[blank])) 165 | g.add((GHC[blank+"Zone"], BRICKFRAME.isFedBy, GHC[blank])) 166 | 167 | g.add((x, BRICKFRAME.isLocatedIn, GHC[blank+"Room"])) 168 | g.add((GHC[blank+"Room"], BRICKFRAME.contains, x)) 169 | 170 | # g.add((GHC[blank],BRICH.isLocatedIn,GHC[location])) 171 | # if not(NewBelong in Equipment): 172 | # g.add((GHC[NewBelong],RDF.type, OWL.NamedIndividual)) 173 | # g.add((GHC[NewBelong],RDF.type,BRICK[BelongsTo])) 174 | # Equipment[NewBelong]=1 175 | # g.add((GHC[NewEquip],BRICK.hasLocation,GHC[location])) 176 | # print NewBelong, NewEquip 177 | 178 | # g.add((GHC[NewEquip],BRICK.isPartOf,GHC[NewBelong])) 179 | # g.add((GHC[NewEquip],BRICK.hasLocation, GHC[location])) 180 | if(Equip !=""): 181 | g.add((GHC[blank], BRICKFRAME.hasPoint, x)) 182 | g.add((GHC[blank+"Room"],BRICKFRAME.hasPoint,x)) 183 | print x 184 | g.add((x, BRICKFRAME.isPointOf, GHC[blank])) 185 | g.add((x, BRICKFRAME.isPointOf, GHC[blank+"Room"])) 186 | # if Equip == "": 187 | # g.add((GHC['GHC_HVAC'],BRICK.hasPoint,x)) 188 | 189 | 190 | else: 191 | Total[Key]=1 192 | # print Key 193 | count2+=1 194 | # print Key 195 | # if ('AHU' in ListBasTag[3]): 196 | # print "3",ListBasTag[3] 197 | # if ('AHU' in ListBasTag[4]): 198 | # print "4",ListBasTag[4] 199 | for item in TagsetsToTags.keys(): 200 | x = BRICK[item] 201 | for value in TagsetsToTags[item]: 202 | g.add((x,BRICKFRAME.hasTag,BRICK[value])) 203 | with open('AHURelations.csv', 'rU') as relations: 204 | reader = csv.DictReader(relations) 205 | for row in reader: 206 | new = re.sub('_','-',row['First']) 207 | g.add((GHC[new+'_I'],BRICKFRAME.feeds,GHC[row['Third']])) 208 | 209 | # g.add((GHC["AHU-1_Zone-Temperature"],RDF.type,OWL.NamedIndividual)) 210 | if((BRICK["Run_Request"],None,None) in g): 211 | print "Hi" 212 | # g.add((GHC["AHU-1_Zone-Temperature"],RDF.type,BRICK["Zone_Temp"])) 213 | # g.add((GHC["VAV1"], BRICK.hasPoint, GHC["AHU-1_Zone-Temperature"])) 214 | g.serialize(destination='GHC_brick.ttl', format='turtle') 215 | print count1 216 | print count2 217 | print len(Total.keys()) 218 | 219 | main(); 220 | -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/README: -------------------------------------------------------------------------------- 1 | 'CMU_GHC.csv' contains the original BAS tags, point types and renamed Haystack tags. 2 | 3 | These BAS tags are used in the Gates Center for Computer Science and Hillman Center for Future Technology, which is a 217,000 sq.ft. facility with nine floors, built in 2009 at Carnegie Mellon University, Pittsburgh, Pennsylvania, USA. It contains approximately 310 offices, 11 conference rooms, 32 laboratories and a number of other spaces. 4 | 5 | Point types are extracted from the last suffix part of the BAS tags. 6 | 7 | Haystack tags are generated based on the point types. 8 | -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/archive/AHURelations_raw.csv: -------------------------------------------------------------------------------- 1 | AHU_12,feeds,VAV_Room_7723 2 | AHU_10,feeds,VAV_Room_9203_Office 3 | AHU_11,feeds,VAV_Room_7219_Office 4 | AHU_8,feeds,VAV_Room_4205_Office 5 | AHU_10,feeds,VAV_Room_8133_Office 6 | AHU_12,feeds,VAV_Room_7517 7 | AHU_10,feeds,VAV_Room_8122_Office 8 | AHU_9,feeds,VAV_Room_7027_Admin_Office 9 | AHU_8,feeds,VAV_Room_3101_Cafe_-_East_Wall 10 | AHU_7,feeds,VAV_Room_6115_Conference_Slave 11 | AHU_12,feeds,VAV_Room_6416 12 | AHU_12,feeds,VAV_Room_5721 13 | AHU_12,feeds,VAV_Room_5713 14 | AHU_12,feeds,VAV_Room_7707 15 | AHU_12,feeds,VAV_Room_5413 16 | AHU_4,feeds,VAV_Room_2102 17 | AHU_9,feeds,VAV_Room_6025_Office 18 | AHU_12,feeds,VAV_Room_7609 19 | AHU_12,feeds,VAV_Room_6413 20 | AHU_8,feeds,VAV_Room_4126_Office 21 | AHU_9,feeds,VAV_Corridor_6200 22 | AHU_9,feeds,VAV_Room_8107_Office 23 | AHU_9,feeds,VAV_Room_8008_Office 24 | AHU_9,feeds,VAV_Room_6011_Storage 25 | AHU_9,feeds,VAV_Room_8108_Office 26 | AHU_10,feeds,VAV_Room_7111_Office 27 | AHU_12,feeds,VAV_Room_5505 28 | AHU_12,feeds,VAV_Room_7401 29 | AHU_11,feeds,VAV_Room_9108_Office 30 | AHU_9,feeds,VAV_Room_9005_Office 31 | AHU_9,feeds,VAV_Room_7004_Office 32 | AHU_9,feeds,VAV_Room_8217_Office 33 | AHU_4,feeds,VAV_Room_2107 34 | AHU_12,feeds,VAV_Room_5407 35 | AHU_10,feeds,VAV_Room_8229_Office 36 | AHU_12,feeds,VAV_Room_5707 37 | AHU_9,feeds,VAV_Room_8009_Office 38 | AHU_12,feeds,VAV_Room_6505 39 | AHU_10,feeds,VAV_Room_7121_Office 40 | AHU_8,feeds,VAV_Room_5007_Office 41 | AHU_11,feeds,VAV_Room_7207_Office 42 | AHU_12,feeds,VAV_Room_7709 43 | AHU_9,feeds,VAV_Room_7021_Admin_Office 44 | AHU_11,feeds,VAV_Room_6215_Office 45 | AHU_8,feeds,VAV_Room_4102_Classroom 46 | AHU_10,feeds,VAV_Corridor_8100_Central 47 | AHU_9,feeds,VAV_Room_9004_Office 48 | AHU_9,feeds,VAV_Room_8219_Office 49 | AHU_10,feeds,VAV_Room_7227_Office 50 | AHU_12,feeds,VAV_Room_7416 51 | AHU_9,feeds,VAV_Room_6012_Open_Project_Space 52 | AHU_12,feeds,VAV_Room5510 53 | AHU_10,feeds,VAV_Room_6113_T.D._Office 54 | AHU_12,feeds,VAV_Corr_5700_East 55 | AHU_10,feeds,VAV_Room_9231_Office 56 | AHU_10,feeds,VAV_Room_7224_Project 57 | AHU_8,feeds,VAV_Room_4124_Office 58 | AHU_8,feeds,VAV_Corridor_4100_Northwest 59 | AHU_12,feeds,VAV_Room_6715 60 | AHU_9,feeds,VAV_Room_9007_Office 61 | AHU_8,feeds,VAV_Room_4103_Office 62 | AHU_10,feeds,VAV_Corridor_9100_West 63 | AHU_12,feeds,VAV_Room_6401 64 | AHU_9,feeds,VAV_Room_6013_Office 65 | AHU_10,feeds,VAV_Room_9208_Project_Room 66 | AHU_4,feeds,VAV_Room_2111 67 | AHU_12,feeds,VAV_Room_4405 68 | AHU_10,feeds,VAV_Room_9113_Office 69 | AHU_12,feeds,VAV_Room_6511 70 | AHU_12,feeds,VAV_Room_6509 71 | AHU_11,feeds,VAV_Room_7208_Project 72 | AHU_12,feeds,VAV_Room7407 73 | AHU_12,feeds,VAV_Room_6405 74 | AHU_9,feeds,VAV_Room_6017_Office 75 | AHU_12,feeds,VAV_Room_5511 76 | AHU_10,feeds,VAV_Room_7114_Project 77 | AHU_11,feeds,VAV_Room_7218_Storage 78 | AHU_11,feeds,VAV_Room_6221_Office 79 | AHU_9,feeds,VAV_Room_8025_Open_Project 80 | AHU_4,feeds,VAV_Room_1106 81 | AHU_10,feeds,VAV_Room_9114_Office 82 | AHU_11,feeds,VAV_Room_6210_Open_Project_Space 83 | AHU_9,feeds,VAV_Room_8017_Office 84 | AHU_12,feeds,VAV_Room_6507 85 | AHU_12,feeds,VAV_Room_5503 86 | AHU_10,feeds,VAV_Room_7115_Office 87 | AHU_10,feeds,VAV_Room_7119_Office 88 | AHU_12,feeds,VAV_Room_6415 89 | AHU_9,feeds,VAV_Room_8206_Copy_Room 90 | AHU_9,feeds,VAV_Room_8007_Office 91 | AHU_9,feeds,VAV_Room_8002_Office 92 | AHU_9,feeds,VAV_Room_8003_Office 93 | AHU_10,feeds,VAV_Room_9233_Future_Use 94 | AHU_10,feeds,VAV_Room_6101E_Collaborative_Common 95 | AHU_7,feeds,VAV_Room_6115_Conference_Master 96 | AHU_7,feeds,VAV_Room_6121_Conference_Room 97 | AHU_12,feeds,VAV_Room_5703 98 | AHU_12,feeds,VAV_Room7603 99 | AHU_10,feeds,VAV_Room_9200_Future_Use 100 | AHU_12,feeds,VAV_Room_6603 101 | AHU_12,feeds,VAV_Room_7701 102 | AHU_10,feeds,VAV_Room_9127_Office 103 | AHU_12,feeds,VAV_Room_5723 104 | AHU_9,feeds,VAV_Room_7003_Office 105 | AHU_4,feeds,VAV_Room_2109 106 | AHU_10,feeds,VAV_Room_8120_Office 107 | AHU_9,feeds,VAV_Room_8205_Office 108 | AHU_8,feeds,VAV_Room_5003_Office 109 | AHU_10,feeds,VAV_Room_9125_Office 110 | AHU_9,feeds,VAV_Room_9012_Open_Project_Space 111 | AHU_4,feeds,VAV_Room_2110 112 | AHU_12,feeds,VAV_Room_6607 113 | AHU_8,feeds,VAV_Corridor_4100_North 114 | AHU_9,feeds,VAV_Room_8001_Office 115 | AHU_8,feeds,VAV_Room_4113_Office 116 | AHU_12,feeds,VAV_Room_5711 117 | AHU_10,feeds,VAV_Room_7122_Storage 118 | AHU_12,feeds,VAV_Room_7403 119 | AHU_4,feeds,VAV_Room2101 120 | AHU_10,feeds,VAV_Room_9205_Office 121 | AHU_12,feeds,VAV_Room_6411 122 | AHU_10,feeds,VAV_Corridor_9200_North 123 | AHU_12,feeds,VAV_Room_5506_Open_Project 124 | AHU_12,feeds,VAV_Room_7601 125 | AHU_9,feeds,VAV_Room_6203_Office 126 | AHU_9,feeds,VAV_Room_7017_Admin_Office 127 | AHU_10,feeds,VAV_Room_8129_Office 128 | AHU_8,feeds,VAV_Room_4201_Office 129 | AHU_8,feeds,VAV_Room_3805_E.E.C. 130 | AHU_12,feeds,VAV_Room_5414 131 | AHU_10,feeds,VAV_Room_8228_Project 132 | AHU_3,feeds,VAV_Room_4211_Classroom 133 | AHU_10,feeds,VAV_Room_9227_Office 134 | AHU_12,feeds,VAV_Room_6409 135 | AHU_12,feeds,VAV_Room_4411 136 | AHU_12,feeds,VAV_Room_7501 137 | AHU_9,feeds,VAV_Room_6019_Office 138 | AHU_9,feeds,VAV_Room_8215_Office 139 | AHU_9,feeds,VAV_Room_6027_Office 140 | AHU_9,feeds,VAV_Room_7001_Office 141 | AHU_12,feeds,VAV_Room_6713 142 | AHU_10,feeds,VAV_Room_9115_Conference_Room 143 | AHU_10,feeds,VAV_Room_7117_Office 144 | AHU_11,feeds,VAV_Room_9110_Office 145 | AHU_10,feeds,VAV_Room_9221_Office 146 | AHU_10,feeds,VAV_Corridor_6100 147 | AHU_12,feeds,VAV_Room_6501 148 | AHU_9,feeds,VAV_Room_9013_Office 149 | AHU_11,feeds,VAV_Room_7300_Reception 150 | AHU_12,feeds,VAV_Room_5412_5418_5716 151 | AHU_3,feeds,VAV_Room_4215_Classroom 152 | AHU_8,feeds,VAV_Room_4107_Office 153 | AHU_8,feeds,VAV_Room_5001_Office 154 | AHU_9,feeds,VAV_Room_6010_Office 155 | AHU_4,feeds,VAV_Room_2108 156 | AHU_8,feeds,VAV_Room_5113_Dean_Office 157 | AHU_10,feeds,VAV_Room_7225_Office 158 | AHU_12,feeds,VAV_Room_5701 159 | AHU_12,feeds,VAV_Room_6705 160 | AHU_10,feeds,VAV_Room_8231_Office 161 | AHU_12,feeds,VAV_Room_6503 162 | AHU_12,feeds,VAV_Corridor_4801 163 | AHU_10,feeds,VAV_Room_9210_Open_Project_Space 164 | AHU_9,feeds,VAV_Room_8010_Office 165 | AHU_8,feeds,VAV_Room_4007_Office 166 | AHU_11,feeds,VAV_Room_5000_Study_Carrell_Lobby 167 | AHU_10,feeds,VAV_Room_6105_Reception_Mail 168 | AHU_10,feeds,VAV_Room_8200_Future_Use 169 | AHU_12,feeds,VAV_Room_7409 170 | AHU_12,feeds,VAV_Room_7515 171 | AHU_8,feeds,VAV_Room_5119_Dean_Suite 172 | AHU_9,feeds,VAV_Room_8013_Office 173 | AHU_11,feeds,VAV_Corridor_7300 174 | AHU_9,feeds,VAV_Room_6001_Office 175 | AHU_8,feeds,VAV_Room_5009_Kitchenette 176 | AHU_11,feeds,VAV_Room_9103_Office 177 | AHU_9,feeds,VAV_Room_7025_Admin_Office 178 | AHU_9,feeds,VAV_Room_6007_Office 179 | AHU_9,feeds,VAV_Room_7002_Office 180 | AHU_11,feeds,VAV_Room_6219_Office 181 | AHU_11,feeds,VAV_Room_9101_Office 182 | AHU_11,feeds,VAV_Room_7200_Future_Use 183 | AHU_11,feeds,VAV_Room_7105_Office 184 | AHU_12,feeds,VAV_Room_7711 185 | AHU_9,feeds,VAV_Room_7023_Admin_Office 186 | AHU_10,feeds,VAV_Room_9206_Copy_Room 187 | AHU_9,feeds,VAV_Room_8014_Open_Project 188 | AHU_9,feeds,VAV_Room_8006_Office 189 | AHU_9,feeds,VAV_Room_9019_Office 190 | AHU_10,feeds,VAV_Room_7110_Office 191 | AHU_10,feeds,VAV_Corridor_9100_North 192 | AHU_12,feeds,VAV_Room_7715 193 | AHU_12,feeds,VAV_Room_7507 194 | AHU_12,feeds,VAV_Room_6717 195 | AHU_10,feeds,VAV_Room_7221_Office 196 | AHU_10,feeds,VAV_Room_8113_Office 197 | AHU_8,feeds,VAV_Corridor_3200 198 | AHU_9,feeds,VAV_Room_8101_Office 199 | AHU_9,feeds,VAV_Room_9009_Office 200 | AHU_12,feeds,VAV_Room_6404 201 | AHU_12,feeds,VAV_Room_6417 202 | AHU_10,feeds,VAV_Room_9120_Office 203 | AHU_12,feeds,VAV_Room_7404 204 | AHU_8,feeds,VAV_Room_5013_Admin_Office 205 | AHU_9,feeds,VAV_Room_6008_Office 206 | AHU_9,feeds,VAV_Room_8019_Office 207 | AHU_9,feeds,VAV_Room_8221_Office 208 | AHU_9,feeds,VAV_Room_6006_Office 209 | AHU_9,feeds,VAV_Room_9023_Office 210 | AHU_8,feeds,VAV_Room_4214_Storage 211 | AHU_10,feeds,VAV_Room_9219_Office 212 | AHU_9,feeds,VAV_Room_8021_Office 213 | AHU_10,feeds,VAV_Room_8115_Conference 214 | AHU_9,feeds,VAV_Room_7011_Project 215 | AHU_8,feeds,VAV_Room_3201_Project 216 | AHU_9,feeds,VAV_Corridor_8800 217 | AHU_11,feeds,VAV_Room_6220_Project_Room 218 | AHU_12,feeds,VAV_Room_5509 219 | AHU_11,feeds,VAV_Room_7203_Office 220 | AHU_10,feeds,VAV_Room_9107_Office 221 | AHU_8,feeds,VAV_Room_4000_Bridge 222 | AHU_11,feeds,VAV_Room_5208_Conference_Room 223 | AHU_10,feeds,VAV_Room_9232_Project_Room 224 | AHU_10,feeds,VAV_Room_7107W__Project 225 | AHU_8,feeds,VAV_Room_5109_Admin_Office 226 | AHU_9,feeds,VAV_Room_6003_Office 227 | AHU_12,feeds,VAV_Room_5519 228 | AHU_9,feeds,VAV_Room_8225_Office_Slave 229 | AHU_9,feeds,VAV_Room_7010_Office 230 | AHU_9,feeds,VAV_Room_8208_Project 231 | AHU_9,feeds,VAV_Room_9015_Office 232 | AHU_11,feeds,VAV_Corridor_7200_South 233 | AHU_12,feeds,VAV_Room5405 234 | AHU_8,feeds,VAV_Room_4111_Office 235 | AHU_10,feeds,VAV_Room_8116_Office 236 | AHU_10,feeds,VAV_Room_9126_Project_Room 237 | AHU_9,feeds,VAV_Room_9011_Office 238 | AHU_12,feeds,VAV_Room5411 239 | AHU_12,feeds,VAV_Room_5717 240 | AHU_10,feeds,VAV_Room_7123_Office 241 | AHU_8,feeds,VAV_Room_5105_Admin_Office 242 | AHU_9,feeds,VAV_Room_8223_Office_Master 243 | AHU_12,feeds,VAV_Room_6407 244 | AHU_12,feeds,VAV_Room_7703 245 | AHU_12,feeds,VAV_Room_7719 246 | AHU_12,feeds,VAV_Room_6403 247 | AHU_8,feeds,VAV_Room_5005_Office 248 | AHU_10,feeds,VAV_Room_6109_Project_Room 249 | AHU_11,feeds,VAV_Room_6213_Office 250 | AHU_11,feeds,VAV_Room_7108_Office 251 | AHU_8,feeds,VAV_Room_3101_Cafe_-_North_Wall 252 | AHU_12,feeds,VAV_Room6513 253 | AHU_8,feeds,VAV_Room_4117_Office 254 | AHU_12,feeds,VAV_Room_7503 255 | AHU_12,feeds,VAV_Room_6711 256 | AHU_9,feeds,VAV_Room_7009_Office 257 | AHU_12,feeds,VAV_Room_6604 258 | AHU_12,feeds,VAV_Room5513 259 | AHU_12,feeds,VAV_Room7513 260 | AHU_9,feeds,VAV_Room_8023_Office 261 | AHU_12,feeds,VAV_Room_5515 262 | AHU_12,feeds,VAV_Room_7405 263 | AHU_9,feeds,VAV_Room_9001_Reading_Room 264 | AHU_10,feeds,VAV_Room_8200_Open_Project 265 | AHU_11,feeds,VAV_Room_9022_Project_Room 266 | AHU_12,feeds,VAV_Room_6414 267 | AHU_9,feeds,VAV_Room_7007_Office 268 | AHU_10,feeds,VAV_Room_6111_Project_Room 269 | AHU_8,feeds,VAV_Room_4003_Office 270 | AHU_8,feeds,VAV_Room_5111_Admin_Office 271 | AHU_12,feeds,VAV_Room6412_6418_6716 272 | AHU_12,feeds,VAV_Room_7509 273 | AHU_8,feeds,VAV_Room_3101_Cafe_-_Northwest_Wall 274 | AHU_10,feeds,VAV_Room_9225_Office 275 | AHU_12,feeds,VAV_Room7411 276 | AHU_4,feeds,VAV_Room_2105 277 | AHU_9,feeds,VAV_Room_9021_Office 278 | AHU_8,feeds,VAV_Corridor_5300_West 279 | AHU_9,feeds,VAV_Room_6207_Office 280 | AHU_8,feeds,VAV_Corridor_5100 281 | AHU_10,feeds,VAV_Room_8127_Office 282 | AHU_8,feeds,VAV_Corridor_5300_North 283 | AHU_9,feeds,VAV_Room_7012_Project_Space 284 | AHU_12,feeds,VAV_Room_7511 285 | AHU_8,feeds,VAV_Room_4101_Classroom 286 | AHU_10,feeds,VAV_Corridor_9200_South 287 | AHU_9,feeds,VAV_Room_8102_Conference 288 | AHU_12,feeds,VAV_Room_5404 289 | AHU_12,feeds,VAV_Room_7717 290 | AHU_10,feeds,VAV_Room_9230_Project_Room 291 | AHU_9,feeds,VAV_Room_7006_Office 292 | AHU_11,feeds,VAV_Room_5209_Study_Carrells 293 | AHU_8,feeds,VAV_Room_5011_Admin_Office 294 | AHU_9,feeds,VAV_Room_8011_Office 295 | AHU_12,feeds,VAV_Room_7413 296 | AHU_11,feeds,VAV_Room_6223_Office 297 | AHU_9,feeds,VAV_Room_6021_Office 298 | AHU_11,feeds,VAV_Room_6225_Office 299 | AHU_8,feeds,VAV_Room_5103_Admin_Office 300 | AHU_11,feeds,VAV_Room_7213_Office 301 | AHU_11,feeds,VAV_Room_7205_Office 302 | AHU_10,feeds,VAV_Room_8112_Office 303 | AHU_12,feeds,VAV_Room_5409 304 | AHU_10,feeds,VAV_Room_9207_Office 305 | AHU_11,feeds,VAV_Room_6214_Storage 306 | AHU_12,feeds,VAV_Room_5416_Open_Project_Space 307 | AHU_9,feeds,VAV_Room_8218_Storage 308 | AHU_9,feeds,VAV_Room_7005_Office 309 | AHU_9,feeds,VAV_Room_8106_Office 310 | AHU_10,feeds,VAV_Room_9229_Office 311 | AHU_10,feeds,VAV_Room_7113_Office 312 | AHU_7,feeds,VAV_Room_6119_Kitchenette 313 | AHU_10,feeds,VAV_Room_8118_Office 314 | AHU_12,feeds,VAV_Room_7415 315 | AHU_11,feeds,VAV_Corridor_5200_Central 316 | AHU_10,feeds,VAV_Room_9123_Office 317 | AHU_12,feeds,VAV_Room_5401 318 | AHU_10,feeds,VAV_Room_6102_Kitchenette 319 | AHU_9,feeds,VAV_Room_8005_Office 320 | AHU_12,feeds,VAV_Room_7705 321 | AHU_12,feeds,VAV_Room7721 322 | AHU_9,feeds,VAV_Room_8109_Office 323 | AHU_9,feeds,VAV_Room_6004_Office 324 | AHU_10,feeds,VAV_Room_9116 325 | AHU_12,feeds,VAV_Room7605 326 | AHU_12,feeds,VAV_Room_7607 327 | AHU_12,feeds,VAV_Room_4837 328 | AHU_3,feeds,VAV_Room_5222_Classroom 329 | AHU_8,feeds,VAV_Room_4005_Office 330 | AHU_9,feeds,VAV_Room_6005_Office 331 | AHU_10,feeds,VAV_Room_9111_Office 332 | AHU_12,feeds,VAV_Room_5415 333 | AHU_12,feeds,VAV_Room7412 334 | AHU_12,feeds,VAV_Room6601 335 | AHU_8,feeds,VAV_Room_4105_Office 336 | AHU_8,feeds,VAV_Room_5117_Conference 337 | AHU_9,feeds,VAV_Room_9017_Office 338 | AHU_12,feeds,VAV_Room_5419 339 | AHU_9,feeds,VAV_Room_6029_Office 340 | AHU_9,feeds,VAV_Room_8203_Office 341 | AHU_12,feeds,VAV_Room_5501 342 | AHU_10,feeds,VAV_Room_8114_Office 343 | AHU_12,feeds,VAV_Room_7713 344 | AHU_9,feeds,VAV_Room_6002_Project_Room 345 | AHU_11,feeds,VAV_Room_9112_Office 346 | AHU_10,feeds,VAV_Corridor_6300_to_Hillman 347 | AHU_10,feeds,VAV_Room_9118_Office 348 | AHU_12,feeds,VAV_Room_5403 349 | AHU_8,feeds,VAV_Room_4115_Office 350 | AHU_10,feeds,VAV_Room_8227_Office 351 | AHU_10,feeds,VAV_Room_6107_Copy_Room 352 | AHU_12,feeds,VAV_Room_5516 353 | AHU_9,feeds,VAV_Room_8018_Project 354 | AHU_9,feeds,VAV_Room_8211_Office_Slave 355 | AHU_8,feeds,VAV_Room_4203_Office 356 | AHU_12,feeds,VAV_Room_5507 357 | AHU_8,feeds,VAV_Room_4109_Office 358 | AHU_10,feeds,VAV_Room_7223_Office 359 | AHU_9,feeds,VAV_Room_8015_Office 360 | AHU_10,feeds,VAV_Room_7127_Office 361 | AHU_12,feeds,VAV_Room_5417 362 | AHU_9,feeds,VAV_Room_9003_Office 363 | AHU_10,feeds,VAV_Room_8125_Office 364 | AHU_11,feeds,VAV_Room_9105_Office 365 | AHU_10,feeds,VAV_Room_9223_Office 366 | AHU_11,feeds,VAV_Room_6217_Office 367 | AHU_9,feeds,VAV_Room_8110_Office 368 | AHU_12,feeds,VAV_Room_7505 369 | AHU_10,feeds,VAV_Room_6101W_Collaborative_Common 370 | AHU_7,feeds,VAV_Room_6117_Storage 371 | AHU_9,feeds,VAV_Room_7015_Lobby 372 | AHU_10,feeds,VAV_Room_7129_Office 373 | AHU_11,feeds,VAV_Room_7217_Office 374 | AHU_8,feeds,VAV_Room_4001_Office 375 | AHU_12,feeds,VAV_Room_7414 376 | AHU_9,feeds,VAV_Room_6205_Office 377 | AHU_11,feeds,VAV_Room_7215_Office 378 | AHU_12,feeds,VAV_Room_5719 379 | AHU_12,feeds,VAV_Room_6515 380 | AHU_8,feeds,VAV_Room_5107_Admin_Office 381 | AHU_10,feeds,VAV_Room_7125_Office 382 | AHU_8,feeds,VAV_Room_3101_Cafe_-_South_Wall 383 | AHU_12,feeds,VAV_Room_6703 384 | AHU_12,feeds,VAV_Room_6701 385 | AHU_9,feeds,VAV_Room_6023_Office 386 | AHU_11,feeds,VAV_Room_7103_Project 387 | AHU_4,feeds,VAV_Room_1102 388 | AHU_8,feeds,VAV_Room_4122_Office 389 | AHU_10,feeds,VAV_Room_7107E_Project 390 | AHU_9,feeds,VAV_Room_8103_Office 391 | AHU_11,feeds,VAV_Room_9025_Open_Project_Space 392 | AHU_10,feeds,VAV_Room_8111_Office 393 | AHU_9,feeds,VAV_Room_8207_Office 394 | AHU_10,feeds,VAV_Room_8123_Office 395 | AHU_9,feeds,VAV_Room_8214_Nursing_Room 396 | AHU_12,feeds,VAV_Room_6719 397 | AHU_12,feeds,VAV_Room_6709 398 | AHU_10,feeds,VAV_Room_9109_Office 399 | AHU_12,feeds,VAV_Room_5705 400 | AHU_11,feeds,VAV_Corridor_7200_Open_Project_Space 401 | AHU_8,feeds,VAV_Room_3101_Cafe_-_Southwest_Wall 402 | AHU_12,feeds,VAV_Room_6830 403 | AHU_10,feeds,VAV_Room_7112_Office 404 | AHU_9,feeds,VAV_Room_8211_Office_Master 405 | AHU_12,feeds,VAV_Room6609 406 | AHU_10,feeds,VAV_Corridor_8100_West 407 | AHU_9,feeds,VAV_Room_8105_Office 408 | AHU_9,feeds,VAV_Room_7008_Office 409 | AHU_9,feeds,VAV_Room_7019_Dept_Head_Office 410 | AHU_11,feeds,VAV_Corridor_5200_South 411 | AHU_10,feeds,VAV_Corridor_8200 412 | AHU_10,feeds,VAV_Corridor_7200_North 413 | AHU_11,feeds,VAV_Room_9106_Office 414 | AHU_11,feeds,VAV_Room_5214_Storage 415 | AHU_9,feeds,VAV_Room_9002_Office 416 | AHU_8,feeds,VAV_Room_5101_Work_Copy_Print 417 | AHU_8,feeds,VAV_Room_3000_Classroom 418 | AHU_11,feeds,VAV_Room_7211_Office 419 | AHU_12,feeds,VAV_Room_5517 420 | AHU_9,feeds,VAV_Room_9006_Office 421 | AHU_12,feeds,VAV_Room_6707 422 | AHU_12,feeds,VAV_Room_6605 423 | AHU_9,feeds,VAV_Room_6015_Office 424 | AHU_12,feeds,VAV_Room_5715 425 | AHU_10,feeds,VAV_Room_9129_Office 426 | AHU_9,feeds,VAV_Room_9008_Office 427 | AHU_12,feeds,VAV_Room_5709 428 | AHU_8,feeds,VAV_Corridor_4300_North 429 | AHU_8,feeds,VAV_Corridor_4300_South 430 | AHU_11,feeds,VAV_Room_6227_Office 431 | AHU_9,feeds,VAV_Room_6009_Office 432 | AHU_12,feeds,VAV_Room_5508 433 | AHU_11,feeds,VAV_Room_6211_Office 434 | -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/archive/relationship.csv: -------------------------------------------------------------------------------- 1 | First,Second,Third AHU_9,feeds,VAV_Room_8214_Nursing_Room AHU_8,feeds,VAV_Room_5009_Kitchenette AHU_9,feeds,VAV_Room_5403 AHU_9,feeds,VAV_Room_4203_Office AHU_9,feeds,VAV_Room_9015_Office AHU_9,feeds,VAV_Room_1102 AHU_9,feeds,VAV_Room_6215_Office AHU_9,feeds,VAV_Room_6117_Storage AHU_8,feeds,VAV_Room_5105_Admin_Office AHU_8,feeds,VAV_Corridor_5300_North AHU_10,feeds,VAV_Room_9223_Office AHU_9,feeds,VAV_Room_7207_Office AHU_9,feeds,VAV_Room_9002_Office AHU_9,feeds,VAV_Room_9019_Office AHU_9,feeds,VAV_Room_9017_Office AHU_9,feeds,VAV_Room7605 AHU_9,feeds,VAV_Room_7205_Office AHU_9,feeds,VAV_Room_5516 AHU_10,feeds,VAV_Room_9207_Office AHU_9,feeds,VAV_Room7603 AHU_9,feeds,VAV_Corridor_4100_Northwest AHU_9,feeds,VAV_Room_8009_Office AHU_9,feeds,VAV_Room_7111_Office AHU_9,feeds,VAV_Room_4007_Office AHU_10,feeds,VAV_Room_8228_Project AHU_9,feeds,VAV_Room_6115_Conference_Master AHU_9,feeds,VAV_Room_7707 AHU_9,feeds,VAV_Room_6019_Office AHU_10,feeds,VAV_Room_8120_Office AHU_9,feeds,VAV_Room_7221_Office AHU_9,feeds,VAV_Room_7409 AHU_10,feeds,VAV_Room_9229_Office AHU_8,feeds,VAV_Room_5101_Work_Copy_Print AHU_8,feeds,VAV_Room_5001_Office AHU_9,feeds,VAV_Room_5717 AHU_9,feeds,VAV_Room_7208_Project AHU_8,feeds,VAV_Room_5119_Dean_Suite AHU_9,feeds,VAV_Corr_5700_East AHU_9,feeds,VAV_Room_8011_Office AHU_9,feeds,VAV_Room_6012_Open_Project_Space AHU_9,feeds,VAV_Room_7123_Office AHU_9,feeds,VAV_Room_3101_Cafe_-_Southwest_Wall AHU_9,feeds,VAV_Room_4122_Office AHU_9,feeds,VAV_Room_6709 AHU_9,feeds,VAV_Room_6715 AHU_9,feeds,VAV_Room_4837 AHU_9,feeds,VAV_Room_5511 AHU_9,feeds,VAV_Room_2109 AHU_9,feeds,VAV_Room_2110 AHU_9,feeds,VAV_Room_6210_Open_Project_Space AHU_9,feeds,VAV_Corridor_6200 AHU_9,feeds,VAV_Room6601 AHU_9,feeds,VAV_Room_7112_Office AHU_9,feeds,VAV_Room_4005_Office AHU_9,feeds,VAV_Room_7019_Dept_Head_Office AHU_9,feeds,VAV_Room_6008_Office AHU_9,feeds,VAV_Room_9013_Office AHU_9,feeds,VAV_Room_7004_Office AHU_9,feeds,VAV_Room_9006_Office AHU_9,feeds,VAV_Room_2105 AHU_9,feeds,VAV_Room_7114_Project AHU_9,feeds,VAV_Room_7717 AHU_9,feeds,VAV_Corridor_4801 AHU_9,feeds,VAV_Room_4205_Office AHU_9,feeds,VAV_Room_6003_Office AHU_9,feeds,VAV_Room2101 AHU_9,feeds,VAV_Room_8109_Office AHU_9,feeds,VAV_Room_7705 AHU_9,feeds,VAV_Room_5201_Classroom AHU_9,feeds,VAV_Room_5416_Open_Project_Space AHU_9,feeds,VAV_Room_5204_Reception_Office AHU_10,feeds,VAV_Room_9203_Office AHU_9,feeds,VAV_Room_7509 AHU_10,feeds,VAV_Room_9230_Project_Room AHU_10,feeds,VAV_Room_8118_Office AHU_9,feeds,VAV_Room_4215_Classroom AHU_9,feeds,VAV_Room_7507 AHU_9,feeds,VAV_Room_2108 AHU_9,feeds,VAV_Room_7008_Office AHU_9,feeds,VAV_Room_7108_Office AHU_9,feeds,VAV_Room_4103_Office AHU_9,feeds,VAV_Room_7403 AHU_11,feeds,VAV_Corridor_5200_South AHU_9,feeds,VAV_Room_7003_Office AHU_9,feeds,VAV_Room_7012_Project_Space AHU_9,feeds,VAV_Room_3805_E.E.C. AHU_9,feeds,VAV_Room_4113_Office AHU_9,feeds,VAV_Room_5419 AHU_9,feeds,VAV_Room6412_6418_6716 AHU_9,feeds,VAV_Room_8110_Office AHU_9,feeds,VAV_Room_8102_Conference AHU_9,feeds,VAV_Room_7607 AHU_9,feeds,VAV_Room_5709 AHU_9,feeds,VAV_Room_6703 AHU_3,feeds,VAV_Room_5222_Classroom AHU_9,feeds,VAV_Room_7007_Office AHU_9,feeds,VAV_Corridor_4100_North AHU_9,feeds,VAV_Corridor_7200_North AHU_9,feeds,VAV_Room_7701 AHU_9,feeds,VAV_Room_7001_Office AHU_9,feeds,VAV_Room_7010_Office AHU_9,feeds,VAV_Room6513 AHU_9,feeds,VAV_Room_1106 AHU_9,feeds,VAV_Room_5509 AHU_9,feeds,VAV_Room_3101_Cafe_-_East_Wall AHU_9,feeds,VAV_Room_7503 AHU_9,feeds,VAV_Room_6416 AHU_9,feeds,VAV_Room_5517 AHU_10,feeds,VAV_Room_9111_Office AHU_9,feeds,VAV_Room_7110_Office AHU_9,feeds,VAV_Room_6113_T.D._Office AHU_9,feeds,VAV_Room_6501 AHU_9,feeds,VAV_Room_9001_Reading_Room AHU_10,feeds,VAV_Room_8116_Office AHU_8,feeds,VAV_Room_5111_Admin_Office AHU_8,feeds,VAV_Room_5109_Admin_Office AHU_9,feeds,VAV_Room_6221_Office AHU_9,feeds,VAV_Room_6115_Conference_Slave AHU_9,feeds,VAV_Room_7227_Office AHU_9,feeds,VAV_Room_8203_Office AHU_10,feeds,VAV_Room_9225_Office AHU_9,feeds,VAV_Room_6013_Office AHU_9,feeds,VAV_Room_6005_Office AHU_9,feeds,VAV_Room_4101_Classroom AHU_9,feeds,VAV_Room_7125_Office AHU_9,feeds,VAV_Corridor_8800 AHU_10,feeds,VAV_Corridor_9100_West AHU_9,feeds,VAV_Room_7002_Office AHU_9,feeds,VAV_Room_8008_Office AHU_9,feeds,VAV_Room_8219_Office AHU_9,feeds,VAV_Room_5505 AHU_10,feeds,VAV_Room_9118_Office AHU_11,feeds,VAV_Room_9110_Office AHU_9,feeds,VAV_Corridor_7200_Open_Project_Space AHU_9,feeds,VAV_Room_7211_Office AHU_9,feeds,VAV_Room_9004_Office AHU_9,feeds,VAV_Room_7103_Project AHU_9,feeds,VAV_Room_6004_Office AHU_9,feeds,VAV_Room_6009_Office AHU_9,feeds,VAV_Room7412 AHU_9,feeds,VAV_Room_5507 AHU_9,feeds,VAV_Room_5401 AHU_9,feeds,VAV_Room_2102 AHU_10,feeds,VAV_Room_8113_Office AHU_9,feeds,VAV_Room_7203_Office AHU_9,feeds,VAV_Room_6717 AHU_9,feeds,VAV_Room_9021_Office AHU_9,feeds,VAV_Room_4109_Office AHU_9,feeds,VAV_Room_6025_Office AHU_9,feeds,VAV_Room_8106_Office AHU_10,feeds,VAV_Room_8127_Office AHU_9,feeds,VAV_Room_5413 AHU_9,feeds,VAV_Room_8218_Storage AHU_9,feeds,VAV_Room_6719 AHU_9,feeds,VAV_Room5405 AHU_9,feeds,VAV_Room_6701 AHU_9,feeds,VAV_Room_6605 AHU_9,feeds,VAV_Room_6607 AHU_9,feeds,VAV_Room_7401 AHU_9,feeds,VAV_Room_5202_Reception AHU_8,feeds,VAV_Room_5005_Office AHU_9,feeds,VAV_Room_8211_Office_Slave AHU_10,feeds,VAV_Room_8129_Office AHU_9,feeds,VAV_Room_6417 AHU_9,feeds,VAV_Room_4117_Office AHU_9,feeds,VAV_Room_8215_Office AHU_9,feeds,VAV_Room_3101_Cafe_-_South_Wall AHU_9,feeds,VAV_Room_6407 AHU_10,feeds,VAV_Room_8200_Future_Use AHU_9,feeds,VAV_Room7721 AHU_9,feeds,VAV_Room_6007_Office AHU_8,feeds,VAV_Room_5011_Admin_Office AHU_9,feeds,VAV_Room_6207_Office AHU_9,feeds,VAV_Room_5723 AHU_11,feeds,VAV_Room_5214_Storage AHU_9,feeds,VAV_Room_7105_Office AHU_11,feeds,VAV_Room_9108_Office AHU_9,feeds,VAV_Room_7415 AHU_9,feeds,VAV_Room_5715 AHU_9,feeds,VAV_Corridor_7300 AHU_9,feeds,VAV_Room_6711 AHU_9,feeds,VAV_Room_5515 AHU_9,feeds,VAV_Room_6101E_Collaborative_Common AHU_8,feeds,VAV_Room_5013_Admin_Office AHU_9,feeds,VAV_Room_9008_Office AHU_9,feeds,VAV_Room_5407 AHU_10,feeds,VAV_Room_9109_Office AHU_9,feeds,VAV_Room_2107 AHU_9,feeds,VAV_Room_6830 AHU_10,feeds,VAV_Room_8112_Office AHU_9,feeds,VAV_Room_6023_Office AHU_9,feeds,VAV_Room_6015_Office AHU_9,feeds,VAV_Room_6505 AHU_9,feeds,VAV_Room_5701 AHU_10,feeds,VAV_Corridor_9200_North AHU_10,feeds,VAV_Room_9115_Conference_Room AHU_9,feeds,VAV_Room_7703 AHU_9,feeds,VAV_Room_4111_Office AHU_9,feeds,VAV_Room_7416 AHU_9,feeds,VAV_Room_7601 AHU_9,feeds,VAV_Room_5415 AHU_9,feeds,VAV_Room_4405 AHU_8,feeds,VAV_Corridor_5100 AHU_10,feeds,VAV_Room_9114_Office AHU_9,feeds,VAV_Room_6217_Office AHU_9,feeds,VAV_Room_8225_Office_Slave AHU_9,feeds,VAV_Room_5414 AHU_9,feeds,VAV_Room_6119_Kitchenette AHU_9,feeds,VAV_Room_7719 AHU_9,feeds,VAV_Room_6411 AHU_10,feeds,VAV_Room_9208_Project_Room AHU_9,feeds,VAV_Room_8014_Open_Project AHU_9,feeds,VAV_Room_7501 AHU_9,feeds,VAV_Room_6220_Project_Room AHU_11,feeds,VAV_Room_9101_Office AHU_9,feeds,VAV_Room_7129_Office AHU_9,feeds,VAV_Room_7006_Office AHU_9,feeds,VAV_Room_8108_Office AHU_9,feeds,VAV_Room_9005_Office AHU_9,feeds,VAV_Room_5707 AHU_8,feeds,VAV_Room_5003_Office AHU_9,feeds,VAV_Room_5519 AHU_9,feeds,VAV_Room_4003_Office AHU_10,feeds,VAV_Room_9221_Office AHU_9,feeds,VAV_Room_4115_Office AHU_9,feeds,VAV_Room_5705 AHU_10,feeds,VAV_Corridor_9200_South AHU_9,feeds,VAV_Room_6027_Office AHU_11,feeds,VAV_Room_5000_Study_Carrell_Lobby AHU_9,feeds,VAV_Room_6413 AHU_9,feeds,VAV_Room_8021_Office AHU_9,feeds,VAV_Room_8015_Office AHU_11,feeds,VAV_Room_9103_Office AHU_9,feeds,VAV_Corridor_6300_to_Hillman AHU_9,feeds,VAV_Room_8005_Office AHU_9,feeds,VAV_Room_9007_Office AHU_9,feeds,VAV_Room_9023_Office AHU_9,feeds,VAV_Room_6121_Conference_Room AHU_8,feeds,VAV_Room_5103_Admin_Office AHU_9,feeds,VAV_Room_7413 AHU_8,feeds,VAV_Corridor_5300_West AHU_9,feeds,VAV_Room_6707 AHU_10,feeds,VAV_Room_8229_Office AHU_10,feeds,VAV_Room_8200_Open_Project AHU_9,feeds,VAV_Room_6211_Office AHU_9,feeds,VAV_Room_6507 AHU_9,feeds,VAV_Room_6604 AHU_9,feeds,VAV_Room_6405 AHU_9,feeds,VAV_Room_4102_Classroom AHU_9,feeds,VAV_Room_4107_Office AHU_9,feeds,VAV_Room_6029_Office AHU_9,feeds,VAV_Room_7101_Conference AHU_11,feeds,VAV_Room_5208_Conference_Room AHU_9,feeds,VAV_Room_6219_Office AHU_9,feeds,VAV_Room_5412_5418_5716 AHU_9,feeds,VAV_Corridor_6100 AHU_10,feeds,VAV_Room_8111_Office AHU_9,feeds,VAV_Room_6403 AHU_9,feeds,VAV_Room_5206_Office AHU_9,feeds,VAV_Room6609 AHU_9,feeds,VAV_Room_5205_Classroom AHU_9,feeds,VAV_Room_5721 AHU_9,feeds,VAV_Corridor_4300_South AHU_9,feeds,VAV_Room_9009_Office AHU_9,feeds,VAV_Room_7715 AHU_9,feeds,VAV_Room_7609 AHU_8,feeds,VAV_Room_5007_Office AHU_9,feeds,VAV_Corridor_3200 AHU_9,feeds,VAV_Room_6001_Office AHU_9,feeds,VAV_Room_5501 AHU_9,feeds,VAV_Room_7713 AHU_10,feeds,VAV_Room_8227_Office AHU_9,feeds,VAV_Room_3000_Classroom AHU_9,feeds,VAV_Room7513 AHU_9,feeds,VAV_Room_4124_Office AHU_9,feeds,VAV_Room_8002_Office AHU_10,feeds,VAV_Room_8125_Office AHU_9,feeds,VAV_Room_6006_Office AHU_9,feeds,VAV_Room_3201_Project AHU_8,feeds,VAV_Room_5113_Dean_Office AHU_9,feeds,VAV_Room_8205_Office AHU_9,feeds,VAV_Room_4411 AHU_9,feeds,VAV_Room_4105_Office AHU_9,feeds,VAV_Room_8007_Office AHU_9,feeds,VAV_Room_7217_Office AHU_9,feeds,VAV_Room_5711 AHU_9,feeds,VAV_Room_7405 AHU_9,feeds,VAV_Room_6105_Reception_Mail AHU_9,feeds,VAV_Room5510 AHU_9,feeds,VAV_Room_6503 AHU_10,feeds,VAV_Corridor_8200 AHU_9,feeds,VAV_Room_7122_Storage AHU_9,feeds,VAV_Room_8001_Office AHU_9,feeds,VAV_Corridor_7200_South AHU_9,feeds,VAV_Room_6214_Storage AHU_9,feeds,VAV_Room_6017_Office AHU_9,feeds,VAV_Room_7121_Office AHU_9,feeds,VAV_Room_6203_Office AHU_10,feeds,VAV_Room_8123_Office AHU_9,feeds,VAV_Room_9012_Open_Project_Space AHU_10,feeds,VAV_Room_9210_Open_Project_Space AHU_9,feeds,VAV_Room_7200_Future_Use AHU_9,feeds,VAV_Room_7005_Office AHU_9,feeds,VAV_Room_4000_Bridge AHU_10,feeds,VAV_Room_8231_Office AHU_9,feeds,VAV_Room_6415 AHU_9,feeds,VAV_Room_7723 AHU_9,feeds,VAV_Room_7300_Reception AHU_9,feeds,VAV_Room_6109_Project_Room AHU_9,feeds,VAV_Room_8107_Office AHU_9,feeds,VAV_Room_9003_Office AHU_10,feeds,VAV_Room_9107_Office AHU_9,feeds,VAV_Room_8023_Office AHU_9,feeds,VAV_Room_7219_Office AHU_10,feeds,VAV_Room_9129_Office AHU_9,feeds,VAV_Room_7404 AHU_10,feeds,VAV_Corridor_8100_West AHU_9,feeds,VAV_Room7411 AHU_9,feeds,VAV_Room_7025_Admin_Office AHU_10,feeds,VAV_Room_9232_Project_Room AHU_9,feeds,VAV_Room_6509 AHU_9,feeds,VAV_Room_7113_Office AHU_9,feeds,VAV_Room_6223_Office AHU_9,feeds,VAV_Room_8223_Office_Master AHU_10,feeds,VAV_Room_9123_Office AHU_9,feeds,VAV_Room_4201_Office AHU_10,feeds,VAV_Room_9125_Office AHU_9,feeds,VAV_Room_5417 AHU_9,feeds,VAV_Room_9011_Office AHU_11,feeds,VAV_Room_9022_Project_Room AHU_9,feeds,VAV_Room_8211_Office_Master AHU_9,feeds,VAV_Room_7215_Office AHU_9,feeds,VAV_Room_5409 AHU_10,feeds,VAV_Room_9200_Future_Use AHU_9,feeds,VAV_Room_7515 AHU_9,feeds,VAV_Room_7027_Admin_Office AHU_9,feeds,VAV_Room_6101W_Collaborative_Common AHU_11,feeds,VAV_Room_9106_Office AHU_9,feeds,VAV_Room_7505 AHU_9,feeds,VAV_Room_7223_Office AHU_9,feeds,VAV_Room_7117_Office AHU_9,feeds,VAV_Room_2111 AHU_9,feeds,VAV_Room_6705 AHU_9,feeds,VAV_Room_7127_Office AHU_9,feeds,VAV_Room_6401 AHU_10,feeds,VAV_Room_8122_Office AHU_9,feeds,VAV_Room_8018_Project AHU_9,feeds,VAV_Room_7711 AHU_9,feeds,VAV_Room_5503 AHU_9,feeds,VAV_Room_3101_Cafe_-_Northwest_Wall AHU_10,feeds,VAV_Corridor_9100_North AHU_9,feeds,VAV_Room_8217_Office AHU_9,feeds,VAV_Room_7107W__Project AHU_9,feeds,VAV_Room_8017_Office AHU_9,feeds,VAV_Room_7119_Office AHU_9,feeds,VAV_Room_6603 AHU_9,feeds,VAV_Room_8105_Office AHU_9,feeds,VAV_Room_6227_Office AHU_9,feeds,VAV_Room_6107_Copy_Room AHU_9,feeds,VAV_Room_6409 AHU_9,feeds,VAV_Room_7021_Admin_Office AHU_11,feeds,VAV_Room_9112_Office AHU_9,feeds,VAV_Room_8006_Office AHU_10,feeds,VAV_Room_9231_Office AHU_10,feeds,VAV_Corridor_8100_Central AHU_9,feeds,VAV_Room_5719 AHU_10,feeds,VAV_Room_8115_Conference AHU_10,feeds,VAV_Room_9206_Copy_Room AHU_10,feeds,VAV_Room_9126_Project_Room AHU_9,feeds,VAV_Room_7009_Office AHU_10,feeds,VAV_Room_9120_Office AHU_11,feeds,VAV_Room_9025_Open_Project_Space AHU_9,feeds,VAV_Room_7218_Storage AHU_9,feeds,VAV_Room_7414 AHU_9,feeds,VAV_Room_7023_Admin_Office AHU_9,feeds,VAV_Room_6213_Office AHU_9,feeds,VAV_Room_6404 AHU_9,feeds,VAV_Room_8025_Open_Project AHU_9,feeds,VAV_Room7407 AHU_9,feeds,VAV_Room_5508 AHU_9,feeds,VAV_Room_7017_Admin_Office AHU_9,feeds,VAV_Room_8013_Office AHU_10,feeds,VAV_Room_9233_Future_Use AHU_9,feeds,VAV_Room_5703 AHU_9,feeds,VAV_Room_6205_Office AHU_9,feeds,VAV_Room_6225_Office AHU_9,feeds,VAV_Room_7011_Project AHU_9,feeds,VAV_Room_5404 AHU_9,feeds,VAV_Room_8010_Office AHU_10,feeds,VAV_Room_9113_Office AHU_10,feeds,VAV_Room_8114_Office AHU_9,feeds,VAV_Room_7107E_Project AHU_8,feeds,VAV_Room_5107_Admin_Office AHU_9,feeds,VAV_Room_4001_Office AHU_9,feeds,VAV_Room_4211_Classroom AHU_9,feeds,VAV_Room5513 AHU_9,feeds,VAV_Room_7517 AHU_11,feeds,VAV_Room_9105_Office AHU_9,feeds,VAV_Room_8208_Project AHU_9,feeds,VAV_Room_8206_Copy_Room AHU_9,feeds,VAV_Room_6011_Storage AHU_11,feeds,VAV_Room_5209_Study_Carrells AHU_9,feeds,VAV_Room_7213_Office AHU_10,feeds,VAV_Room_9227_Office AHU_9,feeds,VAV_Room_6021_Office AHU_10,feeds,VAV_Room_9127_Office AHU_9,feeds,VAV_Room_6111_Project_Room AHU_10,feeds,VAV_Room_9219_Office AHU_10,feeds,VAV_Room_9116 AHU_9,feeds,VAV_Room_6511 AHU_9,feeds,VAV_Room_4126_Office AHU_9,feeds,VAV_Room_8019_Office AHU_9,feeds,VAV_Room_6002_Project_Room AHU_9,feeds,VAV_Room5411 AHU_11,feeds,VAV_Corridor_5200_Central AHU_9,feeds,VAV_Corridor_4300_North AHU_9,feeds,VAV_Room_6010_Office AHU_10,feeds,VAV_Room_9205_Office AHU_9,feeds,VAV_Room_5713 AHU_9,feeds,VAV_Room_7224_Project AHU_9,feeds,VAV_Room_7225_Office AHU_9,feeds,VAV_Room_4214_Storage AHU_10,feeds,VAV_Room_8133_Office AHU_9,feeds,VAV_Room_7511 AHU_9,feeds,VAV_Room_6515 AHU_9,feeds,VAV_Room_7015_Lobby AHU_9,feeds,VAV_Room_8221_Office AHU_9,feeds,VAV_Room_5506_Open_Project AHU_9,feeds,VAV_Room_8207_Office AHU_9,feeds,VAV_Room_6414 AHU_9,feeds,VAV_Room_8101_Office AHU_9,feeds,VAV_Room_6102_Kitchenette AHU_8,feeds,VAV_Room_5117_Conference AHU_9,feeds,VAV_Room_8103_Office AHU_9,feeds,VAV_Room_7709 AHU_9,feeds,VAV_Room_7115_Office AHU_9,feeds,VAV_Room_6713 AHU_9,feeds,VAV_Room_8003_Office AHU_9,feeds,VAV_Room_3101_Cafe_-_North_Wall -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/archive/toy-representation/asset.json: -------------------------------------------------------------------------------- 1 | { 2 | "AHU": { 3 | "AHU_meta": "on hold (ahu description, consruction year etc.)", 4 | "ref_id": "uuid", 5 | "loc_ref": "uuid", 6 | "fun_ref": [ 7 | { 8 | "id": "uuid_1", 9 | "notes": "supplying air to the VAV" 10 | }, 11 | { 12 | "id": "uuid_2", 13 | "notes": "supplying air to the zone" 14 | } 15 | ], 16 | "point_ref": ["uuid1","uuid2"] 17 | }, 18 | "VAV": { 19 | "VAV_meta": "on hold", 20 | "ref_id": "uuid", 21 | "loc_ref": "uuid", 22 | "fun_ref": [ 23 | { 24 | "id": "uuid_1", 25 | "notes": "draw air from this AHU unit" 26 | } 27 | ], 28 | "point_ref": ["uuid1","uuid2"] 29 | }, 30 | "FCU": { 31 | "FCU_meta": "on hold", 32 | "ref_id": "uuid", 33 | "loc_ref": "uuid", 34 | "fun_ref": [ 35 | { 36 | "id": "uuid_1", 37 | "notes": "supplying air to this zone" 38 | } 39 | ], 40 | "point_ref": ["uuid1","uuid2"] 41 | } 42 | } -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/archive/toy-representation/location.json: -------------------------------------------------------------------------------- 1 | { 2 | "Building": { 3 | "building_meta": "on hold (building description, consruction year etc.)", 4 | "ref_id": "uuid", 5 | "structure": { 6 | "Floor1": { 7 | "floor_meta": "on hold (floor map, description, etc.)", 8 | "ref_id": "uuid", 9 | "structure": [ 10 | { 11 | "zone": "102", 12 | "zone_meta": "classroom", 13 | "ref_id": "uuid" 14 | }, 15 | { 16 | "zone": "113", 17 | "zone-meta": "office", 18 | "ref_id": "uuid" 19 | } 20 | ] 21 | }, 22 | "Floor2": { 23 | "floor_meta": "on hold (floor map, description, etc.)", 24 | "ref_id": "uuid", 25 | "structure": [ 26 | { 27 | "zone": "212", 28 | "zone_meta": "auditorium", 29 | "ref_id": "uuid" 30 | } 31 | ] 32 | } 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/archive/toy-representation/point.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "display_name": "OAT", 4 | "ref_id": "uuid", 5 | "asset_ref": "asset_uuid", 6 | "loc_ref": "loc_uuid", 7 | "category": "valve", 8 | "functionality": "outside air temperature", 9 | "acronym": "OAT", 10 | "value": "define legitimate range of values", 11 | "unit": "Fahrenheit", 12 | "IOType": "AI", 13 | "other": "..." 14 | } 15 | ] -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/archive/toy-representation/point_discussion.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildSysUniformMetadata/GroundTruth/789ff13adc7713bb7cbfd374f370d9dc72ac07ac/etc/instance_generators/GHC_CMU/archive/toy-representation/point_discussion.pdf -------------------------------------------------------------------------------- /etc/instance_generators/GHC_CMU/catalog-v001.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /etc/instance_generators/GTC_SDU/Makefile: -------------------------------------------------------------------------------- 1 | TARGETS = \ 2 | gtc_brick.ttl \ 3 | 4 | 5 | all: ${TARGETS} 6 | 7 | install: gtc_brick.ttl 8 | cp gtc_brick.ttl ../../../building_instances/ 9 | 10 | clean: 11 | rm ${TARGETS} 12 | 13 | mrproper: clean 14 | rm -f *~ 15 | 16 | 17 | gtc_brick.ttl: gtc_brickgenerator.py gtc.json gtc_vavs.json rooms.json 18 | ./gtc_brickgenerator.py 19 | 20 | -------------------------------------------------------------------------------- /etc/instance_generators/GTC_SDU/README.md: -------------------------------------------------------------------------------- 1 | # The GreenTech House / Center 2 | 3 | This directory targets [GTH](http://greentechcenter.dk) 4 | 5 | The [Makefile](Makefile) uses a [generator script](gtc_brickgenerator.py) to generate the Brick TTL file. This script uses three JSON files listing equipment and their relations: 6 | 7 | 1. [gtc.json](gtc.json) 8 | List of all exposed points. 9 | 2. [gtc_vavs.json](gtc_vavs.json) 10 | List of the equivalent of VAVs and how they are connected to the rooms and the equivalent of an AHU. 11 | 3. [rooms.json](rooms.json) 12 | List of rooms, including configuration and internal point names. 13 | 14 | The main targets of the makefile are: 15 | 16 | * `all (default)` Builds the Brick representation of the GTH building. 17 | * `install` Installs a new version of the Brick representation at [the central location](../../../building_instances/gtc_brick.ttl). 18 | 19 | -------------------------------------------------------------------------------- /etc/instance_generators/GTC_SDU/gtc_vavs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "supply valve": "-01-ZVNV-MSI", 4 | "return valve": "-01-ZVNV-MSO", 5 | "supply pressure": "-01-ZVNV-PI01", 6 | "cooling coil": "-01-ZVNV-MV01", 7 | "supply temperature": "-01-ZVNV-TI01", 8 | "rooms": [ 9 | "1.A.1", 10 | "1.A.5", 11 | "1.A.7", 12 | "1.A.9", 13 | "1.A.11", 14 | "1.F.6" 15 | ], 16 | "side": "N", 17 | "source": {"page": 2, "index": 1} 18 | }, 19 | { 20 | "supply valve": "-01-ZVSV-MSI", 21 | "return valve": "-01-ZVSV-MSO", 22 | "supply pressure": "-01-ZVSV-PI01", 23 | "cooling coil": "-01-ZVSV-MV01", 24 | "supply temperature": "-01-ZVSV-TI01", 25 | "rooms": [ 26 | "1.A.20", 27 | "1.A.22", 28 | "1.A.28A", 29 | "1.A.28B", 30 | "1.B.19" 31 | ], 32 | "side": "S", 33 | "source": {"page": 2, "index": 2} 34 | }, 35 | { 36 | "supply valve": "-01-ZVSØ-MSI", 37 | "return valve": "-01-ZVSØ-MSO", 38 | "supply pressure": "-01-ZVSØ-PI01", 39 | "cooling coil": "-01-ZVSØ-MV01", 40 | "supply temperature": "-01-ZVSØ-TI01", 41 | "rooms": [ 42 | "1.I.19", 43 | "1.K.25" 44 | ], 45 | "side": "S", 46 | "source": {"page": 2, "index": 3} 47 | }, 48 | { 49 | "supply valve": "-01-ZVNØ-MSI", 50 | "return valve": "-01-ZVNØ-MSO", 51 | "supply pressure": "-01-ZVNØ-PI01", 52 | "cooling coil": "-01-ZVNØ-MV01", 53 | "supply temperature": "-01-ZVNØ-TI01", 54 | "rooms": [ 55 | "1.H.1", 56 | "1.H.6", 57 | "1.J.5", 58 | "1.J.7", 59 | "1.J.9", 60 | "1.J.13" 61 | ], 62 | "side": "N", 63 | "source": {"page": 2, "index": 4} 64 | }, 65 | { 66 | "supply valve": "-02-ZVNV-MSI", 67 | "return valve": "-02-ZVNV-MSO", 68 | "supply pressure": "-02-ZVNV-PI01", 69 | "cooling coil": "-02-ZVNV-MV01", 70 | "supply temperature": "-02-ZVNV-TI01", 71 | "rooms": [ 72 | "2.A.1a", 73 | "2.A.1b", 74 | "2.A.11", 75 | "2.B.13", 76 | "2.F.6A" 77 | ], 78 | "side": "N", 79 | "source": {"page": 3, "index": 1} 80 | }, 81 | { 82 | "supply valve": "-02-ZVSV-MSI", 83 | "return valve": "-02-ZVSV-MSO", 84 | "supply pressure": "-02-ZVSV-PI01", 85 | "cooling coil": "-02-ZVSV-MV01", 86 | "supply temperature": "-02-ZVSV-TI01", 87 | "rooms": [ 88 | "2.A.19", 89 | "2.A.22A", 90 | "2.A.22B", 91 | "2.A.30", 92 | "2.C.30" 93 | ], 94 | "side": "S", 95 | "source": {"page": 3, "index": 2} 96 | }, 97 | { 98 | "supply valve": "-02-ZVSØ-MSI", 99 | "return valve": "-02-ZVSØ-MSO", 100 | "supply pressure": "-02-ZVSØ-PI01", 101 | "cooling coil": "-02-ZVSØ-MV01", 102 | "supply temperature": "-02-ZVSØ-TI01", 103 | "rooms": [ 104 | "2.H.30", 105 | "2.I.18A", 106 | "2.I.18B", 107 | "2.L.30" 108 | ], 109 | "side": "S", 110 | "source": {"page": 3, "index": 3} 111 | }, 112 | { 113 | "supply valve": "-02-ZVNØ-MSI", 114 | "return valve": "-02-ZVNØ-MSO", 115 | "supply pressure": "-02-ZVNØ-PI01", 116 | "cooling coil": "-02-ZVNØ-MV01", 117 | "supply temperature": "-02-ZVNØ-TI01", 118 | "rooms": [ 119 | "2.F.6B", 120 | "2.H.1A", 121 | "2.H.1B", 122 | "2.J.11", 123 | "2.J.13" 124 | ], 125 | "side": "N", 126 | "source": {"page": 3, "index": 4} 127 | }, 128 | { 129 | "supply valve": "-03-ZVNV-MSI", 130 | "return valve": "-03-ZVNV-MSO", 131 | "supply pressure": "-03-ZVNV-PI01", 132 | "cooling coil": "-03-ZVNV-MV01", 133 | "supply temperature": "-03-ZVNV-TI01", 134 | "rooms": [ 135 | "3.A.1", 136 | "3.A.11", 137 | "3.B.13", 138 | "3.D.1", 139 | "3.F.6_A" 140 | ], 141 | "note": "I merged 3.A.1a and 3.A.1b into 3.A.1, and renamed 3.A.13 to 3.B.13", 142 | "side": "N", 143 | "source": {"page": 4, "index": 1} 144 | }, 145 | { 146 | "supply valve": "-03-ZVSV-MSI", 147 | "return valve": "-03-ZVSV-MSO", 148 | "supply pressure": "-03-ZVSV-PI01", 149 | "cooling coil": "-03-ZVSV-MV01", 150 | "supply temperature": "-03-ZVSV-TI01", 151 | "rooms": [ 152 | "3.A.18", 153 | "3.A.22", 154 | "3.H.27_A" 155 | ], 156 | "note": "I merged 3.A.22a and 3.A.22b into 3.A.22", 157 | "side": "S", 158 | "source": {"page": 4, "index": 2} 159 | }, 160 | { 161 | "supply valve": "-03-ZVSØ-MSI", 162 | "return valve": "-03-ZVSØ-MSO", 163 | "supply pressure": "-03-ZVSØ-PI01", 164 | "cooling coil": "-03-ZVSØ-MV01", 165 | "supply temperature": "-03-ZVSØ-TI01", 166 | "rooms": [ 167 | "3.H.27_B", 168 | "3.I.22", 169 | "3.I.30", 170 | "3.J.18", 171 | "3.J.29", 172 | "3.L.18" 173 | ], 174 | "note": "I merged 3.I.22a and 3.I.22b into 3.I.22", 175 | "side": "S", 176 | "source": {"page": 4, "index": 3} 177 | }, 178 | { 179 | "supply valve": "-03-ZVNØ-MSI", 180 | "return valve": "-03-ZVNØ-MSO", 181 | "supply pressure": "-03-ZVNØ-PI01", 182 | "cooling coil": "-03-ZVNØ-MV01", 183 | "supply temperature": "-03-ZVNØ-TI01", 184 | "rooms": [ 185 | "3.F.6_B", 186 | "3.H.1", 187 | "3.I.1", 188 | "3.J.11", 189 | "3.J.13" 190 | ], 191 | "note": "I merged 3.I.1a and 3.I.1b into 3.I.1", 192 | "side": "N", 193 | "source": {"page": 4, "index": 4} 194 | } 195 | ] 196 | -------------------------------------------------------------------------------- /etc/instance_generators/IBM/README: -------------------------------------------------------------------------------- 1 | Description 2 | --------------------- 3 | 4 | The IBM Research building in Dublin was retrofitted as modern 15,000 m2 office 5 | in 2011 from an old factory. The building serves as living laboratory for IBM's 6 | Cognitive Building research and is heavily equipped with modern building 7 | automation technology to provide a rich data source for research. 8 | 9 | The building was refurnished in multiple steps and new systems were installed by 10 | different companies. As a result, the diversity of systems and labels is very 11 | high in the building. The building contains now about 2,154 datapoints collected 12 | from 11 different systems. The building is served by 4 AHUs with about 115 13 | points but has also some old disconnected legacy systems in the point list. 14 | Unique about the building is that it contains 150 desk temperature sensors and 15 | 250 smart meters. It also has 1,000 points related to 161 FCUs as well as 350 16 | points on the lighting system including 150 PIR sensors and door people counters. 17 | 18 | The diversity of the dataset made the mapping of the datapoints to Brick 19 | challenging as several types were not covered that are particularly related to 20 | the unique systems such as the FCU and people counters. The large number of FCUs 21 | that are connected to different AHU, boilers and chillers are unique for this 22 | building and show the capability and importance of the relationship modelling. 23 | Similar is the hierarchy of smart meters that monitor various equipment from FCUs 24 | to lighting and AHU. 25 | 26 | Dataset 27 | --------------------- 28 | 1. IBM_B3_points.csv - The list of datapoints for the building containing: 29 | * Label: the unique label of each datapoint 30 | * TagSet: the respective Brick TagSet 31 | * AssetType, Asset: The asset type and id of the associated equipment 32 | * AssetParent, isFedBy: The parent and feeds of the asset 33 | * City, Building, Wing, Floor, Room, Zone: The location elements 34 | * AssetType, Asset: The asset type and id of the secondary associated equipment 35 | 2. CreateOnt.ipynb: An jupyter notebook to create the ontology 36 | 3. IBM_B3.ttl: The generated ontology 37 | -------------------------------------------------------------------------------- /etc/instance_generators/RICE_UVA/README: -------------------------------------------------------------------------------- 1 | Rice_Type contains the list of points whose data is available, along with the groud truth type. 2 | 3 | point.csv contains the mapping of each primitive label to detailed information, e.g, tagset defined in BRICK, AHU, HVAC zone, floor, room, equipment unit id. 4 | 5 | generator.py generates the automatically "parsed" tags and tagsets, but not necessarily the tagsets in the Brick Schema. 6 | 7 | convert2ttl.py generate the turtle file based on point.csv. 8 | -------------------------------------------------------------------------------- /etc/instance_generators/RICE_UVA/convert2ttl.py: -------------------------------------------------------------------------------- 1 | import rdflib 2 | import re 3 | import csv 4 | from rdflib.namespace import OWL, RDF, RDFS 5 | from rdflib import URIRef 6 | 7 | BRICK = rdflib.Namespace('https://brickschema.org/schema/1.0.1/Brick#') 8 | BRICKFRAME = rdflib.Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 9 | RICE = rdflib.Namespace('http://virginia.edu/building/ontology/rice#') 10 | 11 | building_graph = rdflib.Graph() 12 | building_graph.bind('rice', RICE) 13 | building_graph.bind('brick', BRICK) 14 | building_graph.bind('brickframe', BRICKFRAME) 15 | building_graph.bind('owl', OWL) 16 | 17 | brick_graph = rdflib.Graph() 18 | brick_graph.bind('brick', BRICK) 19 | brick_graph.parse('../../../Brick/Brick.ttl', format='turtle') 20 | 21 | building_graph.add((RICE.RICE, RDF.type, BRICK.Building)) 22 | building_graph.add((RICE.Floor_0, RDF.type, BRICK.Floor)) #aka, basememt 23 | building_graph.add((RICE.Floor_1, RDF.type, BRICK.Floor)) 24 | building_graph.add((RICE.Floor_2, RDF.type, BRICK.Floor)) 25 | building_graph.add((RICE.Floor_3, RDF.type, BRICK.Floor)) 26 | building_graph.add((RICE.Floor_4, RDF.type, BRICK.Floor)) 27 | building_graph.add((RICE.Floor_5, RDF.type, BRICK.Floor)) 28 | building_graph.add((RICE.Floor_0, BRICKFRAME.isPartOf, RICE.RICE)) 29 | building_graph.add((RICE.Floor_1, BRICKFRAME.isPartOf, RICE.RICE)) 30 | building_graph.add((RICE.Floor_2, BRICKFRAME.isPartOf, RICE.RICE)) 31 | building_graph.add((RICE.Floor_3, BRICKFRAME.isPartOf, RICE.RICE)) 32 | building_graph.add((RICE.Floor_4, BRICKFRAME.isPartOf, RICE.RICE)) 33 | building_graph.add((RICE.Floor_5, BRICKFRAME.isPartOf, RICE.RICE)) 34 | building_graph.add((RICE.AHU_1, RDF.type, BRICK.AHU)) 35 | building_graph.add((RICE.AHU_2, RDF.type, BRICK.AHU)) 36 | building_graph.add((RICE.AHU_3, RDF.type, BRICK.AHU)) 37 | building_graph.add((RICE.AHU_4, RDF.type, BRICK.AHU)) 38 | building_graph.add((RICE.AHU_1, BRICKFRAME.isPartOf, RICE.RICE)) 39 | building_graph.add((RICE.AHU_2, BRICKFRAME.isPartOf, RICE.RICE)) 40 | building_graph.add((RICE.AHU_3, BRICKFRAME.isPartOf, RICE.RICE)) 41 | building_graph.add((RICE.AHU_4, BRICKFRAME.isPartOf, RICE.RICE)) 42 | 43 | with open('point.csv', 'r') as src: 44 | ptList = csv.DictReader(src) 45 | for pt in ptList: 46 | label = pt['original label'] 47 | pt_type = pt['tagset'] 48 | pt_ahu = pt['ahu'] 49 | pt_zone = pt['hvac_zone'] 50 | pt_floor = pt['floor'] 51 | pt_room = pt['room'] 52 | label = re.sub('\s+','_',label) 53 | 54 | pt_type = re.sub('\s+','_',pt_type) 55 | # pt_type = BRICK[pt_type] 56 | 57 | building_graph.add((BRICK[pt_type], RDF.type, OWL.NamedIndividual)) 58 | building_graph.add((BRICK[pt_type], RDF.type, BRICK.Point)) 59 | building_graph.add((RICE[label], RDF.type, BRICK[pt_type])) 60 | 61 | if pt_room: 62 | building_graph.add((RICE["Room" + pt_room], RDF.type, OWL.NamedIndividual)) 63 | building_graph.add((RICE["Room" + pt_room], RDF.type, BRICK.Room)) 64 | building_graph.add((RICE["Room" + pt_room], BRICKFRAME.contains, RICE[label])) 65 | building_graph.add((RICE["Room" + pt_room], BRICKFRAME.hasPoint, RICE[label])) 66 | 67 | if pt_zone: 68 | building_graph.add((RICE["HVAC_Zone" + pt_zone], RDF.type, OWL.NamedIndividual)) 69 | building_graph.add((RICE["HVAC_Zone" + pt_zone], RDF.type, BRICK.HVAC_Zone)) 70 | building_graph.add((RICE["HVAC_Zone" + pt_zone], BRICKFRAME.hasPart, RICE["Room" + pt_room])) 71 | 72 | building_graph.add((RICE["VAV" + pt_zone], RDF.type, OWL.NamedIndividual)) 73 | building_graph.add((RICE["VAV" + pt_zone], RDF.type, BRICK.VAV)) 74 | building_graph.add((RICE["VAV" + pt_zone], BRICKFRAME.feeds, RICE["HVAC_Zone" + pt_zone])) 75 | building_graph.add((RICE["VAV" + pt_zone], BRICKFRAME.hasPoint, RICE[label])) 76 | 77 | building_graph.add((RICE["AHU_" + pt_zone], BRICKFRAME.feeds, RICE["VAV" + pt_zone])) 78 | 79 | if pt_floor: 80 | building_graph.add((RICE["Floor_" + pt_floor], BRICKFRAME.hasPart, RICE["Room" + pt_room])) 81 | 82 | if len(pt_room) < 3: 83 | pt_floor = '0' 84 | else: 85 | pt_floor = pt_room[0] 86 | building_graph.add((RICE["Floor_" + pt_floor], BRICKFRAME.hasPart, RICE["Room" + pt_room])) 87 | 88 | building_graph.serialize(destination='Rice.ttl', format='turtle') 89 | -------------------------------------------------------------------------------- /etc/instance_generators/RICE_UVA/generator.py: -------------------------------------------------------------------------------- 1 | import re 2 | import csv 3 | 4 | src = [i.strip().split(',')[0] for i in open('Rice_Type').readlines()] 5 | tagList = set() 6 | tagSet = set() 7 | output = list() 8 | for s in src: 9 | #print s, '-->', 10 | tmp = [] 11 | tmp.append(s) 12 | identifier = re.findall('[0-9]+', s) 13 | s = re.sub('[0-9]', '_', s) 14 | s = re.sub('\s', '_', s) 15 | s = re.sub('(\bHW\b)', r'_\1_', s) 16 | s = re.sub('(VAV)', r'_\1_', s) 17 | s = re.sub('([A-Z]{1}[a-z]+|[A-Z]{3})', r'_\1', s) 18 | s = re.sub('^_+|_+$', '', s) 19 | s = re.split('_+', s) 20 | tagList |= set(s) 21 | tagSet.add('_'.join(s)) 22 | #tmp.append('_'.join(ss.lower() for ss in s)) 23 | tmp.append('_'.join(s)) 24 | tmp.extend(identifier) 25 | output.append(tmp) 26 | 27 | out = open('tagList','wb') 28 | for tag in sorted(tagList): 29 | print >> out, tag 30 | out.close() 31 | 32 | out = open('tagSet','wb') 33 | for tag in sorted(tagSet): 34 | print >> out, tag 35 | out.close() 36 | 37 | 38 | out = open('point.csv', 'wb') 39 | wr = csv.writer(out, quoting=csv.QUOTE_ALL) 40 | #wr.writerow('original point name', 'tagsets','identifier') 41 | wr.writerows(output[2:]) 42 | -------------------------------------------------------------------------------- /etc/instance_generators/RICE_UVA/tagList: -------------------------------------------------------------------------------- 1 | A 2 | AHU 3 | AV 4 | Active 5 | Activedac 6 | Activescc 7 | AhuV 8 | Air 9 | Airflow 10 | Alarm 11 | Area 12 | Auditorium 13 | Avg 14 | B 15 | BAS 16 | BASscc 17 | Basement 18 | Beam 19 | BulbA 20 | C 21 | CB 22 | CDQ 23 | CFM 24 | CHW 25 | CHWS 26 | CO 27 | COR 28 | CalculationA 29 | Chilled 30 | Chiller 31 | Close 32 | Coil 33 | Concentration 34 | Cool 35 | Cooling 36 | Corr 37 | Corridor 38 | Cutout 39 | DA 40 | DAT 41 | Damper 42 | Devices 43 | Dew 44 | Diffdac 45 | DifferenceA 46 | Differential 47 | Disable 48 | Discharge 49 | Drive 50 | Dry 51 | E 52 | ER 53 | ERWdac 54 | EX 55 | East 56 | Effective 57 | Enable 58 | Enter 59 | Entering 60 | Enterng 61 | EnthalpyA 62 | Exhaust 63 | FCU 64 | FP 65 | FailureV 66 | Fan 67 | Fixed 68 | Floor 69 | Flow 70 | Foor 71 | Freeze 72 | From 73 | GLY 74 | Glycol 75 | Gross 76 | HW 77 | HWS 78 | Heat 79 | Heating 80 | Hi 81 | High 82 | Hot 83 | Ht 84 | Humidity 85 | HumidityA 86 | Humiditydac 87 | Humiditypgm 88 | Humidityscc 89 | I 90 | Ice 91 | LT 92 | Lab 93 | Leave 94 | Leaving 95 | Levelscc 96 | Limit 97 | Limitpgm 98 | Limitscc 99 | Lo 100 | Local 101 | Localdac 102 | Localscc 103 | Low 104 | Mag 105 | Main 106 | Max 107 | MaxV 108 | Medium 109 | Meter 110 | Min 111 | Mixed 112 | Mode 113 | ModeA 114 | ModeV 115 | NESHS 116 | NW 117 | Name 118 | Nominal 119 | OA 120 | OPR 121 | Occupied 122 | OffsetA 123 | Offsetscc 124 | Opt 125 | Outdoor 126 | PHRH 127 | Perimeter 128 | Perimiter 129 | Perm 130 | Point 131 | PointA 132 | Pos 133 | Pre 134 | Preheat 135 | PresentA 136 | Press 137 | Protect 138 | Pump 139 | RA 140 | RM 141 | RMCorr 142 | RME 143 | RMI 144 | RMIC 145 | RNW 146 | Ratio 147 | Regen 148 | Relative 149 | Return 150 | Returnpgm 151 | Rm 152 | RmI 153 | Room 154 | SESHS 155 | SHS 156 | SP 157 | SWSHS 158 | SensorA 159 | Sensordac 160 | Set 161 | Source 162 | Space 163 | Standby 164 | Static 165 | Status 166 | StatusA 167 | StatusV 168 | Stpt 169 | Stptscc 170 | Supply 171 | Supplypgm 172 | System 173 | T 174 | TEMP 175 | Tank 176 | Temp 177 | Tempdac 178 | Temperature 179 | TemperatureA 180 | Temperaturedac 181 | Temperaturescc 182 | Temperaturewshp 183 | Temppgm 184 | Tempscc 185 | Thumbwheel 186 | To 187 | TrAV 188 | UIP 189 | Unable 190 | VAS 191 | VAV 192 | Vas 193 | Vav 194 | VavV 195 | Ventilation 196 | WTS 197 | Water 198 | West 199 | Zone 200 | average 201 | dac 202 | delta 203 | diag 204 | diagnostic 205 | duct 206 | economizer 207 | heat 208 | level 209 | nd 210 | occupancy 211 | occupancyA 212 | occupied 213 | operating 214 | outdoor 215 | point 216 | rd 217 | rmi 218 | scc 219 | space 220 | st 221 | standby 222 | system 223 | th 224 | unoccupied 225 | vent 226 | -------------------------------------------------------------------------------- /etc/instance_generators/SODA_UCB/README: -------------------------------------------------------------------------------- 1 | Name of building : Soda Hall 2 | Number of Sensors : 1586 3 | Built in 1994 4 | BMS System : Barrington/Broadwin (company has ceased to exist) 5 | 6 | Files provided : 7 | 1. SodaParseKey 8 | < Format of *_MetadataParseKey file> 9 | 10 | Sensor Tag => List ( [tag substring] -> [haystack-ish key] ) 11 | 12 | 2. convertSodaHallToBrick.py 13 | Python file to convert the list of sensor tags to Brick 14 | 15 | 3. berkeley.ttl 16 | Soda Hall metadata converted to Brick (using the script) 17 | -------------------------------------------------------------------------------- /etc/instance_generators/SODA_UCB/SODA/convertSodaHallToBrick.py: -------------------------------------------------------------------------------- 1 | # import the rdflib 2 | from rdflib import Graph, Namespace, URIRef, Literal 3 | import rdflib 4 | import re 5 | # declare the namespaces. This will pull in the definition of the schema 6 | # if it exists. Else, we need to parse some file to fill in the missing symbols 7 | # is not pulling anything in from the web, I don't think? 8 | RDF = Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') 9 | RDFS = Namespace('http://www.w3.org/2000/01/rdf-schema#') 10 | BRICK = Namespace('https://brickschema.org/schema/1.0.1/Brick#') 11 | BRICKFRAME = Namespace('https://brickschema.org/schema/1.0.1/BrickFrame#') 12 | BRICKTAG = Namespace('https://brickschema.org/schema/1.0.1/BrickTag#') 13 | 14 | # This is the graph object that contains all of the schemas. We use this 15 | # graph to pull out classes and relationships, but any *instances* of these 16 | # are going to be stored in another graph. 17 | g = rdflib.Graph() 18 | # "bind()" simply means that we can use 'rdf' instead of the full URI for rdf when 19 | # referring to entities in its namespace. Just shorthand 20 | g.bind( 'rdf', RDF) 21 | g.bind( 'rdfs', RDFS) 22 | g.bind( 'brick', BRICK) 23 | g.bind( 'bf', BRICKFRAME) 24 | g.bind( 'btag', BRICKTAG) 25 | #g.parse('../BuildingSchema/BrickV2.ttl', format='turtle') 26 | #g.parse('../BuildingSchema/BrickFrame.ttl', format='turtle') 27 | #g.parse('../BuildingSchema/BrickTag.ttl', format='turtle') 28 | 29 | # We want to add nodes to the graph for our building. The building exists in its 30 | # own namespace, which we are calling soda 31 | 32 | EX = Namespace('https://brickschema.org/schema/1.0.1/building_example#') 33 | g.bind('soda_hall', EX) 34 | 35 | tags = {} 36 | def readKeys(filename="SodaParseKey"): 37 | lines = open(filename).readlines() 38 | for line in lines: 39 | line = line.strip() 40 | if line == "": 41 | continue 42 | metadataTag = line.split("=>")[0].strip() 43 | tags[metadataTag] = {} 44 | parts = line.split("=>")[-1].strip().split(";") 45 | for part in parts: 46 | part = part.strip() 47 | if part == "": 48 | continue 49 | key = part.split("->")[-1].strip() 50 | if " " in key: 51 | key = re.sub(" ", "_", key) 52 | value = part.split("->")[0].strip() 53 | tags[metadataTag][key] = value 54 | 55 | # adding building 56 | g.add((EX.building_1, RDF.type, BRICK.Building)) 57 | g.add((EX.building_1, RDFS.label, Literal("Soda Hall"))) 58 | # we inherited that from BRICK.building, which is a subclass of Location 59 | print "SHOULD be True: ", (BRICK.Building, RDFS.subClassOf, BRICK.Location) in g 60 | readKeys() 61 | 62 | # now that we have a building, lets add 2 floors to it. 63 | # We implicitly create the 2 labels floor_1 and floor_2 that represent 64 | # the floor entities. We use the RDF.type relationship to say that they are 65 | # instances of the Floor class as defined by the BRICK schema. 66 | for floor_num in [ 1, 2, 3, 4, 5, 6, 7 ]: 67 | floor = EX["floor_{0}".format(floor_num)] 68 | g.add((floor, RDF.type, BRICK.Floor)) 69 | g.add((floor, BRICKFRAME.isPartOf, EX.building_1)) 70 | 71 | # adding hvac zones and rooms ( since in Soda Hall there is a one<-> one 72 | # mapping between zones and rooms and floors 73 | # Also each zone is associated with a VAV, and the AHU serving it is 74 | # on the same tag name 75 | to_delete = [] 76 | for tag in tags: 77 | if "zone" in tags[tag]: 78 | #print tag, tags[tag] 79 | zone = "hvac_zone_{0}".format(tags[tag]["zone"]) 80 | room = "room_{0}".format(tags[tag]["zone"]) 81 | floor = "floor_{0}".format(tags[tag]["zone"][1]) 82 | vav = "vav_{0}".format(tags[tag]["zone"]) 83 | if (EX[zone], RDF.type, BRICK.HVAC_Zone) not in g: 84 | g.add((EX[zone], RDF.type, BRICK.HVAC_Zone)) 85 | g.add((EX[room], RDF.type, BRICK.Room)) 86 | g.add((EX[vav], RDF.type, BRICK.VAV)) 87 | g.add((EX[vav], BRICKFRAME.feeds, EX[zone])) 88 | g.add((EX[room], BRICKFRAME.isPartOf, EX[floor])) 89 | g.add((EX[zone], BRICKFRAME.hasPart, EX[room])) 90 | #g.add((EX[zone], BRICKFRAME.contains, EX[room])) 91 | if "ahu" in tags[tag]: 92 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 93 | if (EX[ahu], RDF.type, BRICK.AHU) not in g: 94 | g.add((EX[ahu], RDF.type, BRICK.AHU)) 95 | if (EX[ahu], BRICKFRAME.feeds, EX[vav]) not in g: 96 | g.add((EX[ahu], BRICKFRAME.feeds, EX[vav])) 97 | if "zone_temp_sensor" in tags[tag]: 98 | sensor = "temp_sensor_{0}".format(zone) 99 | g.add((EX[sensor], RDF.type, BRICK.Zone_Temperature_Sensor)) 100 | g.add((EX[vav], BRICKFRAME.hasPoint, EX[sensor])) 101 | #g.add((EX[sensor], BRICKFRAME.isLocatedIn, EX.room)) 102 | #g.add((EX[sensor], BRICKFRAME.isPointOf, EX.room)) 103 | elif "zone_temp_setpoint" in tags[tag]: 104 | sensor = "temp_setpoint_{0}".format(zone) 105 | g.add((EX[sensor], RDF.type, BRICK.Zone_Temperature_Setpoint)) 106 | g.add((EX[vav], BRICKFRAME.hasPoint, EX[sensor])) 107 | #g.add((EX[sensor], BRICKFRAME.isLocatedIn, EX.room)) 108 | #g.add((EX[sensor], BRICKFRAME.isPointOf, EX.room)) 109 | elif "vav_reheat_discharge_air_pressure_sensor" in tags[tag]: 110 | sensor_flow = "flow_sensor_{0}".format(zone) 111 | sensor_reheat = "reheat_sensor_{0}".format(zone) 112 | g.add((EX[sensor_flow], RDF.type, BRICK.Supply_Air_Flow_Sensor)) 113 | g.add((EX[sensor_reheat], RDF.type, BRICK.Reheat_Valve_Command)) 114 | g.add((EX[vav], BRICKFRAME.hasPoint, EX[sensor_flow])) 115 | g.add((EX[vav], BRICKFRAME.hasPoint, EX[sensor_reheat])) 116 | g.add((EX[vav], RDF.hasTag, BRICK.Reheat)) 117 | elif "discharge_air_pressure_sensor" in tags[tag]: 118 | sensor_flow = "flow_sensor_{0}".format(zone) 119 | g.add((EX[sensor_flow], RDF.type, BRICK.Supply_Air_Flow_Sensor)) 120 | g.add((EX[vav], BRICKFRAME.hasPoint, EX[sensor_flow])) 121 | 122 | to_delete.append(tag) 123 | 124 | 125 | for tag in to_delete: 126 | del tags[tag] 127 | 128 | to_delete = [] 129 | for tag in sorted(tags): 130 | if "ahu" not in tags[tag]: 131 | to_delete.append(tag) 132 | 133 | nonahutags = {} 134 | for tag in to_delete: 135 | nonahutags[tag] = tags[tag] 136 | del tags[tag] 137 | 138 | to_delete = [] 139 | for tag in tags: 140 | if "ahu" in tags[tag] and "supply_fan" in tags[tag]: 141 | supply_fan = "supply_fan_{0}".format(tags[tag]["supply_fan"]) 142 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 143 | if (EX[supply_fan], RDF.type, BRICK.Supply_Fan) not in g: 144 | g.add((EX[supply_fan], RDF.type, BRICK.Supply_Fan)) 145 | g.add((EX[ahu], RDF.contains, EX[supply_fan])) 146 | if "pid_loop_P_variable" in tags[tag]: 147 | sensor = "pid_p_{0}".format(supply_fan) 148 | g.add((EX[sensor], RDF.type ,BRICK.Supply_Air_Proportional_Gain_Factor)) 149 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 150 | elif "pid_loop_I_variable" in tags[tag]: 151 | sensor = "pid_i_{0}".format(supply_fan) 152 | g.add((EX[sensor], RDF.type ,BRICK.Supply_Air_Integrative_Gain_Factor)) 153 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 154 | elif "static_pressure_setpoint" in tags[tag]: 155 | sensor = "static_pressure_setpoint_{0}".format(supply_fan) 156 | g.add((EX[sensor], RDF.type, BRICK.Static_Pressure_Setpoint)) 157 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 158 | elif "static_pressure_sensor" in tags[tag]: 159 | sensor = "static_pressure_sensor_{0}".format(supply_fan) 160 | g.add((EX[sensor], RDF.type, BRICK.Static_Pressure_Sensor)) 161 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 162 | elif "supply_air_temp_setpoint" in tags[tag]: 163 | sensor = "supply_air_setpoint_{0}".format(supply_fan) 164 | g.add((EX[sensor], RDF.type, BRICK.Discharge_Air_Temperature_Setpoint)) 165 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 166 | elif "supply_air_temp" in tags[tag]: 167 | sensor = "supply_air_temp_{0}".format(supply_fan) 168 | g.add((EX[sensor], RDF.type, BRICK.Discharge_Air_Temperature_Sensor)) 169 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 170 | elif "fan_speed_reset" in tags[tag]: 171 | sensor = "fan_speed_reset_{0}".format(supply_fan) 172 | g.add((EX[sensor], RDF.type, BRICK.Fan_Speed_Reset)) 173 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 174 | elif "fan_speed" in tags[tag]: 175 | sensor = "fan_speed_{0}".format(supply_fan) 176 | g.add((EX[sensor], RDF.type, BRICK.Fan_Speed_Setpoint)) 177 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 178 | elif "smoke_alarm" in tags[tag]: 179 | sensor = "smoke_alarm_{0}".format(supply_fan) 180 | g.add((EX[sensor], RDF.type, BRICK.Smoke_Detected_Alarm)) 181 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 182 | elif "differential_pressure_status" in tags[tag]: 183 | sensor = "diff_pressure_status_{0}".format(supply_fan) 184 | g.add((EX[sensor], RDF.type, BRICK.Differential_Pressure_Status)) 185 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 186 | elif "mixed_air_temp" in tags[tag]: 187 | sensor = "mixed_air_temp_{0}".format(supply_fan) 188 | g.add((EX[sensor], RDF.type, BRICK.Mixed_Air_Temperature_Sensor)) 189 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 190 | elif "fault_sensor" in tags[tag]: 191 | sensor = "fault_status_{0}".format(supply_fan) 192 | g.add((EX[sensor], RDF.type, BRICK.Fault_Status)) 193 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 194 | elif "chilled_water_valve_pressure" in tags[tag]: 195 | sensor = "c_water_vlv_press_{0}".format(supply_fan) 196 | g.add((EX[sensor], RDF.type, BRICK.Cooling_Coil_Valve_Pressure)) 197 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 198 | elif "mixed_air_damper" in tags[tag]: 199 | sensor = "mixed_air_dmp_{0}".format(supply_fan) 200 | g.add((EX[sensor], RDF.type, BRICK.Mixed_Air_Damper_Position_Sensor)) 201 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 202 | elif "start_stop_sensor" in tags[tag]: 203 | sensor = "s_s_{0}".format(supply_fan) 204 | g.add((EX[sensor], RDF.type, BRICK.Start_Stop_Status)) 205 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 206 | elif "air_volume" in tags[tag] or "filtered_air_volume" in tags[tag]: 207 | sensor = "supply_fan_cfm_{0}".format(supply_fan) 208 | g.add((EX[sensor], RDF.type, BRICK.Supply_Fan_Air_Flow_Sensor)) 209 | g.add((EX[supply_fan], BRICKFRAME.hasPoint, EX[sensor])) 210 | to_delete.append(tag) 211 | if "ahu" in tags[tag] and "exhaust_fan" in tags[tag]: 212 | exhaust_fan = "exhaust_fan_{0}".format(tags[tag]["exhaust_fan"]) 213 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 214 | if (EX[exhaust_fan], RDF.type, BRICK.Exhaust_Fan) not in g: 215 | g.add((EX[exhaust_fan], RDF.type, BRICK.Exhaust_Fan)) 216 | g.add((EX.ahu, RDF.contains, EX[exhaust_fan])) 217 | if "air_volume" in tags[tag] or "filtered_air_volume" in tags[tag]: 218 | sensor = "exhaust_fan_cfm_{0}".format(exhaust_fan) 219 | g.add((EX[sensor], RDF.type, BRICK.Exhaust_Air_Flow_Sensor)) 220 | g.add((EX[exhaust_fan], BRICKFRAME.hasPoint, EX[sensor])) 221 | elif "differential_pressure_status" in tags[tag]: 222 | sensor = "diff_pressure_status_{0}".format(exhaust_fan) 223 | g.add((EX[sensor], RDF.type, BRICK.Differential_Pressure_Status)) 224 | g.add((EX[exhaust_fan], BRICKFRAME.hasPoint, EX[sensor])) 225 | elif "fan_speed_reset" in tags[tag]: 226 | sensor = "fan_speed_reset_{0}".format(exhaust_fan) 227 | g.add((EX[sensor], RDF.type, BRICK.Fan_Speed_Reset)) 228 | g.add((EX[exhaust_fan], BRICKFRAME.hasPoint, EX[sensor])) 229 | to_delete.append(tag) 230 | 231 | for tag in tags: 232 | if "ALL" in tag: 233 | to_delete.append(tag) 234 | 235 | for tag in to_delete: 236 | del tags[tag] 237 | 238 | 239 | to_delete = [] 240 | for tag in tags: 241 | if "VAV_" in tag: 242 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 243 | floor = "floor_{0}".format(tags[tag]["floor"][1]) 244 | sensor_flow = "flow_sensor_{0}".format(tag) 245 | g.add((EX[sensor_flow], RDF.type, BRICK.Supply_Air_Flow_Sensor)) 246 | g.add((EX[sensor_flow], BRICKFRAME.isLocatedIn, EX[floor])) 247 | if "_MX" in tag: 248 | g.add((EX[sensor_flow], BRICKFRAME.hasTag, BRICK.Max)) 249 | elif "_AV" in tag: 250 | g.add((EX[sensor_flow], BRICKFRAME.hasTag, BRICK.Average)) 251 | elif "_MN" in tag: 252 | g.add((EX[sensor_flow], BRICKFRAME.hasTag, BRICK.Min)) 253 | to_delete.append(tag) 254 | elif "LOW_RAT" in tag: 255 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 256 | sensor = "rat_{0}".format(tag) 257 | g.add((EX[sensor], RDF.type, BRICK.Return_Air_Temperature_Low_Limit_Alarm)) 258 | g.add((EX[ahu], RDF.hasPoint, EX[sensor])) 259 | to_delete.append(tag) 260 | elif "SMK_ALM" in tag: 261 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 262 | sensor = "smoke_alarm_{0}".format(tag) 263 | g.add((EX[sensor], RDF.type, BRICK.Smoke_Detected_Alarm)) 264 | g.add((EX[ahu], BRICKFRAME.hasPoint, EX[sensor])) 265 | to_delete.append(tag) 266 | elif "CURTL" in tag: 267 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 268 | sensor = "curtl_{0}".format(tag) 269 | g.add((EX[sensor], RDF.type, BRICK.Curtailment_Override)) 270 | g.add((EX[ahu], BRICKFRAME.hasPoint, EX[sensor])) 271 | to_delete.append(tag) 272 | elif "EVENT" in tag: 273 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 274 | sensor = "override_event_{0}".format(tag) 275 | g.add((EX[sensor], RDF.type, BRICK.AHU_Overriden_On_Status)) 276 | g.add((EX[ahu], BRICKFRAME.hasPoint, EX[sensor])) 277 | to_delete.append(tag) 278 | elif "_OCCPY" in tag: 279 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 280 | sensor = "ahu_occpy_{0}".format(tag) 281 | g.add((EX[sensor], RDF.type, BRICK.Occupancy_Command)) 282 | g.add((EX[ahu], BRICKFRAME.hasPoint, EX[sensor])) 283 | to_delete.append(tag) 284 | elif "___S_S" in tag: 285 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 286 | sensor = "ahu_start_stop_{0}".format(tag) 287 | g.add((EX[sensor], RDF.type, BRICK.Start_Stop_Command)) 288 | g.add((EX[ahu], BRICKFRAME.hasPoint, EX[sensor])) 289 | to_delete.append(tag) 290 | elif "OAT" in tag: 291 | ahu = "ahu_{0}".format(tags[tag]["ahu"]) 292 | sensor = "oat_{0}".format(tag) 293 | g.add((EX[sensor], RDF.type, BRICK.Outside_Air_Temperature)) 294 | g.add((EX[ahu], BRICKFRAME.hasPoint, EX[sensor])) 295 | to_delete.append(tag) 296 | 297 | 298 | for tag in to_delete: 299 | del tags[tag] 300 | 301 | tags = nonahutags 302 | tagnames = [ (tag, tag[::-1]) for tag in tags ] 303 | for tag in sorted(tagnames, key=lambda k:k[1]): 304 | print tag[0] 305 | #for tag in sorted(tags): 306 | # print tag, tags[tag] 307 | 308 | for tag in tags: 309 | if tag == "SOD__BLD_1_KWH": 310 | sensor = "energy_meter_building_{0}".format(tag) 311 | g.add((EX[sensor], RDF.type, BRICK.Energy_Meter)) 312 | elif tag == "SOD__BLD_1_KWD": 313 | sensor = "energy_demand_building_{0}".format(tag) 314 | g.add((EX[sensor], RDF.type, BRICK.Energy_Demand)) 315 | 316 | del tags["SOD__BLD_1_KWH"] 317 | del tags["SOD__BLD_1_KWD"] 318 | 319 | print "Number of tags remaining : ", len(nonahutags) 320 | g.serialize(destination='soda_hall_berkeley.ttl', format='turtle') 321 | print len(g) 322 | 323 | -------------------------------------------------------------------------------- /etc/instance_generators/SODA_UCB/SODA/figs/soda_ahu1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildSysUniformMetadata/GroundTruth/789ff13adc7713bb7cbfd374f370d9dc72ac07ac/etc/instance_generators/SODA_UCB/SODA/figs/soda_ahu1.pdf -------------------------------------------------------------------------------- /etc/instance_generators/SODA_UCB/SODA/figs/soda_hx-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildSysUniformMetadata/GroundTruth/789ff13adc7713bb7cbfd374f370d9dc72ac07ac/etc/instance_generators/SODA_UCB/SODA/figs/soda_hx-1.pdf --------------------------------------------------------------------------------