Intelligent Buildings Agents Laboratory (IBAL)

Warning

This model has not been updated since the last revision of the 223P ontology, and it may not pass validation. 223P was last updated on 2025-06-24 17:37:14. The model file was last updated on 2024-09-12 16:11:46

Intelligent Buildings Agents Laboratory (IBAL)#

The IBAL is a mixed system lab at NIST that is able to test commercial equipment under simulated conditions. For more information, vist the IBAL Database.

Schematic view#

image

Downloads#

What are these files?
  • Turtle file (original): This is the original source Turtle file that was provided to models.open223.info, usually as the output of some model creation tool.

  • Turtle file (compiled): This is the original Turtle file with all inferred relationships and values added through SHACL inference against the 223P ontology and other dependencies. You should use this file for any further processing. It does not contain any of the ontologies.

  • Turtle file (with all imports): This is the compiled Turtle file with all imports included in the file (223P ontology, QUDT ontology, and others). This is helpful when you do not want to deal with downloading and managing ontology dependencies. It is also much larger than the compiled file.

  • JSON-LD file (original): This is the original Turtle file converted to the JSON-LD format.

Turtle is a syntax for RDF (Resource Description Framework) that is easy to read and write. It is a popular format for representing linked data. Parsers and serializers are available in many programming languages. JSON-LD is a JSON-based format for linked data that is easy to use with JavaScript and other web technologies.

Queries#

Description

Query URL

Zone/room temperature sensors

Query Link

Search for all the sensors along the connections and the associated property they’re observing.

Query Link

Sensors in AHU1 and what units the properties are measured in

Query Link

Model Components#

Load and Validate Model#

This code uses the BuildingMOTIF library to load the 223P ontology and the model file into a temporary in-memory instance. It then validates the model against the ontology. If the model is invalid, it will print the validation report.

To run this code, you need to have Java installed on your system. If you do not have Java installed, you can remove the shacl_engine='topquadrant' parameter from the BuildingMOTIF constructor. Be warned that without the shacl_engine='topquadrant' parameter, the validation process will be slower.

from buildingmotif import BuildingMOTIF
from buildingmotif.dataclasses import Library, Model
import ontoenv
import logging

# Create a BuildingMOTIF object. If you do not have Java installed, remove the "shacl_engine" parameter
bm = BuildingMOTIF('sqlite://', shacl_engine='topquadrant', log_level=logging.ERROR)

# load 223P library. We will load a recent copy from the models.open223.info
# git repository; later, we will load this from the location of the actual standard
s223 = Library.load(ontology_graph="https://open223.info/223p.ttl")
unit = Library.load(ontology_graph="http://qudt.org/3.1.1/vocab/unit")
quantitykind = Library.load(ontology_graph="http://qudt.org/3.1.1/vocab/quantitykind")

# load the model into the BuildingMOTIF instance
model = Model.create("urn:NIST-IBAL")
model.graph.parse("https://models.open223.info/NIST-IBAL.ttl")

# validate the model against 223P ontology
ctx = model.validate([s223.get_shape_collection(),
                      unit.get_shape_collection(),
                      quantitykind.get_shape_collection()],
                     error_on_missing_imports=False)

# print the validation result
print(f"Model is valid: {ctx.valid}")

# if the model is invalid, print the validation report
if not ctx.valid:
    print(ctx.report_string[:1000]) # first 1000 characters of the report

# BuildingMOTIF can also interpret the report to provide recommendations on fixes
for focus_node, diffs in ctx.get_reasons_with_severity("Violation").items():
    if len(diffs) == 0:
        continue
    print(focus_node)
    for diff in diffs:
        print("  - " + diff.reason())
Model is valid: 0
@prefix ns3: <http://data.ashrae.org/standard223#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

