Implement new Brickschema project browser.

This commit is contained in:
Dion Moult
2021-11-04 18:02:50 +11:00
parent f49b9f6781
commit 7fbe365599
16 changed files with 1319 additions and 0 deletions
+33
View File
@@ -444,6 +444,39 @@ endif
cd dist/working/olca-ipc-0.0.10/ && cp -r olca ../../blenderbim/libs/site/packages/ cd dist/working/olca-ipc-0.0.10/ && cp -r olca ../../blenderbim/libs/site/packages/
rm -rf dist/working rm -rf dist/working
# Provides Brickschema fucntionality
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/ca/37/8309da9a72407d2f5eb5489c197ac3cfe96ee3ccba1902d2a0ecc7843f92/brickschema-0.5.1.tar.gz
cd dist/working && tar -xzvf brickschema*
# This is an evil hack because we don't want to bundle flask
echo "" > dist/working/brickschema-0.5.1/brickschema/web.py
cd dist/working/brickschema-0.5.1/ && cp -r brickschema ../../blenderbim/libs/site/packages/
# For now lets bundle the latest nightly schema
cd dist/working && wget https://github.com/BrickSchema/Brick/releases/download/nightly/Brick.ttl
cd dist/working && cp Brick.ttl ../../blenderbim/bim/schema/Brick.ttl
rm -rf dist/working
# Required by brickschema
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/c7/22/37bb938be8e5c20d443b0c9ba0a243573b671b01739efb0a19f81bc5b470/pyshacl-0.17.2.tar.gz
cd dist/working && tar -xzvf pyshacl*
cd dist/working/pyshacl-0.17.2/ && cp -r pyshacl ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by brickschema
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/d2/a7/be8244688bfcee37c23733ab4fe8e6afa6d4403bd2674a3ae7bd2cecc77b/rdflib-6.0.2.tar.gz
cd dist/working && tar -xzvf rdflib*
cd dist/working/rdflib-6.0.2/ && cp -r rdflib ../../blenderbim/libs/site/packages/
rm -rf dist/working
# Required by brickschema
mkdir dist/working
cd dist/working && wget https://files.pythonhosted.org/packages/7d/c7/208aece36279e4f1236e437119358786e39530ecc1719d4e1afeddba5288/owlrl-6.0.2.tar.gz
cd dist/working && tar -xzvf owlrl*
cd dist/working/owlrl-6.0.2/ && cp -r owlrl ../../blenderbim/libs/site/packages/
rm -rf dist/working
cd dist/blenderbim && sed -i "s/999999/$(VERSION)/" __init__.py cd dist/blenderbim && sed -i "s/999999/$(VERSION)/" __init__.py
cd dist && zip -r blenderbim-$(VERSION)-$(PYVERSION)-$(PLATFORM).zip ./* cd dist && zip -r blenderbim-$(VERSION)-$(PYVERSION)-$(PLATFORM).zip ./*
rm -rf dist/blenderbim rm -rf dist/blenderbim
@@ -43,6 +43,7 @@ modules = {
"sequence": None, "sequence": None,
"group": None, "group": None,
"system": None, "system": None,
"brick": None,
"structural": None, "structural": None,
"boundary": None, "boundary": None,
"profile": None, "profile": None,
@@ -0,0 +1,40 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# BlenderBIM Add-on is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy
from . import ui, prop, operator
classes = (
operator.CloseBrickProject,
operator.LoadBrickProject,
operator.RewindBrickClass,
operator.ViewBrickClass,
operator.ViewBrickItem,
prop.Brick,
prop.BIMBrickProperties,
ui.BIM_PT_brickschema,
ui.BIM_UL_bricks,
)
def register():
bpy.types.Scene.BIMBrickProperties = bpy.props.PointerProperty(type=prop.BIMBrickProperties)
def unregister():
del bpy.types.Scene.BIMBrickProperties
@@ -0,0 +1,78 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# BlenderBIM Add-on is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy
import blenderbim.tool as tool
from blenderbim.tool.brick import BrickStore
def refresh():
BrickschemaData.is_loaded = False
class BrickschemaData:
data = {}
is_loaded = False
@classmethod
def load(cls):
cls.data = {"is_loaded": cls.get_is_loaded(), "attributes": cls.attributes()}
cls.is_loaded = True
@classmethod
def get_is_loaded(cls):
return BrickStore.graph is not None
@classmethod
def attributes(cls):
if BrickStore.graph is None:
return []
props = bpy.context.scene.BIMBrickProperties
try:
brick = props.bricks[props.active_brick_index]
except:
return []
results = []
uri = brick.uri
query = BrickStore.graph.query(
"""
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?name ?value ?sp ?sv WHERE {
<{uri}> ?name ?value .
OPTIONAL {
{ ?name rdfs:range brick:TimeseriesReference . }
UNION
{ ?name a brick:EntityProperty . }
?value ?sp ?sv }
}
""".replace(
"{uri}", uri
)
)
for row in query:
results.append(
{
"name": row.get("name").toPython().split("#")[-1],
"value": row.get("value").toPython().split("#")[-1],
"is_uri": "#" in row.get("value").toPython(),
"value_uri": row.get("value").toPython(),
}
)
return results
@@ -0,0 +1,84 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# BlenderBIM Add-on is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy
import ifcopenshell.api
import blenderbim.tool as tool
import blenderbim.core.brick as core
import blenderbim.bim.handler
from blenderbim.bim.ifc import IfcStore
class Operator:
def execute(self, context):
self._execute(context)
blenderbim.bim.handler.refresh_ui_data()
return {"FINISHED"}
class LoadBrickProject(bpy.types.Operator, Operator):
bl_idname = "bim.load_brick_project"
bl_label = "Load Brickschema Project"
bl_options = {"REGISTER", "UNDO"}
filepath: bpy.props.StringProperty(subtype="FILE_PATH")
filter_glob: bpy.props.StringProperty(default="*.ttl", options={"HIDDEN"})
def _execute(self, context):
core.load_brick_project(tool.Brick, filepath=self.filepath)
def invoke(self, context, event):
context.window_manager.fileselect_add(self)
return {"RUNNING_MODAL"}
class ViewBrickClass(bpy.types.Operator, Operator):
bl_idname = "bim.view_brick_class"
bl_label = "View Brick Class"
bl_options = {"REGISTER", "UNDO"}
brick_class: bpy.props.StringProperty(name="Brick Class")
def _execute(self, context):
core.view_brick_class(tool.Brick, brick_class=self.brick_class)
class ViewBrickItem(bpy.types.Operator, Operator):
bl_idname = "bim.view_brick_item"
bl_label = "View Brick Item"
bl_options = {"REGISTER", "UNDO"}
item: bpy.props.StringProperty(name="Brick Item")
def _execute(self, context):
core.view_brick_item(tool.Brick, item=self.item)
class RewindBrickClass(bpy.types.Operator, Operator):
bl_idname = "bim.rewind_brick_class"
bl_label = "Rewind Brick Class"
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.rewind_brick_class(tool.Brick)
class CloseBrickProject(bpy.types.Operator, Operator):
bl_idname = "bim.close_brick_project"
bl_label = "Close Brick Project"
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.close_brick_project(tool.Brick)
@@ -0,0 +1,49 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# BlenderBIM Add-on is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy
from blenderbim.bim.module.brick.data import BrickschemaData
from blenderbim.bim.prop import StrProperty, Attribute
from bpy.types import PropertyGroup
from bpy.props import (
PointerProperty,
StringProperty,
EnumProperty,
BoolProperty,
IntProperty,
FloatProperty,
FloatVectorProperty,
CollectionProperty,
)
def update_active_brick_index(self, context):
BrickschemaData.is_loaded = False
class Brick(PropertyGroup):
name: StringProperty(name="Name")
uri: StringProperty(name="URI")
total_items: IntProperty(name="Total Items")
class BIMBrickProperties(PropertyGroup):
active_brick_class: StringProperty(name="Active Brick Class")
brick_breadcrumbs: CollectionProperty(name="Brick Breadcrumbs", type=StrProperty)
bricks: CollectionProperty(name="Bricks", type=Brick)
active_brick_index: IntProperty(name="Active Brick Index", update=update_active_brick_index)
@@ -0,0 +1,67 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# BlenderBIM Add-on is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
from bpy.types import Panel, UIList
from blenderbim.bim.module.brick.data import BrickschemaData
class BIM_PT_brickschema(Panel):
bl_label = "Brickschema Project"
bl_idname = "BIM_PT_brickschema"
bl_options = {"DEFAULT_CLOSED"}
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "scene"
def draw(self, context):
if not BrickschemaData.is_loaded:
BrickschemaData.load()
self.props = context.scene.BIMBrickProperties
if not BrickschemaData.data["is_loaded"]:
row = self.layout.row()
row.operator("bim.load_brick_project")
return
row = self.layout.row(align=True)
if len(self.props.brick_breadcrumbs):
row.operator("bim.rewind_brick_class", text="", icon="FRAME_PREV")
row.label(text=self.props.active_brick_class)
row.operator("bim.close_brick_project", text="", icon="CANCEL")
self.layout.template_list("BIM_UL_bricks", "", self.props, "bricks", self.props, "active_brick_index")
for attribute in BrickschemaData.data["attributes"]:
row = self.layout.row(align=True)
row.label(text=attribute["name"])
row.label(text=attribute["value"])
if attribute["is_uri"]:
op = row.operator("bim.view_brick_item", text="", icon="DISCLOSURE_TRI_RIGHT")
op.item = attribute["value_uri"]
class BIM_UL_bricks(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
if item:
row = layout.row(align=True)
if item.total_items:
op = row.operator("bim.view_brick_class", text="", icon="DISCLOSURE_TRI_RIGHT", emboss=False)
op.brick_class = item.name
row.label(text=item.name)
if item.total_items:
row.label(text=str(item.total_items))
+14
View File
@@ -41,6 +41,20 @@ class Aggregate:
class Blender: pass class Blender: pass
@interface
class Brick:
def add_brick_breadcrumb(cls): pass
def clear_brick_browser(cls): pass
def clear_project(cls): pass
def get_item_class(cls, item): pass
def import_brick_classes(cls, brick_class): pass
def import_brick_items(cls, brick_class): pass
def load_brick_file(cls, filepath): pass
def pop_brick_breadcrumb(cls): pass
def select_browser_item(cls, item): pass
def set_active_brick_class(cls, brick_class): pass
@interface @interface
class Collector: class Collector:
def assign(cls, obj): pass def assign(cls, obj): pass
@@ -18,6 +18,7 @@
from blenderbim.tool.aggregate import Aggregate from blenderbim.tool.aggregate import Aggregate
from blenderbim.tool.blender import Blender from blenderbim.tool.blender import Blender
from blenderbim.tool.brick import Brick
from blenderbim.tool.collector import Collector from blenderbim.tool.collector import Collector
from blenderbim.tool.context import Context from blenderbim.tool.context import Context
from blenderbim.tool.geometry import Geometry from blenderbim.tool.geometry import Geometry
+137
View File
@@ -0,0 +1,137 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# BlenderBIM Add-on is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import os
import bpy
import brickschema
import blenderbim.core.tool
import blenderbim.tool as tool
class Brick(blenderbim.core.tool.Brick):
@classmethod
def set_user(cls, user):
bpy.context.scene.BIMOwnerProperties.active_user_id = user.id()
@classmethod
def add_brick_breadcrumb(cls):
new = bpy.context.scene.BIMBrickProperties.brick_breadcrumbs.add()
new.name = bpy.context.scene.BIMBrickProperties.active_brick_class
@classmethod
def clear_brick_browser(cls):
bpy.context.scene.BIMBrickProperties.bricks.clear()
@classmethod
def clear_project(cls):
BrickStore.graph = None
bpy.context.scene.BIMBrickProperties.active_brick_class == ""
bpy.context.scene.BIMBrickProperties.brick_breadcrumbs.clear()
@classmethod
def get_item_class(cls, item):
query = BrickStore.graph.query(
"""
PREFIX brick: <https://brickschema.org/schema/Brick#>
SELECT ?class WHERE {
<{item}> a ?class .
}
LIMIT 1
""".replace(
"{item}", item
)
)
for row in query:
return row.get("class").toPython().split("#")[-1]
@classmethod
def import_brick_classes(cls, brick_class):
query = BrickStore.graph.query(
"""
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?group (count(?item) as ?total_items) WHERE {
?group rdfs:subClassOf brick:{brick_class} .
?item rdf:type/rdfs:subClassOf* ?group
}
GROUP BY ?group
ORDER BY asc(?group)
""".replace(
"{brick_class}", brick_class
)
)
for row in query:
new = bpy.context.scene.BIMBrickProperties.bricks.add()
new.name = row.get("group").toPython().split("#")[-1]
new.uri = row.get("group").toPython()
new.total_items = row.get("total_items").toPython()
@classmethod
def import_brick_items(cls, brick_class):
query = BrickStore.graph.query(
"""
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?item WHERE {
?item rdf:type brick:{brick_class}
}
ORDER BY asc(?item)
""".replace(
"{brick_class}", brick_class
)
)
for row in query:
new = bpy.context.scene.BIMBrickProperties.bricks.add()
new.name = row.get("item").toPython().split("#")[-1]
new.uri = row.get("item").toPython()
@classmethod
def load_brick_file(cls, filepath):
BrickStore.graph = brickschema.Graph()
cwd = os.path.dirname(os.path.realpath(__file__))
schema_path = os.path.join(cwd, "..", "bim", "schema", "Brick.ttl")
BrickStore.graph.load_file(schema_path)
BrickStore.graph.load_file(filepath)
@classmethod
def pop_brick_breadcrumb(cls):
crumb = bpy.context.scene.BIMBrickProperties.brick_breadcrumbs[-1]
name = crumb.name
last_index = len(bpy.context.scene.BIMBrickProperties.brick_breadcrumbs) - 1
bpy.context.scene.BIMBrickProperties.brick_breadcrumbs.remove(last_index)
return name
@classmethod
def select_browser_item(cls, item):
name = item.split("#")[-1]
props = bpy.context.scene.BIMBrickProperties
props.active_brick_index = props.bricks.find(name)
@classmethod
def set_active_brick_class(cls, brick_class):
bpy.context.scene.BIMBrickProperties.active_brick_class = brick_class
class BrickStore:
graph = None
@staticmethod
def purge():
BrickStore.graph = None
+1
View File
@@ -3,6 +3,7 @@ markers =
aggregate aggregate
attribute attribute
bimtester bimtester
brick
context context
geometry geometry
material material
@@ -0,0 +1,32 @@
@brick
Feature: Brick
Scenario: Load Brick project
Given an empty Blender session
When I press "bim.load_brick_project(filepath='{cwd}/test/files/building.ttl')"
Then nothing happens
Scenario: View Brick class
Given an empty Blender session
And I press "bim.load_brick_project(filepath='{cwd}/test/files/building.ttl')"
When I press "bim.view_brick_class(brick_class='Equipment')"
Then nothing happens
Scenario: View Brick item
Given an empty Blender session
And I press "bim.load_brick_project(filepath='{cwd}/test/files/building.ttl')"
When I press "bim.view_brick_item(item='https://brickschema.org/schema/Brick#Chiller')"
Then nothing happens
Scenario: Rewind brick class
Given an empty Blender session
And I press "bim.load_brick_project(filepath='{cwd}/test/files/building.ttl')"
And I press "bim.view_brick_class(brick_class='Equipment')"
When I press "bim.rewind_brick_class()"
Then nothing happens
Scenario: Close Brick project
Given an empty Blender session
And I press "bim.load_brick_project(filepath='{cwd}/test/files/building.ttl')"
When I press "bim.close_brick_project"
Then nothing happens
+7
View File
@@ -35,6 +35,13 @@ def blender():
prophet.verify() prophet.verify()
@pytest.fixture
def brick():
prophet = Prophecy(blenderbim.core.tool.Brick)
yield prophet
prophet.verify()
@pytest.fixture @pytest.fixture
def aggregate(): def aggregate():
prophet = Prophecy(blenderbim.core.tool.Aggregate) prophet = Prophecy(blenderbim.core.tool.Aggregate)
+66
View File
@@ -0,0 +1,66 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# BlenderBIM Add-on is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import blenderbim.core.brick as subject
from test.core.bootstrap import brick
class TestLoadBrickProject:
def test_run(self, brick):
brick.load_brick_file("filepath").should_be_called()
brick.import_brick_classes("Class").should_be_called()
brick.set_active_brick_class("Class").should_be_called()
subject.load_brick_project(brick, filepath="filepath")
class TestViewBrickClass:
def test_run(self, brick):
brick.add_brick_breadcrumb().should_be_called()
brick.clear_brick_browser().should_be_called()
brick.import_brick_classes("brick_class").should_be_called()
brick.import_brick_items("brick_class").should_be_called()
brick.set_active_brick_class("brick_class").should_be_called()
subject.view_brick_class(brick, brick_class="brick_class")
class TestViewBrickItem:
def test_run(self, brick):
brick.add_brick_breadcrumb().should_be_called()
brick.clear_brick_browser().should_be_called()
brick.get_item_class("item").should_be_called().will_return("brick_class")
brick.import_brick_classes("brick_class").should_be_called()
brick.import_brick_items("brick_class").should_be_called()
brick.set_active_brick_class("brick_class").should_be_called()
brick.select_browser_item("item").should_be_called()
subject.view_brick_item(brick, item="item")
class TestRewindBrickClass:
def test_run(self, brick):
brick.pop_brick_breadcrumb().should_be_called().will_return("previous_class")
brick.clear_brick_browser().should_be_called()
brick.import_brick_classes("previous_class").should_be_called()
brick.import_brick_items("previous_class").should_be_called()
brick.set_active_brick_class("previous_class").should_be_called()
subject.rewind_brick_class(brick)
class TestCloseBrickProject:
def test_run(self, brick):
brick.clear_project().should_be_called()
subject.close_brick_project(brick)
+584
View File
@@ -0,0 +1,584 @@
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix ns2: <http://buildsys.org/ontologies/bldg#> .
@prefix ns4: <http://buildsys.org/ontologies/bldg#CHW.Pump1_Start/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix unit: <http://qudt.org/vocab/unit/> .
ns2:AHU01 a brick:Air_Handler_Unit ;
brick:feeds ns2:VAVRM107A,
ns2:VAVRM107B,
ns2:VAVRM115,
ns2:VAVRM120 ;
brick:hasPoint ns2:AHU.AHU01.CCV,
ns2:AHU.AHU01.Cooling_Valve_Output,
ns2:AHU.AHU01.Mixed_Air_Temp,
ns2:AHU.AHU01.Outside_Air_Temp,
ns2:AHU.AHU01.Return_Air_Temp,
ns2:AHU.AHU01.Supply_Air_Pressure,
ns2:AHU.AHU01.Supply_Air_Temp,
ns2:AHU.AHU01.Supply_Air_Temp_Setpoint ;
brick:isFedBy ns2:chiller .
ns2:AHU02 a brick:Air_Handler_Unit ;
brick:feeds ns2:VAVRM100,
ns2:VAVRM103,
ns2:VAVRM110,
ns2:VAVRM112 ;
brick:hasPoint ns2:AHU.AHU02.CCV,
ns2:AHU.AHU02.Cooling_Valve_Output,
ns2:AHU.AHU02.Mixed_Air_Temp,
ns2:AHU.AHU02.Outside_Air_Temp,
ns2:AHU.AHU02.Return_Air_Temp,
ns2:AHU.AHU02.Supply_Air_Pressure,
ns2:AHU.AHU02.Supply_Air_Temp ;
brick:isFedBy ns2:chiller .
ns2:BLDG a brick:Building ;
brick:area [ brick:hasUnits unit:FT_2 ;
brick:value "9973^^<http://www.w3.org/2001/XMLSchema#integer>" ] .
ns2:damperVAVRM100 a brick:Damper ;
brick:hasPoint ns2:ZONE.AHU02.RM100.Zone_Air_Damper_Command ;
brick:isPartOf ns2:VAVRM100 .
ns2:damperVAVRM103 a brick:Damper ;
brick:hasPoint ns2:ZONE.AHU02.RM103.Zone_Air_Damper_Command ;
brick:isPartOf ns2:VAVRM103 .
ns2:damperVAVRM107A a brick:Damper ;
brick:hasPoint ns2:ZONE.AHU01.RM107A.Zone_Air_Damper_Command ;
brick:isPartOf ns2:VAVRM107A .
ns2:damperVAVRM107B a brick:Damper ;
brick:hasPoint ns2:ZONE.AHU01.RM107B.Zone_Air_Damper_Command ;
brick:isPartOf ns2:VAVRM107B .
ns2:damperVAVRM110 a brick:Damper ;
brick:hasPoint ns2:ZONE.AHU02.RM110.Zone_Air_Damper_Command ;
brick:isPartOf ns2:VAVRM110 .
ns2:damperVAVRM112 a brick:Damper ;
brick:hasPoint ns2:ZONE.AHU02.RM112.Zone_Air_Damper_Command ;
brick:isPartOf ns2:VAVRM112 .
ns2:damperVAVRM115 a brick:Damper ;
brick:hasPoint ns2:ZONE.AHU01.RM115.Zone_Air_Damper_Command ;
brick:isPartOf ns2:VAVRM115 .
ns2:damperVAVRM120 a brick:Damper ;
brick:hasPoint ns2:ZONE.AHU01.RM120.Zone_Air_Damper_Command ;
brick:isPartOf ns2:VAVRM120 .
ns2:floor1 a brick:Floor ;
brick:hasPart ns2:RM100_room,
ns2:RM103_room,
ns2:RM107A_room,
ns2:RM107B_room,
ns2:RM110_room,
ns2:RM112_room,
ns2:RM115_room,
ns2:RM120_room .
ns2:AHU.AHU01.CCV a brick:Cooling_Command,
brick:Valve_Command ;
rdfs:label "AHU.AHU01.CCV" ;
brick:timeseries [ brick:hasTimeseriesId "849c17ad-343b-41b0-bb9b-a2e9d7c47c68" ] .
ns2:AHU.AHU01.Cooling_Valve_Output a brick:Cooling_Command,
brick:Valve_Command ;
rdfs:label "AHU.AHU01.Cooling Valve Output" ;
brick:timeseries [ brick:hasTimeseriesId "d0209901-ed29-4ac8-bc26-1b26a680f40b" ] .
ns2:AHU.AHU01.Mixed_Air_Temp a brick:Mixed_Air_Temperature_Sensor ;
rdfs:label "AHU.AHU01.Mixed Air Temp" .
ns2:AHU.AHU01.Outside_Air_Temp a brick:Outside_Air_Temperature_Sensor ;
rdfs:label "AHU.AHU01.Outside Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "a52505ae-f1b6-451b-ab60-6a9018efcbb0" ] .
ns2:AHU.AHU01.Return_Air_Temp a brick:Return_Air_Temperature_Sensor ;
rdfs:label "AHU.AHU01.Return Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "54317e55-d0b4-4c87-869a-cf15d8d25abc" ] .
ns2:AHU.AHU01.Supply_Air_Pressure a brick:Supply_Air_Static_Pressure_Sensor ;
rdfs:label "AHU.AHU01.Supply Air Pressure" ;
brick:timeseries [ brick:hasTimeseriesId "3ce2fdb1-469b-47eb-9ca4-c8ebcde6c713" ] .
ns2:AHU.AHU01.Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "AHU.AHU01.Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "0481a1cf-1092-4bd2-92ed-376f5c24bee5" ] .
ns2:AHU.AHU01.Supply_Air_Temp_Setpoint a brick:Supply_Air_Temperature_Setpoint ;
rdfs:label "AHU.AHU01.Supply Air Temp Setpoint" ;
brick:timeseries [ brick:hasTimeseriesId "d50328c3-9410-4217-a667-38526546551c" ] .
ns2:AHU.AHU02.CCV a brick:Cooling_Command,
brick:Valve_Command ;
rdfs:label "AHU.AHU02.CCV" ;
brick:timeseries [ brick:hasTimeseriesId "25f61eb5-d498-40b4-ad0e-9b01325c67b6" ] .
ns2:AHU.AHU02.Cooling_Valve_Output a brick:Cooling_Command,
brick:Valve_Command ;
rdfs:label "AHU.AHU02.Cooling Valve Output" ;
brick:timeseries [ brick:hasTimeseriesId "f3bfc8c8-c769-41fa-9b56-367c61ba2ffa" ] .
ns2:AHU.AHU02.Mixed_Air_Temp a brick:Mixed_Air_Temperature_Sensor ;
rdfs:label "AHU.AHU02.Mixed Air Temp" .
ns2:AHU.AHU02.Outside_Air_Temp a brick:Outside_Air_Temperature_Sensor ;
rdfs:label "AHU.AHU02.Outside Air Temp" .
ns2:AHU.AHU02.Return_Air_Temp a brick:Return_Air_Temperature_Sensor ;
rdfs:label "AHU.AHU02.Return Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "64abb724-b682-4f14-898d-db887359bc71" ] .
ns2:AHU.AHU02.Supply_Air_Pressure a brick:Supply_Air_Static_Pressure_Sensor ;
rdfs:label "AHU.AHU02.Supply Air Pressure" ;
brick:timeseries [ brick:hasTimeseriesId "aa6cbab8-f5c7-4bde-a4c1-46ede7f17c42" ] .
ns2:AHU.AHU02.Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "AHU.AHU02.Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "de577867-dc26-4a7f-afa5-c7257f2da030" ] .
ns2:CHW.Building_Chilled_Water_Return_Temp a brick:Chilled_Water_Return_Temperature_Sensor ;
rdfs:label "CHW.Building Chilled Water Return Temp" ;
brick:timeseries [ brick:hasTimeseriesId "2fd18842-a01f-44cc-8376-036a332ca04f" ] .
ns2:CHW.Building_Chilled_Water_Supply_Temp a brick:Chilled_Water_Supply_Temperature_Sensor ;
rdfs:label "CHW.Building Chilled Water Supply Temp" ;
brick:timeseries [ brick:hasTimeseriesId "a4232bbc-652c-4574-847b-4a7c4a4d966f" ] .
ns2:CHW.ECONOMIZER a brick:Damper_Position_Command ;
rdfs:label "CHW.ECONOMIZER" ;
brick:timeseries [ brick:hasTimeseriesId "d79fd637-8854-4c84-abff-a787c97ca884" ] .
ns2:CHW.Loop_Chilled_Water_Return_Temp a brick:Chilled_Water_Return_Temperature_Sensor ;
rdfs:label "CHW.Loop Chilled Water Return Temp" ;
brick:timeseries [ brick:hasTimeseriesId "64be6ecd-1960-4a12-bc62-d3454204e2c1" ] .
ns2:CHW.Loop_Chilled_Water_Supply_Temp a brick:Chilled_Water_Supply_Temperature_Sensor ;
rdfs:label "CHW.Loop Chilled Water Supply Temp" ;
brick:timeseries [ brick:hasTimeseriesId "d7c6db4c-10e4-4569-b292-925b177b9dc6" ] .
ns4:Stop a brick:Start_Stop_Command ;
rdfs:label "CHW.Pump1_Start/Stop" ;
brick:timeseries [ brick:hasTimeseriesId "ece06123-f7a2-4e0e-8292-d4ce667e8c3d" ] .
ns2:ZONE.AHU01.RM107A.Zone_Air_Control_Temp a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU01.RM107A.Zone Air Control Temp" ;
brick:timeseries [ brick:hasTimeseriesId "a99860c0-f693-42b8-acce-342a2681efb2" ] .
ns2:ZONE.AHU01.RM107A.Zone_Air_Damper_Command a brick:Damper_Position_Setpoint ;
rdfs:label "ZONE.AHU01.RM107A.Zone Air Damper Command" ;
brick:timeseries [ brick:hasTimeseriesId "30e70beb-717f-46fa-8ff4-52e4eb21cd89" ] .
ns2:ZONE.AHU01.RM107A.Zone_Air_Temp a brick:Zone_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU01.RM107A.Zone Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "f1b2906b-2b63-47c1-9c1d-ae50618f9bb9" ] .
ns2:ZONE.AHU01.RM107A.Zone_Air_Temp_Setpoint a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU01.RM107A.Zone Air Temp Setpoint" ;
brick:timeseries [ brick:hasTimeseriesId "97a6f762-bccb-400b-9da8-94a432151f5c" ] .
ns2:ZONE.AHU01.RM107A.Zone_Heating_Mode a brick:Heating_Command ;
rdfs:label "ZONE.AHU01.RM107A.Zone Heating Mode" .
ns2:ZONE.AHU01.RM107A.Zone_Percent_Air_Flow a brick:Air_Flow_Sensor ;
rdfs:label "ZONE.AHU01.RM107A.Zone Percent Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "29aeaf32-9827-49b1-8d9d-6d973ee2653c" ] .
ns2:ZONE.AHU01.RM107A.Zone_Reheat_Valve_Command a brick:Command ;
rdfs:label "ZONE.AHU01.RM107A.Zone Reheat Valve Command" ;
brick:timeseries [ brick:hasTimeseriesId "80ea00dd-04fd-435b-a639-3663b2ebc24c" ] .
ns2:ZONE.AHU01.RM107A.Zone_Supply_Air_Flow a brick:Supply_Air_Flow_Sensor ;
rdfs:label "ZONE.AHU01.RM107A.Zone Supply Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "069e8b5e-185f-4129-a243-03fc502239d4" ] .
ns2:ZONE.AHU01.RM107A.Zone_Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU01.RM107A.Zone Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "0a07c546-320a-4a0b-9fc4-a3a54d5e8d90" ] .
ns2:ZONE.AHU01.RM107B.Zone_Air_Control_Temp a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU01.RM107B.Zone Air Control Temp" ;
brick:timeseries [ brick:hasTimeseriesId "853d2889-1929-4b3c-9919-c3829973a753" ] .
ns2:ZONE.AHU01.RM107B.Zone_Air_Damper_Command a brick:Damper_Position_Setpoint ;
rdfs:label "ZONE.AHU01.RM107B.Zone Air Damper Command" ;
brick:timeseries [ brick:hasTimeseriesId "713ad6f8-56ae-495b-a6e4-8158ad5460db" ] .
ns2:ZONE.AHU01.RM107B.Zone_Air_Temp a brick:Zone_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU01.RM107B.Zone Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "ca0764b5-079c-431d-a4ee-60ff75b92bf8" ] .
ns2:ZONE.AHU01.RM107B.Zone_Air_Temp_Setpoint a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU01.RM107B.Zone Air Temp Setpoint" ;
brick:timeseries [ brick:hasTimeseriesId "baa08d2c-f937-4188-a751-ae127e94c2d5" ] .
ns2:ZONE.AHU01.RM107B.Zone_Heating_Mode a brick:Heating_Command ;
rdfs:label "ZONE.AHU01.RM107B.Zone Heating Mode" .
ns2:ZONE.AHU01.RM107B.Zone_Percent_Air_Flow a brick:Air_Flow_Sensor ;
rdfs:label "ZONE.AHU01.RM107B.Zone Percent Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "88f751d8-9f64-4d6e-985d-590901669bda" ] .
ns2:ZONE.AHU01.RM107B.Zone_Reheat_Valve_Command a brick:Command ;
rdfs:label "ZONE.AHU01.RM107B.Zone Reheat Valve Command" ;
brick:timeseries [ brick:hasTimeseriesId "220c62ce-0063-4f70-aec3-7c5caf7cf9bc" ] .
ns2:ZONE.AHU01.RM107B.Zone_Supply_Air_Flow a brick:Supply_Air_Flow_Sensor ;
rdfs:label "ZONE.AHU01.RM107B.Zone Supply Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "4f04bb7d-260e-4cee-a7da-9ff5872a7866" ] .
ns2:ZONE.AHU01.RM107B.Zone_Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU01.RM107B.Zone Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "e913807e-d3a1-497a-a072-01b738c4819f" ] .
ns2:ZONE.AHU01.RM115.Zone_Air_Control_Temp a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU01.RM115.Zone Air Control Temp" ;
brick:timeseries [ brick:hasTimeseriesId "69bde0d1-20d1-444c-a4d5-4dc6ab86dc6b" ] .
ns2:ZONE.AHU01.RM115.Zone_Air_Damper_Command a brick:Damper_Position_Setpoint ;
rdfs:label "ZONE.AHU01.RM115.Zone Air Damper Command" ;
brick:timeseries [ brick:hasTimeseriesId "d23760d3-f13d-438d-9144-ccbd363aa109" ] .
ns2:ZONE.AHU01.RM115.Zone_Air_Temp a brick:Zone_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU01.RM115.Zone Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "8368a065-a593-4617-a92d-3d047861d86e" ] .
ns2:ZONE.AHU01.RM115.Zone_Air_Temp_Setpoint a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU01.RM115.Zone Air Temp Setpoint" ;
brick:timeseries [ brick:hasTimeseriesId "d22d42e0-41c9-4a21-9141-e0a848208533" ] .
ns2:ZONE.AHU01.RM115.Zone_Heating_Mode a brick:Heating_Command ;
rdfs:label "ZONE.AHU01.RM115.Zone Heating Mode" .
ns2:ZONE.AHU01.RM115.Zone_Percent_Air_Flow a brick:Air_Flow_Sensor ;
rdfs:label "ZONE.AHU01.RM115.Zone Percent Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "2b07fbea-2907-4e86-a114-99ccd437df8a" ] .
ns2:ZONE.AHU01.RM115.Zone_Reheat_Valve_Command a brick:Command ;
rdfs:label "ZONE.AHU01.RM115.Zone Reheat Valve Command" ;
brick:timeseries [ brick:hasTimeseriesId "58da756a-fc0c-447d-b3c1-bf1cbfb5feee" ] .
ns2:ZONE.AHU01.RM115.Zone_Supply_Air_Flow a brick:Supply_Air_Flow_Sensor ;
rdfs:label "ZONE.AHU01.RM115.Zone Supply Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "062881ba-47d6-4ca3-a097-34bf186db590" ] .
ns2:ZONE.AHU01.RM115.Zone_Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU01.RM115.Zone Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "1d412083-8513-4af4-ab6a-98ecc8719f38" ] .
ns2:ZONE.AHU01.RM120.Zone_Air_Control_Temp a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU01.RM120.Zone Air Control Temp" ;
brick:timeseries [ brick:hasTimeseriesId "24c6c142-d5e8-4726-b056-154a4594d885" ] .
ns2:ZONE.AHU01.RM120.Zone_Air_Damper_Command a brick:Damper_Position_Setpoint ;
rdfs:label "ZONE.AHU01.RM120.Zone Air Damper Command" ;
brick:timeseries [ brick:hasTimeseriesId "e4cfe3c2-7657-4e51-a94d-e2636f0aab18" ] .
ns2:ZONE.AHU01.RM120.Zone_Air_Temp a brick:Zone_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU01.RM120.Zone Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "c35e8c50-55df-4d30-a816-acac325e46d4" ] .
ns2:ZONE.AHU01.RM120.Zone_Air_Temp_Setpoint a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU01.RM120.Zone Air Temp Setpoint" ;
brick:timeseries [ brick:hasTimeseriesId "427bdd4a-7ab5-4315-82ba-5e8f819fcbb1" ] .
ns2:ZONE.AHU01.RM120.Zone_Heating_Mode a brick:Heating_Command ;
rdfs:label "ZONE.AHU01.RM120.Zone Heating Mode" .
ns2:ZONE.AHU01.RM120.Zone_Percent_Air_Flow a brick:Air_Flow_Sensor ;
rdfs:label "ZONE.AHU01.RM120.Zone Percent Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "b34ffaea-3f0a-4abd-9094-ccd18e5c56c9" ] .
ns2:ZONE.AHU01.RM120.Zone_Reheat_Valve_Command a brick:Command ;
rdfs:label "ZONE.AHU01.RM120.Zone Reheat Valve Command" ;
brick:timeseries [ brick:hasTimeseriesId "4d975209-1ef5-4e36-9acc-e74b50d5ad31" ] .
ns2:ZONE.AHU01.RM120.Zone_Supply_Air_Flow a brick:Supply_Air_Flow_Sensor ;
rdfs:label "ZONE.AHU01.RM120.Zone Supply Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "42619a81-4074-4309-9098-64b77235afeb" ] .
ns2:ZONE.AHU01.RM120.Zone_Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU01.RM120.Zone Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "122d9f60-cc9c-4b28-95a0-5585713fc8e9" ] .
ns2:ZONE.AHU02.RM100.Zone_Air_Control_Temp a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU02.RM100.Zone Air Control Temp" ;
brick:timeseries [ brick:hasTimeseriesId "bf982460-8151-432c-a928-87c924886d38" ] .
ns2:ZONE.AHU02.RM100.Zone_Air_Damper_Command a brick:Damper_Position_Setpoint ;
rdfs:label "ZONE.AHU02.RM100.Zone Air Damper Command" ;
brick:timeseries [ brick:hasTimeseriesId "852b53c5-c805-4030-82f7-d58f73ab1b0b" ] .
ns2:ZONE.AHU02.RM100.Zone_Air_Temp a brick:Zone_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU02.RM100.Zone Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "ce35a53a-bbf5-491f-a4cd-2685395d0665" ] .
ns2:ZONE.AHU02.RM100.Zone_Air_Temp_Setpoint a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU02.RM100.Zone Air Temp Setpoint" ;
brick:timeseries [ brick:hasTimeseriesId "e283e0a5-99b1-47c6-9313-540ca777b7c5" ] .
ns2:ZONE.AHU02.RM100.Zone_Heating_Mode a brick:Heating_Command ;
rdfs:label "ZONE.AHU02.RM100.Zone Heating Mode" .
ns2:ZONE.AHU02.RM100.Zone_Percent_Air_Flow a brick:Air_Flow_Sensor ;
rdfs:label "ZONE.AHU02.RM100.Zone Percent Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "3178f935-2ef3-4a55-925b-d62c155237e1" ] .
ns2:ZONE.AHU02.RM100.Zone_Reheat_Valve_Command a brick:Command ;
rdfs:label "ZONE.AHU02.RM100.Zone Reheat Valve Command" ;
brick:timeseries [ brick:hasTimeseriesId "78c103f8-1179-4df7-9b30-19f4bdd89dac" ] .
ns2:ZONE.AHU02.RM100.Zone_Supply_Air_Flow a brick:Supply_Air_Flow_Sensor ;
rdfs:label "ZONE.AHU02.RM100.Zone Supply Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "28c78169-b187-4efd-951b-384d516cd504" ] .
ns2:ZONE.AHU02.RM100.Zone_Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU02.RM100.Zone Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "ae92f608-859f-489d-9363-d461f18cea78" ] .
ns2:ZONE.AHU02.RM103.Zone_Air_Control_Temp a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU02.RM103.Zone Air Control Temp" ;
brick:timeseries [ brick:hasTimeseriesId "66fcfc3c-ca14-429d-ae65-0633c111073e" ] .
ns2:ZONE.AHU02.RM103.Zone_Air_Damper_Command a brick:Damper_Position_Setpoint ;
rdfs:label "ZONE.AHU02.RM103.Zone Air Damper Command" ;
brick:timeseries [ brick:hasTimeseriesId "eb74d290-3e79-4e46-ba4f-39acae483d72" ] .
ns2:ZONE.AHU02.RM103.Zone_Air_Temp a brick:Zone_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU02.RM103.Zone Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "4e05069e-78cc-4bda-a8e2-ae3d15f1c604" ] .
ns2:ZONE.AHU02.RM103.Zone_Air_Temp_Setpoint a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU02.RM103.Zone Air Temp Setpoint" ;
brick:timeseries [ brick:hasTimeseriesId "79d29db2-307b-4d96-b4e9-e9ebbaea00c0" ] .
ns2:ZONE.AHU02.RM103.Zone_Heating_Mode a brick:Heating_Command ;
rdfs:label "ZONE.AHU02.RM103.Zone Heating Mode" .
ns2:ZONE.AHU02.RM103.Zone_Percent_Air_Flow a brick:Air_Flow_Sensor ;
rdfs:label "ZONE.AHU02.RM103.Zone Percent Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "05d7494a-4653-4c30-8f66-9eaf964ee1a5" ] .
ns2:ZONE.AHU02.RM103.Zone_Reheat_Valve_Command a brick:Command ;
rdfs:label "ZONE.AHU02.RM103.Zone Reheat Valve Command" ;
brick:timeseries [ brick:hasTimeseriesId "965b71e7-4315-4dd1-a94a-d47b3467ba35" ] .
ns2:ZONE.AHU02.RM103.Zone_Supply_Air_Flow a brick:Supply_Air_Flow_Sensor ;
rdfs:label "ZONE.AHU02.RM103.Zone Supply Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "8d9f309f-9729-4fb8-9d47-d095b590d00d" ] .
ns2:ZONE.AHU02.RM103.Zone_Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU02.RM103.Zone Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "9f8a2092-28f2-4731-ba2e-2d0608af219c" ] .
ns2:ZONE.AHU02.RM110.Zone_Air_Control_Temp a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU02.RM110.Zone Air Control Temp" ;
brick:timeseries [ brick:hasTimeseriesId "69df025f-2405-4c8a-a64b-f4315229081e" ] .
ns2:ZONE.AHU02.RM110.Zone_Air_Damper_Command a brick:Damper_Position_Setpoint ;
rdfs:label "ZONE.AHU02.RM110.Zone Air Damper Command" ;
brick:timeseries [ brick:hasTimeseriesId "e257e073-e0bf-426c-871e-ff5c1375c3b8" ] .
ns2:ZONE.AHU02.RM110.Zone_Air_Temp a brick:Zone_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU02.RM110.Zone Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "1634482d-8b5d-45a2-bea1-661202b3e337" ] .
ns2:ZONE.AHU02.RM110.Zone_Air_Temp_Setpoint a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU02.RM110.Zone Air Temp Setpoint" ;
brick:timeseries [ brick:hasTimeseriesId "83d51b64-b30d-498a-9526-52a597bf18b6" ] .
ns2:ZONE.AHU02.RM110.Zone_Heating_Mode a brick:Heating_Command ;
rdfs:label "ZONE.AHU02.RM110.Zone Heating Mode" .
ns2:ZONE.AHU02.RM110.Zone_Percent_Air_Flow a brick:Air_Flow_Sensor ;
rdfs:label "ZONE.AHU02.RM110.Zone Percent Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "01f5cba4-111b-42a4-bbb4-4844ec3ad6f6" ] .
ns2:ZONE.AHU02.RM110.Zone_Reheat_Valve_Command a brick:Command ;
rdfs:label "ZONE.AHU02.RM110.Zone Reheat Valve Command" ;
brick:timeseries [ brick:hasTimeseriesId "d4011153-1c79-49fb-9697-90f5f3f6044a" ] .
ns2:ZONE.AHU02.RM110.Zone_Supply_Air_Flow a brick:Supply_Air_Flow_Sensor ;
rdfs:label "ZONE.AHU02.RM110.Zone Supply Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "06b9bf19-c0a2-4804-b917-665857b495a2" ] .
ns2:ZONE.AHU02.RM110.Zone_Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU02.RM110.Zone Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "6162aa89-3ac4-40bd-af5d-69711606181f" ] .
ns2:ZONE.AHU02.RM112.Zone_Air_Control_Temp a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU02.RM112.Zone Air Control Temp" ;
brick:timeseries [ brick:hasTimeseriesId "fa630d31-f6eb-4fa5-91f2-73e94ed55694" ] .
ns2:ZONE.AHU02.RM112.Zone_Air_Damper_Command a brick:Damper_Position_Setpoint ;
rdfs:label "ZONE.AHU02.RM112.Zone Air Damper Command" ;
brick:timeseries [ brick:hasTimeseriesId "cc5c6ad9-8b8c-4291-81d7-07f7cb8a685b" ] .
ns2:ZONE.AHU02.RM112.Zone_Air_Temp a brick:Zone_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU02.RM112.Zone Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "b8f2ed23-f593-46a6-a139-1081d29d5a1d" ] .
ns2:ZONE.AHU02.RM112.Zone_Air_Temp_Setpoint a brick:Zone_Air_Temperature_Setpoint ;
rdfs:label "ZONE.AHU02.RM112.Zone Air Temp Setpoint" ;
brick:timeseries [ brick:hasTimeseriesId "fb4379f0-a29c-4647-8228-ea88c3525cab" ] .
ns2:ZONE.AHU02.RM112.Zone_Heating_Mode a brick:Heating_Command ;
rdfs:label "ZONE.AHU02.RM112.Zone Heating Mode" .
ns2:ZONE.AHU02.RM112.Zone_Percent_Air_Flow a brick:Air_Flow_Sensor ;
rdfs:label "ZONE.AHU02.RM112.Zone Percent Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "060e62cb-546f-4312-a692-6f15521b3352" ] .
ns2:ZONE.AHU02.RM112.Zone_Reheat_Valve_Command a brick:Command ;
rdfs:label "ZONE.AHU02.RM112.Zone Reheat Valve Command" ;
brick:timeseries [ brick:hasTimeseriesId "fc48ab24-1d7b-42c6-bef9-be82403eea9a" ] .
ns2:ZONE.AHU02.RM112.Zone_Supply_Air_Flow a brick:Supply_Air_Flow_Sensor ;
rdfs:label "ZONE.AHU02.RM112.Zone Supply Air Flow" ;
brick:timeseries [ brick:hasTimeseriesId "d33f5c94-4738-47c8-b4d1-f83f7ed5f8b7" ] .
ns2:ZONE.AHU02.RM112.Zone_Supply_Air_Temp a brick:Supply_Air_Temperature_Sensor ;
rdfs:label "ZONE.AHU02.RM112.Zone Supply Air Temp" ;
brick:timeseries [ brick:hasTimeseriesId "2c80a551-03e0-447a-a5fd-881688b1d866" ] .
ns2:RM100 a brick:HVAC_Zone ;
brick:hasPart ns2:RM100_room .
ns2:RM103 a brick:HVAC_Zone ;
brick:hasPart ns2:RM103_room .
ns2:RM107A a brick:HVAC_Zone ;
brick:hasPart ns2:RM107A_room .
ns2:RM107B a brick:HVAC_Zone ;
brick:hasPart ns2:RM107B_room .
ns2:RM110 a brick:HVAC_Zone ;
brick:hasPart ns2:RM110_room .
ns2:RM112 a brick:HVAC_Zone ;
brick:hasPart ns2:RM112_room .
ns2:RM115 a brick:HVAC_Zone ;
brick:hasPart ns2:RM115_room .
ns2:RM120 a brick:HVAC_Zone ;
brick:hasPart ns2:RM120_room .
ns2:RM100_room a brick:Room .
ns2:RM103_room a brick:Room .
ns2:RM107A_room a brick:Room .
ns2:RM107B_room a brick:Room .
ns2:RM110_room a brick:Room .
ns2:RM112_room a brick:Room .
ns2:RM115_room a brick:Room .
ns2:RM120_room a brick:Room .
ns2:VAVRM100 a brick:VAV ;
brick:feeds ns2:RM100 ;
brick:hasPoint ns2:ZONE.AHU02.RM100.Zone_Air_Control_Temp,
ns2:ZONE.AHU02.RM100.Zone_Air_Temp,
ns2:ZONE.AHU02.RM100.Zone_Air_Temp_Setpoint,
ns2:ZONE.AHU02.RM100.Zone_Heating_Mode,
ns2:ZONE.AHU02.RM100.Zone_Percent_Air_Flow,
ns2:ZONE.AHU02.RM100.Zone_Reheat_Valve_Command,
ns2:ZONE.AHU02.RM100.Zone_Supply_Air_Flow,
ns2:ZONE.AHU02.RM100.Zone_Supply_Air_Temp .
ns2:VAVRM103 a brick:VAV ;
brick:feeds ns2:RM103 ;
brick:hasPoint ns2:ZONE.AHU02.RM103.Zone_Air_Control_Temp,
ns2:ZONE.AHU02.RM103.Zone_Air_Temp,
ns2:ZONE.AHU02.RM103.Zone_Air_Temp_Setpoint,
ns2:ZONE.AHU02.RM103.Zone_Heating_Mode,
ns2:ZONE.AHU02.RM103.Zone_Percent_Air_Flow,
ns2:ZONE.AHU02.RM103.Zone_Reheat_Valve_Command,
ns2:ZONE.AHU02.RM103.Zone_Supply_Air_Flow,
ns2:ZONE.AHU02.RM103.Zone_Supply_Air_Temp .
ns2:VAVRM107A a brick:VAV ;
brick:feeds ns2:RM107A ;
brick:hasPoint ns2:ZONE.AHU01.RM107A.Zone_Air_Control_Temp,
ns2:ZONE.AHU01.RM107A.Zone_Air_Temp,
ns2:ZONE.AHU01.RM107A.Zone_Air_Temp_Setpoint,
ns2:ZONE.AHU01.RM107A.Zone_Heating_Mode,
ns2:ZONE.AHU01.RM107A.Zone_Percent_Air_Flow,
ns2:ZONE.AHU01.RM107A.Zone_Reheat_Valve_Command,
ns2:ZONE.AHU01.RM107A.Zone_Supply_Air_Flow,
ns2:ZONE.AHU01.RM107A.Zone_Supply_Air_Temp .
ns2:VAVRM107B a brick:VAV ;
brick:feeds ns2:RM107B ;
brick:hasPoint ns2:ZONE.AHU01.RM107B.Zone_Air_Control_Temp,
ns2:ZONE.AHU01.RM107B.Zone_Air_Temp,
ns2:ZONE.AHU01.RM107B.Zone_Air_Temp_Setpoint,
ns2:ZONE.AHU01.RM107B.Zone_Heating_Mode,
ns2:ZONE.AHU01.RM107B.Zone_Percent_Air_Flow,
ns2:ZONE.AHU01.RM107B.Zone_Reheat_Valve_Command,
ns2:ZONE.AHU01.RM107B.Zone_Supply_Air_Flow,
ns2:ZONE.AHU01.RM107B.Zone_Supply_Air_Temp .
ns2:VAVRM110 a brick:VAV ;
brick:feeds ns2:RM110 ;
brick:hasPoint ns2:ZONE.AHU02.RM110.Zone_Air_Control_Temp,
ns2:ZONE.AHU02.RM110.Zone_Air_Temp,
ns2:ZONE.AHU02.RM110.Zone_Air_Temp_Setpoint,
ns2:ZONE.AHU02.RM110.Zone_Heating_Mode,
ns2:ZONE.AHU02.RM110.Zone_Percent_Air_Flow,
ns2:ZONE.AHU02.RM110.Zone_Reheat_Valve_Command,
ns2:ZONE.AHU02.RM110.Zone_Supply_Air_Flow,
ns2:ZONE.AHU02.RM110.Zone_Supply_Air_Temp .
ns2:VAVRM112 a brick:VAV ;
brick:feeds ns2:RM112 ;
brick:hasPoint ns2:ZONE.AHU02.RM112.Zone_Air_Control_Temp,
ns2:ZONE.AHU02.RM112.Zone_Air_Temp,
ns2:ZONE.AHU02.RM112.Zone_Air_Temp_Setpoint,
ns2:ZONE.AHU02.RM112.Zone_Heating_Mode,
ns2:ZONE.AHU02.RM112.Zone_Percent_Air_Flow,
ns2:ZONE.AHU02.RM112.Zone_Reheat_Valve_Command,
ns2:ZONE.AHU02.RM112.Zone_Supply_Air_Flow,
ns2:ZONE.AHU02.RM112.Zone_Supply_Air_Temp .
ns2:VAVRM115 a brick:VAV ;
brick:feeds ns2:RM115 ;
brick:hasPoint ns2:ZONE.AHU01.RM115.Zone_Air_Control_Temp,
ns2:ZONE.AHU01.RM115.Zone_Air_Temp,
ns2:ZONE.AHU01.RM115.Zone_Air_Temp_Setpoint,
ns2:ZONE.AHU01.RM115.Zone_Heating_Mode,
ns2:ZONE.AHU01.RM115.Zone_Percent_Air_Flow,
ns2:ZONE.AHU01.RM115.Zone_Reheat_Valve_Command,
ns2:ZONE.AHU01.RM115.Zone_Supply_Air_Flow,
ns2:ZONE.AHU01.RM115.Zone_Supply_Air_Temp .
ns2:VAVRM120 a brick:VAV ;
brick:feeds ns2:RM120 ;
brick:hasPoint ns2:ZONE.AHU01.RM120.Zone_Air_Control_Temp,
ns2:ZONE.AHU01.RM120.Zone_Air_Temp,
ns2:ZONE.AHU01.RM120.Zone_Air_Temp_Setpoint,
ns2:ZONE.AHU01.RM120.Zone_Heating_Mode,
ns2:ZONE.AHU01.RM120.Zone_Percent_Air_Flow,
ns2:ZONE.AHU01.RM120.Zone_Reheat_Valve_Command,
ns2:ZONE.AHU01.RM120.Zone_Supply_Air_Flow,
ns2:ZONE.AHU01.RM120.Zone_Supply_Air_Temp .
ns2:chiller a brick:Chiller ;
brick:hasPoint ns2:CHW.Building_Chilled_Water_Return_Temp,
ns2:CHW.Building_Chilled_Water_Supply_Temp,
ns2:CHW.ECONOMIZER,
ns2:CHW.Loop_Chilled_Water_Return_Temp,
ns2:CHW.Loop_Chilled_Water_Supply_Temp,
ns4:Stop .
ns2:camera a brick:Surveillance_Camera .
ns2:temp a brick:Temperature_Sensor .
+125
View File
@@ -0,0 +1,125 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# BlenderBIM Add-on is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import os
import bpy
import ifcopenshell
import blenderbim.core.tool
import blenderbim.tool as tool
from test.bim.bootstrap import NewFile
from blenderbim.tool.brick import Brick as subject
from blenderbim.tool.brick import BrickStore
class TestImplementsTool(NewFile):
def test_run(self):
assert isinstance(subject(), blenderbim.core.tool.Brick)
class TestAddBrickBreadcrumb(NewFile):
def test_run(self):
subject.set_active_brick_class("brick_class")
subject.add_brick_breadcrumb()
assert bpy.context.scene.BIMBrickProperties.brick_breadcrumbs[0].name == "brick_class"
subject.add_brick_breadcrumb()
assert bpy.context.scene.BIMBrickProperties.brick_breadcrumbs[1].name == "brick_class"
class TestClearBrickBrowser(NewFile):
def test_run(self):
bpy.context.scene.BIMBrickProperties.bricks.add()
subject.clear_brick_browser()
assert len(bpy.context.scene.BIMBrickProperties.bricks) == 0
class TestClearProject(NewFile):
def test_run(self):
BrickStore.graph = "graph"
bpy.context.scene.BIMBrickProperties.active_brick_class == "brick_class"
bpy.context.scene.BIMBrickProperties.brick_breadcrumbs.add().name = "foo"
subject.clear_project()
assert BrickStore.graph is None
assert bpy.context.scene.BIMBrickProperties.active_brick_class == ""
assert len(bpy.context.scene.BIMBrickProperties.brick_breadcrumbs) == 0
class TestGetItemClass(NewFile):
def test_run(self):
TestLoadBrickFile().test_run()
assert subject.get_item_class("http://buildsys.org/ontologies/bldg#chiller") == "Chiller"
class TestImportBrickClasses(NewFile):
def test_run(self):
TestLoadBrickFile().test_run()
subject.import_brick_classes("Class")
assert len(bpy.context.scene.BIMBrickProperties.bricks) == 4
brick = bpy.context.scene.BIMBrickProperties.bricks[0]
assert brick.name == "Equipment"
assert brick.uri == "https://brickschema.org/schema/Brick#Equipment"
assert brick.total_items == 20
brick = bpy.context.scene.BIMBrickProperties.bricks[1]
assert brick.name == "Location"
assert brick.uri == "https://brickschema.org/schema/Brick#Location"
assert brick.total_items == 18
class TestImportBrickItems(NewFile):
def test_run(self):
TestLoadBrickFile().test_run()
subject.import_brick_items("Room")
assert len(bpy.context.scene.BIMBrickProperties.bricks) == 8
brick = bpy.context.scene.BIMBrickProperties.bricks[0]
assert brick.name == "RM100_room"
assert brick.uri == "http://buildsys.org/ontologies/bldg#RM100_room"
assert brick.total_items == 0
brick = bpy.context.scene.BIMBrickProperties.bricks[1]
assert brick.name == "RM103_room"
assert brick.uri == "http://buildsys.org/ontologies/bldg#RM103_room"
assert brick.total_items == 0
class TestLoadBrickFile(NewFile):
def test_run(self):
cwd = os.path.dirname(os.path.realpath(__file__))
filepath = os.path.join(cwd, "..", "files", "building.ttl")
subject.load_brick_file(filepath)
assert BrickStore.graph
class TestPopBrickBreadcrumb(NewFile):
def test_run(self):
bpy.context.scene.BIMBrickProperties.brick_breadcrumbs.add().name = "foo"
bpy.context.scene.BIMBrickProperties.brick_breadcrumbs.add().name = "bar"
assert subject.pop_brick_breadcrumb() == "bar"
assert len(bpy.context.scene.BIMBrickProperties.brick_breadcrumbs) == 1
assert bpy.context.scene.BIMBrickProperties.brick_breadcrumbs[0].name == "foo"
class TestSelectBrowserItem(NewFile):
def test_run(self):
subject.set_active_brick_class("brick_class")
assert bpy.context.scene.BIMBrickProperties.active_brick_class == "brick_class"
class TestSetActiveBrickClass(NewFile):
def test_run(self):
bpy.context.scene.BIMBrickProperties.bricks.add().name = "foo"
bpy.context.scene.BIMBrickProperties.bricks.add().name = "bar"
subject.select_browser_item("namespace#bar")
assert bpy.context.scene.BIMBrickProperties.active_brick_index == 1