[] a sh:ValidationReport ;
    sh:conforms false ;
    sh:result [ a sh:ValidationResult ;
            sh:focusNode <http://example.org/IBAL#Jnc30-ICP2> ;
            sh:resultMessage "s223: `ConnectionPoint` <http://example.org/IBAL#Jnc30-ICP2> probably needs an association with a `Connection`, or use of `hasOptionalConnectionPoint` or `hasBoundaryConnectionPoint` qualifiers." ;
            sh:resultPath ns3:connectsThrough ;
            sh:resultSeverity sh:Info ;
            sh:sourceConstraint _:ne642a9bf261e49d486280d348e0c3bb7b6 ;
            sh:sourceConstraintComponent sh:SPARQLConstraintComponent ;
            sh:sourceShape <urn:well-known/bfc69c8e> ],
        [ a sh:ValidationResult ;
            sh:focusNode <http://example.org/IBAL#Jnc38-OCP2> ;
            sh:resultMessage "s223: `ConnectionPoint` <http://example.org/IBAL#Jnc
http://example.org/IBAL#HEC1_LowerICP
  - http://example.org/IBAL#HEC1_LowerICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#ch1_power
  - http://data.ashrae.org/standard223#Aspect-Efficiency on http://example.org/IBAL#ch1_power needs to be a http://data.ashrae.org/standard223#EnumerationKind
http://example.org/IBAL#PlateHeatExchange_2_Upper_OCP
  - http://example.org/IBAL#PlateHeatExchange_2_Upper_OCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEE1_LowerICP
  - http://example.org/IBAL#HEE1_LowerICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#PlateHeatExchange_3_Lower_ICP
  - http://example.org/IBAL#PlateHeatExchange_3_Lower_ICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEE2_UpperOCP
  - http://example.org/IBAL#HEE2_UpperOCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#PlateHeatExchange_1_Upper_OCP
  - http://example.org/IBAL#PlateHeatExchange_1_Upper_OCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEE2_LowerOCP
  - http://example.org/IBAL#HEE2_LowerOCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEC1_LowerOCP
  - http://example.org/IBAL#HEC1_LowerOCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#PlateHeatExchange_2_Lower_OCP
  - http://example.org/IBAL#PlateHeatExchange_2_Lower_OCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#PlateHeatExchange_2_Lower_ICP
  - http://example.org/IBAL#PlateHeatExchange_2_Lower_ICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#PlateHeatExchange_3_Upper_OCP
  - http://example.org/IBAL#PlateHeatExchange_3_Upper_OCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#d16_pos_c
  - http://data.ashrae.org/standard223#Aspect-Command on http://example.org/IBAL#d16_pos_c needs to be a http://data.ashrae.org/standard223#EnumerationKind
http://example.org/IBAL#ch2_power
  - http://data.ashrae.org/standard223#Aspect-Efficiency on http://example.org/IBAL#ch2_power needs to be a http://data.ashrae.org/standard223#EnumerationKind
http://example.org/IBAL#PlateHeatExchange_1_Lower_ICP
  - http://example.org/IBAL#PlateHeatExchange_1_Lower_ICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEC2_UpperICP
  - http://example.org/IBAL#HEC2_UpperICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEC2_LowerOCP
  - http://example.org/IBAL#HEC2_LowerOCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#d17_pos_c
  - http://data.ashrae.org/standard223#Aspect-Command on http://example.org/IBAL#d17_pos_c needs to be a http://data.ashrae.org/standard223#EnumerationKind
http://example.org/IBAL#HEE1_UpperICP
  - http://example.org/IBAL#HEE1_UpperICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#PlateHeatExchange_1_Upper_ICP
  - http://example.org/IBAL#PlateHeatExchange_1_Upper_ICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEE2_LowerICP
  - http://example.org/IBAL#HEE2_LowerICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#d18_pos_c
  - http://data.ashrae.org/standard223#Aspect-Command on http://example.org/IBAL#d18_pos_c needs to be a http://data.ashrae.org/standard223#EnumerationKind
http://example.org/IBAL#PlateHeatExchange_2_Upper_ICP
  - http://example.org/IBAL#PlateHeatExchange_2_Upper_ICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#d15_pos_c
  - http://data.ashrae.org/standard223#Aspect-Command on http://example.org/IBAL#d15_pos_c needs to be a http://data.ashrae.org/standard223#EnumerationKind
http://example.org/IBAL#PlateHeatExchange_3_Lower_OCP
  - http://example.org/IBAL#PlateHeatExchange_3_Lower_OCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEC2_UpperOCP
  - http://example.org/IBAL#HEC2_UpperOCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEE1_UpperOCP
  - http://example.org/IBAL#HEE1_UpperOCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#PlateHeatExchange_1_Lower_OCP
  - http://example.org/IBAL#PlateHeatExchange_1_Lower_OCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEE2_UpperICP
  - http://example.org/IBAL#HEE2_UpperICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEC1_UpperICP
  - http://example.org/IBAL#HEC1_UpperICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEC2_LowerICP
  - http://example.org/IBAL#HEC2_LowerICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEC1_UpperOCP
  - http://example.org/IBAL#HEC1_UpperOCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#PlateHeatExchange_3_Upper_ICP
  - http://example.org/IBAL#PlateHeatExchange_3_Upper_ICP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#HEE1_LowerOCP
  - http://example.org/IBAL#HEE1_LowerOCP expected 1 instance(s) of ns3:Connectable on path ns3:isConnectionPointOf
http://example.org/IBAL#WaterChiller_2
  - http://example.org/IBAL#WaterChiller_2 needs to match one of the following shapes: n829d3227e31f468c811ca15d8fbe151ab1276, n829d3227e31f468c811ca15d8fbe151ab1277
  - http://example.org/IBAL#WaterChiller_2 needs to match one of the following shapes: n829d3227e31f468c811ca15d8fbe151ab1276, n829d3227e31f468c811ca15d8fbe151ab1277
http://example.org/IBAL#WaterChiller_1
  - http://example.org/IBAL#WaterChiller_1 needs to match one of the following shapes: n829d3227e31f468c811ca15d8fbe151ab1276, n829d3227e31f468c811ca15d8fbe151ab1277
  - http://example.org/IBAL#WaterChiller_1 needs to match one of the following shapes: n829d3227e31f468c811ca15d8fbe151ab1276, n829d3227e31f468c811ca15d8fbe151ab1277