diff --git a/.gitignore b/.gitignore index 06e8ba4a0..848ae328f 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,7 @@ docs/reference/apidoc/_autosummary # Jupyter Notebook *.ipynb_checkpoints - +notebooks/output.ttl # generated by 223PExample # Environments diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dcf4b5715..414fd4c3a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,7 +9,7 @@ repos: - id: black entry: black --check - repo: https://github.com/pycqa/isort - rev: 5.10.1 + rev: 5.12.0 hooks: - id: isort entry: isort --check diff --git a/buildingmotif/bin/cli.py b/buildingmotif/bin/cli.py new file mode 100644 index 000000000..642c64527 --- /dev/null +++ b/buildingmotif/bin/cli.py @@ -0,0 +1,168 @@ +import argparse +import logging +import shutil +import sys +from os import getenv +from pathlib import Path + +from buildingmotif import BuildingMOTIF +from buildingmotif.dataclasses import Library + +cli = argparse.ArgumentParser( + prog="buildingmotif", description="CLI Interface for common BuildingMOTIF tasks" +) +subparsers = cli.add_subparsers(dest="subcommand") +subcommands = {} +log = logging.getLogger() +log.setLevel(logging.INFO) + +ONTOLOGY_FILE_SUFFIXES = ["ttl", "n3", "ntriples", "xml"] + + +# borrowing some ideas from https://gist.github.com/mivade/384c2c41c3a29c637cb6c603d4197f9f +def arg(*argnames, **kwargs): + """Helper for defining arguments on subcommands""" + return argnames, kwargs + + +def subcommand(*subparser_args, parent=subparsers): + """Decorates a function and makes it available as a subcommand""" + + def decorator(func): + parser = parent.add_parser(func.__name__, description=func.__doc__) + for args, kwargs in subparser_args: + parser.add_argument(*args, **kwargs) + parser.set_defaults(func=func) + subcommands[func] = parser + + return decorator + + +def get_db_uri(args) -> str: + """ + Fetches the db uri from args, or prints the usage + for the corresponding subcommand + """ + db_uri = args.db + if db_uri is not None: + return db_uri + db_uri = getenv("DB_URI") + if db_uri is not None: + return db_uri + try: + import configs as building_motif_configs + except ImportError: + print("No DB URI could be found") + print("No configs.py file found") + subcommands[args.func].print_help() + sys.exit(1) + db_uri = building_motif_configs.DB_URI + if db_uri is not None: + return db_uri + print("No DB URI could be found") + subcommands[args.func].print_help() + sys.exit(1) + + +@subcommand( + arg( + "-d", + "--db", + help="Database URI of the BuildingMOTIF installation. " + 'Defaults to $DB_URI and then contents of "config.py"', + ), + arg( + "--dir", + help="Path to a local directory containing the library", + nargs="+", + ), + arg( + "-o", + "--ont", + help="Remote URL or local file path to an RDF ontology", + nargs="+", + ), + arg( + "-l", + "--libraries", + help="Filename of the libraries YAML file specifying what " + "should be loaded into BuildingMOTIF", + default="libraries.yml", + nargs="+", + dest="library_manifest_file", + ), +) +def load(args): + """ + Loads libraries from (1) local directories (--dir), + (2) local or remote ontology files (--ont) + (3) library spec file (--libraries): the provided YML file into the + BuildingMOTIF instance at $DB_URI or whatever is in 'configs.py'. + Use 'get_default_libraries_yml' for the format of the expected libraries.yml file + """ + db_uri = get_db_uri(args) + bm = BuildingMOTIF(db_uri) + bm.setup_tables() + for directory in args.dir or []: + Library.load(directory=directory) + for ont in args.ont or []: + Library.load(ontology_graph=ont) + for library_manifest_file in args.library_manifest_file or []: + manifest_path = Path(library_manifest_file) + log.info(f"Loading buildingmotif libraries listed in {manifest_path}") + Library.load_from_libraries_yml(str(manifest_path)) + bm.session.commit() + + +@subcommand() +def get_default_libraries_yml(_args): + """ + Creates a default 'libraries.default.yml' file in the current directory + that can be edited and used with buildingmotif + """ + default_file = ( + Path(__file__).resolve().parents[1] / "resources" / "libraries.default.yml" + ) + shutil.copyfile(default_file, "libraries.default.yml") + print("libraries.default.yml created in the current directory") + + +@subcommand( + arg( + "-b", + "--bind", + help="Address on which to bind the API server", + default="localhost", + ), + arg( + "-p", "--port", help="Listening port for the API server", type=int, default=5000 + ), + arg( + "-d", + "--db", + help="Database URI of the BuildingMOTIF installation. " + 'Defaults to $DB_URI and then contents of "config.py"', + ), +) +def serve(args): + """ + Serves the BuildingMOTIF API on the indicated host:port + """ + from buildingmotif.api.app import create_app + + db_uri = get_db_uri(args) + webapp = create_app(db_uri) + webapp.run(host=args.host, port=args.port, threaded=False) + + +def app(): + args = cli.parse_args() + if args.subcommand is None: + cli.print_help() + else: + args.func(args) + + +# entrypoint is actually defined in pyproject.toml; this is here for convenience/testing +if __name__ == "__main__": + app() diff --git a/buildingmotif/dataclasses/library.py b/buildingmotif/dataclasses/library.py index d12e14bd2..5b51abb94 100644 --- a/buildingmotif/dataclasses/library.py +++ b/buildingmotif/dataclasses/library.py @@ -1,8 +1,10 @@ import logging import pathlib +import tempfile from dataclasses import dataclass from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional, Union +import pygit2 import pyshacl import rdflib import sqlalchemy @@ -17,6 +19,7 @@ from buildingmotif.dataclasses.shape_collection import ShapeCollection from buildingmotif.dataclasses.template import Template from buildingmotif.namespaces import XSD +from buildingmotif.schemas import validate_libraries_yaml from buildingmotif.template_compilation import compile_template_spec from buildingmotif.utils import get_ontology_files, get_template_parts_from_shape @@ -144,8 +147,8 @@ def load( :param db_id: the unique id of the library in the database, defaults to None :type db_id: Optional[int], optional - :param ontology_graph: a path to a serialized RDF graph, - defaults to None + :param ontology_graph: a path to a serialized RDF graph. + Supports remote ontology URLs, defaults to None :type ontology_graph: Optional[str|rdflib.Graph], optional :param directory: a path to a directory containing a library, or an rdflib graph, defaults to None @@ -342,6 +345,24 @@ def _load_from_directory( return lib + @classmethod + def load_from_libraries_yml(cls, filename: str): + """ + Loads *multiple* libraries from a properly-formatted 'libraries.yml' + file. Does not return a Library! You will need to load the libraries by + name in order to get the dataclasses.Library object. We recommend loading + libraries directly, one-by-one, in most cases. This method is here to support + the commandline tool. + + :param filename: the filename of the YAML file to load library names from + :type filename: str + :rtype: None + """ + libraries = yaml.load(open(filename, "r"), Loader=yaml.FullLoader) + validate_libraries_yaml(libraries) # raises exception + for description in libraries: + _resolve_library_definition(description) + @staticmethod def _library_exists(library_name: str) -> bool: """Checks whether a library with the given name exists in the database.""" @@ -498,3 +519,35 @@ def get_template_by_name(self, name: str) -> Template: if dbt.library_id != self._id: raise ValueError(f"Template {name} not in library {self._name}") return Template.load(dbt.id) + + +def _resolve_library_definition(desc: Dict[str, Any]): + """ + Loads a library from a description in libraries.yml + """ + if "directory" in desc: + spath = pathlib.Path(desc["directory"]).absolute() + if spath.exists() and spath.is_dir(): + logging.info(f"Load local library {spath} (directory)") + Library.load(directory=str(spath)) + else: + raise Exception(f"{spath} is not an existing directory") + elif "ontology" in desc: + ont = desc["ontology"] + g = rdflib.Graph().parse(ont, format=rdflib.util.guess_format(ont)) + logging.info(f"Load library {ont} as ontology graph") + Library.load(ontology_graph=g) + elif "git" in desc: + repo = desc["git"]["repo"] + branch = desc["git"]["branch"] + path = desc["git"]["path"] + logging.info(f"Load library {path} from git repository: {repo}@{branch}") + with tempfile.TemporaryDirectory() as temp_loc: + pygit2.clone_repository( + repo, temp_loc, checkout_branch=branch + ) # , depth=1) + new_path = pathlib.Path(temp_loc) / pathlib.Path(path) + if new_path.is_dir(): + _resolve_library_definition({"directory": new_path}) + else: + _resolve_library_definition({"ontology": new_path}) diff --git a/buildingmotif/resources/libraries.default.yml b/buildingmotif/resources/libraries.default.yml new file mode 100644 index 000000000..c60508b1f --- /dev/null +++ b/buildingmotif/resources/libraries.default.yml @@ -0,0 +1,10 @@ +# load a library from a local directory +- directory: libraries/ZonePAC/ +# load an ontology library from a remote URL +- ontology: https://github.com/BrickSchema/Brick/releases/download/nightly/Brick.ttl +# load a directory from a remote directory hosted in a github repo +- git: + repo: https://github.com/NREL/BuildingMOTIF + branch: main + path: libraries/chiller-plant + diff --git a/buildingmotif/schemas.py b/buildingmotif/schemas.py new file mode 100644 index 000000000..4c28bdfd1 --- /dev/null +++ b/buildingmotif/schemas.py @@ -0,0 +1,47 @@ +from typing import Any + +import jsonschema + +LIBRARIES_YAML_SCHEMA = { + "type": "array", + "items": { + "type": "object", + "oneOf": [ + { + "type": "object", + "properties": {"directory": {"type": "string"}}, + "required": ["directory"], + }, + { + "type": "object", + "properties": {"ontology": {"type": "string"}}, + "required": ["ontology"], + }, + { + "type": "object", + "properties": { + "git": { + "type": "object", + "properties": { + "repo": {"type": "string"}, + "branch": {"type": "string"}, + "path": {"type": "string"}, + }, + "required": ["repo", "branch", "path"], + } + }, + "required": ["git"], + }, + ], + }, +} + + +def validate_libraries_yaml(doc: Any): + """ + Validates a given document against the library.yml schema. Raises + a jsonschema.exceptions.ValidationError if errors are found + + :param doc: a value retrieved from deserializing libraries.yml file + """ + jsonschema.validate(schema=LIBRARIES_YAML_SCHEMA, instance=doc) diff --git a/docs/_toc.yml b/docs/_toc.yml index 3a50ef1de..08ab973dd 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -8,6 +8,7 @@ parts: - caption: Reference chapters: - file: reference/developer_documentation.md + - file: reference/cli_tool.md - file: reference/apidoc/index.rst - caption: Tutorials chapters: diff --git a/docs/reference/cli_tool.md b/docs/reference/cli_tool.md new file mode 100644 index 000000000..423055411 --- /dev/null +++ b/docs/reference/cli_tool.md @@ -0,0 +1,126 @@ +# Command Line Tool + +The `buildingmotif` command line tool will be available upon [installing BuildingMOTIF](/reference/developer_documentation). This provides several utilities for interacting with BuildingMOTIF: + +- library loading +- running an API server + +```{important} +Don't forget to set the `$DB_URI` variable (or supply the `-d` option on the CLI tool) to make sure the CLI tool interacts with the right BuildingMOTIF database! +``` + +## Library Loading + +Recall that a `Library` is a unit of distribution for shapes (for validation of metadata models) and templates (for generation of metadata models). Libraries can be loaded into BuildingMOTIF in 3 ways: + +- **programmatically**, using the [`Library`](reference/apidoc/_autosummary/buildingmotif.dataclasses.library.html) class +- **individually**, using the `buildingmotif load` command (see below) +- **in bulk**, using the `buildingmotif load` command (see below) + + +### CLI Usage + +```bash +usage: buildingmotif load [-h] [-d DB] [--dir DIR [DIR ...]] [-o ONT [ONT ...]] [-l LIBRARY_MANIFEST_FILE [LIBRARY_MANIFEST_FILE ...]] + +Loads libraries from (1) local directories (--dir), (2) local or remote ontology files (--ont) (3) library spec file (--libraries): the provided YML file into the BuildingMOTIF instance at $DB_URI or whatever +is in 'configs.py'. Use 'get_default_libraries_yml' for the format of the expected libraries.yml file + +optional arguments: + -h, --help show this help message and exit + -d DB, --db DB Database URI of the BuildingMOTIF installation. Defaults to $DB_URI and then contents of "config.py" + --dir DIR [DIR ...] Path to a local directory containing the library + -o ONT [ONT ...], --ont ONT [ONT ...] + Remote URL or local file path to an RDF ontology + -l LIBRARY_MANIFEST_FILE [LIBRARY_MANIFEST_FILE ...], --libraries LIBRARY_MANIFEST_FILE [LIBRARY_MANIFEST_FILE ...] + Filename of the libraries YAML file specifying what should be loaded into BuildingMOTIF +``` + + +### Bulk Library Loading + +To load multiple libraries into BuildingMOTIF, create a `libraries.yml` file that describes the libraries to load and where they can be found. + +Use the `buildingmotif load` command to load all libraries described in the `libraries.yml` file into BuildingMOTIF: + +```bash +buildingmotif load -l libraries.yml +``` + +The YAML-encoded file contains a list of key-value "documents". Each document corresponds to a library to be loaded into BuildingMOTIF. There are three ways to specify a library: by directory, ontology URL, and `git` repository. + +**Use `buildingmotif get_default_libraries_yml` to create an example `libraries.default.yml` file in the current directory.** + +#### Directory + +Using the `directory` key, point to a local directory containing template and shape files. The library will take on the name of the immediately enclosing directory. In the example below `libraries.yml` file, the name of the library will be "ZonePAC": + +```yaml +# load a library from a local directory +- directory: libraries/ZonePAC/ +``` + +#### Ontology + +Using the `ontology` key, point to a local *or* remote URL containing an RDF graph containing shapes. Templates will be automatically inferred from the shape descriptions. The name of the library will be given by the name of the graph (pulled from a ` a owl:Ontology` triple in the graph). + +```yaml +# load an ontology library from a remote URL +- ontology: https://github.com/BrickSchema/Brick/releases/download/nightly/Brick.ttl +``` + +#### Git Repository + +Using the `git` key, point to a directory in a branch of a remote git repository. The repository will be temporarily cloned and the corresponding directory (in the given branch) will be loaded into BuildingMOTIF using the same mechanism as for the `directory` key. The `git` document requires the `repo` (URL), `branch` (string) and `path` (string) keys to be provided: + +```yaml +# load a directory from a remote directory hosted in a github repo +- git: + repo: https://github.com/NREL/BuildingMOTIF + branch: main + path: libraries/chiller-plant +``` + +### Loading Individual Libraries + +You can load invidual diretories or ontologies into a BuildingMOTIF instance directly using the command line. + +#### Directory + +Use the `--dir` flag to pass the names of directories. The library will take on the name of the immediately enclosing directory. In the example below, the name of the library will be "directory": + +```bash +buildingmotif load --dir path/to/library/directory +``` + +#### Ontology + +Use the `--ont` key to specify a local *or* remote URL containing an RDF graph containing shapes. Templates will be automatically inferred from the shape descriptions. The name of the library will be given by the name of the graph (pulled from a ` a owl:Ontology` triple in the graph). + +The example below loads the nightly version of the Brick ontology into BuildingMOTIF from a remote URL + +```bash +buildingmotif load --ont https://github.com/BrickSchema/Brick/releases/download/nightly/Brick.ttl +``` + +The example below loads a local copy of the ASHRAE 223P ontology into BuildingMOTIF + +```bash +buildingmotif load --ont 223p.ttl +``` + +## BuildingMOTIF API Server + +To run a copy of the BuildingMOTIF API server, use `buildingmotif serve`: + +``` +usage: buildingmotif serve [-h] [-b BIND] [-p PORT] [-d DB] + +Serves the BuildingMOTIF API on the indicated host:port + +optional arguments: + -h, --help show this help message and exit + -b BIND, --bind BIND Address on which to bind the API server + -p PORT, --port PORT Listening port for the API server + -d DB, --db DB Database URI of the BuildingMOTIF installation. Defaults to $DB_URI and then contents of "config.py" +``` diff --git a/notebooks/output.ttl b/notebooks/output.ttl deleted file mode 100644 index 85b52065a..000000000 --- a/notebooks/output.ttl +++ /dev/null @@ -1,1147 +0,0 @@ -@prefix bldg: . -@prefix ns1: . -@prefix owl: . -@prefix qudt: . -@prefix qudtqk: . -@prefix rdfs: . -@prefix unit: . - -bldg: a owl:Ontology . - -bldg:CHWS a ns1:System ; - rdfs:label "Chilled Water System" ; - ns1:contains bldg:bypass-valve_7027cc9f, - bldg:chw-hx_26ffea9b, - bldg:lead-chw-booster-pump_fbbafcea, - bldg:lead-chw-pump_d96f9131, - bldg:standby-chw-booster-pump_e17763bc, - bldg:standby-chw-pump_a527ee5d . - -bldg:HWS a ns1:System ; - rdfs:label "Hot Water System" ; - ns1:contains bldg:bypass-valve_fba923ac, - bldg:hw-hx_44182aa1, - bldg:lead-hw-booster-pump_f77c6b68, - bldg:lead-hw-pump_2c7bd99a, - bldg:standby-hw-booster-pump_bdfb1964, - bldg:standby-hw-pump_71774136 . - -bldg:MAU a ns1:MAU ; - ns1:cnx bldg:MAU_Supply, - bldg:outside-air_c0ceceea ; - ns1:contains bldg:HRC_ea752f3d, - bldg:cooling-coil_69939cc7, - bldg:evaporative-cooler_aeeafa10, - bldg:final-filter_38bee229, - bldg:heating-coil_bb147f94, - bldg:oad_74f57a40, - bldg:pre-filter_3e7b62e5, - bldg:sa_pressure_sensor_faaeb5fd, - bldg:supply-fan_68c65b65 ; - ns1:hasProperty bldg:oa_rh_13c8021f, - bldg:sa_sp_c01c63ae ; - ns1:hasSystemConnectionPoint bldg:outside-conn_02315210, - bldg:supply-conn_2e710b18 . - -bldg:VAV-1 a ns1:VAV ; - ns1:cnx bldg:VAV-1-in, - bldg:air-out_1573f52f ; - ns1:contains bldg:dmp_bc99edea, - bldg:rhc_56976ba5, - bldg:sup-air-flow-sensor_06e625cc, - bldg:sup-air-pressure-sensor_1dec8634, - bldg:sup-air-temp-sensor_b24499c4 ; - ns1:hasProperty bldg:sup-air-flow_ea14dfd0, - bldg:sup-air-pressure_ed2b1cdb, - bldg:sup-air-temp_867df756 ; - ns1:hasSystemConnectionPoint bldg:vav-in_81703e2c, - bldg:vav-out_e2fc1c2f . - -bldg:VAV-2 a ns1:VAV ; - ns1:cnx bldg:VAV-2-in, - bldg:air-out_4259a71a ; - ns1:contains bldg:dmp_9db1fa03, - bldg:rhc_7431c860, - bldg:sup-air-flow-sensor_8a2047b3, - bldg:sup-air-pressure-sensor_a5f75a79, - bldg:sup-air-temp-sensor_33f4c9b5 ; - ns1:hasProperty bldg:sup-air-flow_e2934b56, - bldg:sup-air-pressure_aa648b86, - bldg:sup-air-temp_a110a231 ; - ns1:hasSystemConnectionPoint bldg:vav-in_16c654b1, - bldg:vav-out_4402e8e9 . - -bldg:fcu1 a ns1:FCU, - ns1:System ; - ns1:cnx bldg:in_dd3b1c48, - bldg:out_ba53c632 ; - ns1:contains bldg:cooling-coil_28a50a4d, - bldg:fan_35c83c78 ; - ns1:hasSystemConnectionPoint bldg:fcu-in_89a53514, - bldg:fcu-out_9d774c19 . - -bldg:name_04d2232b a ns1:Duct ; - ns1:cnx bldg:VAV-1-out, - bldg:zone1-in . - -bldg:name_11b9b30e a ns1:Duct ; - ns1:cnx bldg:MAU_Supply, - bldg:VAV-2-in . - -bldg:name_2ed8f935 a ns1:Duct ; - ns1:cnx bldg:fcu1-out, - bldg:zone2-in . - -bldg:name_82dca388 a ns1:Duct ; - ns1:cnx bldg:VAV-2-out, - bldg:fcu1-in . - -bldg:name_b87edcf4 a ns1:Duct ; - ns1:cnx bldg:MAU_Supply, - bldg:VAV-1-in . - -bldg:zone1 a ns1:Zone ; - ns1:contains bldg:zone1space1 ; - ns1:hasDomain ns1:Domain-HVAC ; - ns1:hasZoneConnectionPoint bldg:in_ea358e9d, - bldg:out_4ed1fd73, - bldg:zone-in_69afda5d, - bldg:zone-out_e0940a54 . - -bldg:zone2 a ns1:Zone ; - ns1:contains bldg:zone2space1 ; - ns1:hasDomain ns1:Domain-HVAC ; - ns1:hasZoneConnectionPoint bldg:in_3b1aef18, - bldg:out_0828379c, - bldg:zone-in_8f9fd1cd, - bldg:zone-out_9c36405c . - -bldg:HRC-air-in_ed8fd8b4 a ns1:InletConnectionPoint ; - ns1:cnx bldg:c3_dc7291ff ; - ns1:hasMedium ns1:Medium-Air . - -bldg:HRC-air-out_1453ee39 a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c4_b8980065 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:HRC-entering-air-temp_e131bc7c a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:HRC-leaving-air-temp_29c69538 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:HRC-return-water-temp_c0d31c17 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:HRC-supply-water-temp_3a0a60de a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:HRC-water-in_85382555 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:HRC-water-out_7c31877a a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:HRC_ea752f3d a ns1:HeatRecoveryCoil ; - ns1:cnx bldg:HRC-air-in_ed8fd8b4, - bldg:HRC-air-out_1453ee39, - bldg:HRC-water-in_85382555, - bldg:HRC-water-out_7c31877a ; - ns1:hasProperty bldg:HRC-entering-air-temp_e131bc7c, - bldg:HRC-leaving-air-temp_29c69538, - bldg:HRC-return-water-temp_c0d31c17, - bldg:HRC-supply-water-temp_3a0a60de . - -bldg:bypass-valve-command_198eee08 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:bypass-valve-command_b8874980 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:bypass-valve-feedback_2f0d561d a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:bypass-valve-feedback_6bd7c14f a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:bypass-valve_7027cc9f a ns1:Valve ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:bypass-valve-command_b8874980, - bldg:bypass-valve-feedback_2f0d561d . - -bldg:bypass-valve_fba923ac a ns1:Valve ; - ns1:hasMedium ns1:Water-HotWater ; - ns1:hasProperty bldg:bypass-valve-command_198eee08, - bldg:bypass-valve-feedback_6bd7c14f . - -bldg:chw-hx-A-chw-diff-press-sensor_aadceb54 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:chw-hx-A-in_f66922d3, - bldg:chw-hx-A-out_c0914d60 ; - ns1:observesProperty bldg:chw-hx-A-chw-diff-press_652b9975 . - -bldg:chw-hx-B-chw-diff-press-sensor_2cc323da a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:chw-hx-B-in_36d2aa33, - bldg:chw-hx-B-out_1d7b1bec ; - ns1:observesProperty bldg:chw-hx-B-chw-diff-press_58a2baca . - -bldg:chw-hx-chw-flow-sensor_5a4cf33a a ns1:Sensor ; - ns1:observesProperty bldg:chw-hx-chw-flow_0e713c1b . - -bldg:chw-hx-chw-supply-temperature_72a68cb7 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:chw-hx_26ffea9b a ns1:HeatExchanger ; - ns1:cnx bldg:chw-hx-A-in_f66922d3, - bldg:chw-hx-A-out_c0914d60, - bldg:chw-hx-B-in_36d2aa33, - bldg:chw-hx-B-out_1d7b1bec ; - ns1:contains bldg:chw-hx-A-chw-diff-press-sensor_aadceb54, - bldg:chw-hx-B-chw-diff-press-sensor_2cc323da, - bldg:chw-hx-chw-flow-sensor_5a4cf33a ; - ns1:hasProperty bldg:chw-hx-A-chw-diff-press_652b9975, - bldg:chw-hx-B-chw-diff-press_58a2baca, - bldg:chw-hx-chw-flow_0e713c1b, - bldg:chw-hx-chw-return-temperature_ac4441a7, - bldg:chw-hx-chw-supply-temperature_72a68cb7 . - -bldg:cooling-coil-air-in_4bd64ce8 a ns1:InletConnectionPoint ; - ns1:cnx bldg:c5_4a437c1c ; - ns1:hasMedium ns1:Medium-Air . - -bldg:cooling-coil-air-in_97fea7ef a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:cooling-coil-air-out_0ecd60d2 a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c6_bd754946 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:cooling-coil-air-out_2f337ba4 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:cooling-coil-entering-air-temp_cd051434 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-entering-air-temp_f01535a7 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-leaving-air-temp_36f9c0cf a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-leaving-air-temp_54498e66 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-leaving-air-wetbulb-temp_11429178 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-leaving-air-wetbulb-temp_35a670f9 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-pump-onoff-cmd_65de8fe4 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:cooling-coil-pump-onoff-cmd_d0fbe803 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:cooling-coil-pump-onoff-sts_42a925cb a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:cooling-coil-pump-onoff-sts_c29fb748 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:cooling-coil-pump_575fedee a ns1:Pump ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:cooling-coil-pump-onoff-cmd_d0fbe803, - bldg:cooling-coil-pump-onoff-sts_c29fb748 . - -bldg:cooling-coil-pump_ad694a1a a ns1:Pump ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:cooling-coil-pump-onoff-cmd_65de8fe4, - bldg:cooling-coil-pump-onoff-sts_42a925cb . - -bldg:cooling-coil-return-water-temp_4732fc0b a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-return-water-temp_f6ee93ae a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-supply-water-temp_66573776 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-supply-water-temp_c053e253 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:cooling-coil-valve-command_7f2446a7 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:cooling-coil-valve-command_a9a3bba4 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:cooling-coil-valve-feedback_34cb5a61 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:cooling-coil-valve-feedback_9c6ad1b9 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:cooling-coil-valve_a225d70e a ns1:Valve ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:cooling-coil-valve-command_7f2446a7, - bldg:cooling-coil-valve-feedback_34cb5a61 . - -bldg:cooling-coil-valve_d61c9973 a ns1:Valve ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:cooling-coil-valve-command_a9a3bba4, - bldg:cooling-coil-valve-feedback_9c6ad1b9 . - -bldg:cooling-coil-water-in_2a152d92 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:cooling-coil-water-in_91df4842 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:cooling-coil-water-out_7fa0bd1f a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:cooling-coil-water-out_c0e57cda a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:cooling-coil_28a50a4d a ns1:CoolingCoil ; - ns1:cnx bldg:cooling-coil-air-in_97fea7ef, - bldg:cooling-coil-air-out_2f337ba4, - bldg:cooling-coil-water-in_91df4842, - bldg:cooling-coil-water-out_7fa0bd1f ; - ns1:contains bldg:cooling-coil-pump_ad694a1a, - bldg:cooling-coil-valve_d61c9973 ; - ns1:hasProperty bldg:cooling-coil-entering-air-temp_f01535a7, - bldg:cooling-coil-leaving-air-temp_36f9c0cf, - bldg:cooling-coil-leaving-air-wetbulb-temp_11429178, - bldg:cooling-coil-return-water-temp_f6ee93ae, - bldg:cooling-coil-supply-water-temp_c053e253 . - -bldg:cooling-coil_69939cc7 a ns1:CoolingCoil ; - ns1:cnx bldg:cooling-coil-air-in_4bd64ce8, - bldg:cooling-coil-air-out_0ecd60d2, - bldg:cooling-coil-water-in_2a152d92, - bldg:cooling-coil-water-out_c0e57cda ; - ns1:contains bldg:cooling-coil-pump_575fedee, - bldg:cooling-coil-valve_a225d70e ; - ns1:hasProperty bldg:cooling-coil-entering-air-temp_cd051434, - bldg:cooling-coil-leaving-air-temp_54498e66, - bldg:cooling-coil-leaving-air-wetbulb-temp_35a670f9, - bldg:cooling-coil-return-water-temp_4732fc0b, - bldg:cooling-coil-supply-water-temp_66573776 . - -bldg:dmp-command_8cd20f6a a ns1:QuantifiableActuatableProperty ; - qudt:hasQuantityKind qudtqk:DimensionlessRatio ; - qudt:unit unit:PERCENT . - -bldg:dmp-command_a2ae6508 a ns1:QuantifiableActuatableProperty ; - qudt:hasQuantityKind qudtqk:DimensionlessRatio ; - qudt:unit unit:PERCENT . - -bldg:dmp-feedback_6cb3baa5 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:DimensionlessRatio ; - qudt:unit unit:PERCENT . - -bldg:dmp-feedback_d01ddeea a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:DimensionlessRatio ; - qudt:unit unit:PERCENT . - -bldg:dmp-in_24683538 a ns1:InletConnectionPoint ; - ns1:cnx bldg:c1_33624361 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:dmp-in_990f7375 a ns1:InletConnectionPoint ; - ns1:cnx bldg:c1_2bb68cf2 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:dmp-out_595a738d a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c2_11ce9ad4 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:dmp-out_a614c1ba a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c2_9465f0a6 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:dmp_9db1fa03 a ns1:Damper ; - ns1:cnx bldg:dmp-in_990f7375, - bldg:dmp-out_a614c1ba ; - ns1:hasProperty bldg:dmp-command_8cd20f6a, - bldg:dmp-feedback_6cb3baa5 . - -bldg:dmp_bc99edea a ns1:Damper ; - ns1:cnx bldg:dmp-in_24683538, - bldg:dmp-out_595a738d ; - ns1:hasProperty bldg:dmp-command_a2ae6508, - bldg:dmp-feedback_d01ddeea . - -bldg:evaporative-cooler-evap-cool-fill-valve-command_ea5aa190 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:evaporative-cooler-evap-cool-fill-valve-feedback_c37db85e a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:evaporative-cooler-evap-cool-fill-valve_76d9a4fd a ns1:Valve ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:evaporative-cooler-evap-cool-fill-valve-command_ea5aa190, - bldg:evaporative-cooler-evap-cool-fill-valve-feedback_c37db85e . - -bldg:evaporative-cooler-evap-cool-pump-2stage-onoff-cmd_a6414e36 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:evaporative-cooler-evap-cool-pump-2stage-onoff-sts_8505e942 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:evaporative-cooler-evap-cool-pump-2stage_ce12f14f a ns1:Pump ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:evaporative-cooler-evap-cool-pump-2stage-onoff-cmd_a6414e36, - bldg:evaporative-cooler-evap-cool-pump-2stage-onoff-sts_8505e942 . - -bldg:evaporative-cooler-evap-cool-sump-tank_3fa1a566 a ns1:Device ; - rdfs:label "Tank" . - -bldg:evaporative-cooler-in_fedfe876 a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c7_7a34a1f4 ; - ns1:hasMedium ns1:Medium-Air ; - ns1:hasProperty bldg:evaporative-cooler-entering-air-temp_58341bf6 . - -bldg:evaporative-cooler-out_4b66f22f a ns1:InletConnectionPoint ; - ns1:cnx bldg:c8_c3a5b4ea ; - ns1:hasMedium ns1:Medium-Air ; - ns1:hasProperty bldg:evaporative-cooler-leaving-air-humidity_abe98f17, - bldg:evaporative-cooler-leaving-air-temp_860bfaf4 . - -bldg:evaporative-cooler_aeeafa10 a ns1:HeatExchanger ; - ns1:cnx bldg:evaporative-cooler-in_fedfe876, - bldg:evaporative-cooler-out_4b66f22f ; - ns1:contains bldg:evaporative-cooler-evap-cool-fill-valve_76d9a4fd, - bldg:evaporative-cooler-evap-cool-pump-2stage_ce12f14f, - bldg:evaporative-cooler-evap-cool-sump-tank_3fa1a566 ; - ns1:hasProperty bldg:evaporative-cooler-entering-air-temp_58341bf6, - bldg:evaporative-cooler-leaving-air-humidity_abe98f17, - bldg:evaporative-cooler-leaving-air-temp_860bfaf4 ; - ns1:hasRole ns1:HeatExchanger-Evaporator . - -bldg:exh-flow-sensor_4e8fbbdd a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:out_0d47c2fc ; - ns1:observesProperty bldg:exhaust-air-flow_e308770c . - -bldg:exh-flow-sensor_f79a20f1 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:out_d50275af ; - ns1:observesProperty bldg:exhaust-air-flow_6c054a8f . - -bldg:fan-in_52de3818 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:fan-motor-status_a9cc2205 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:fan-oa-flow-switch_c209cc80 a ns1:EnumeratedObservableProperty . - -bldg:fan-out_16bb8bb7 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:fan-start-cmd_58204c2f a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:fan_35c83c78 a ns1:Fan ; - ns1:cnx bldg:fan-in_52de3818, - bldg:fan-out_16bb8bb7 ; - ns1:hasProperty bldg:fan-motor-status_a9cc2205, - bldg:fan-oa-flow-switch_c209cc80, - bldg:fan-start-cmd_58204c2f . - -bldg:final-filter-differential-pressure_df9877b7 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Pressure ; - qudt:unit unit:INH2O . - -bldg:final-filter-in_ef490d7d a ns1:InletConnectionPoint ; - ns1:cnx bldg:c2_d0bdeddc ; - ns1:hasMedium ns1:Medium-Air . - -bldg:final-filter-out_22d23e85 a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c3_dc7291ff ; - ns1:hasMedium ns1:Medium-Air . - -bldg:final-filter_38bee229 a ns1:Filter ; - ns1:cnx bldg:final-filter-in_ef490d7d, - bldg:final-filter-out_22d23e85 ; - ns1:hasProperty bldg:final-filter-differential-pressure_df9877b7 . - -bldg:heating-coil-air-in_c8b93585 a ns1:InletConnectionPoint ; - ns1:cnx bldg:c6_bd754946 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:heating-coil-air-out_dd878e76 a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c7_7a34a1f4 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:heating-coil-return-water-temp-sensor_a2b2d31b a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:heating-coil-water-out_c4cf7dcc ; - ns1:observesProperty bldg:heating-coil-return-water-temp_76382adb . - -bldg:heating-coil-supply-water-temp-sensor_08a9e8bf a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:heating-coil-water-in_00cedf87 ; - ns1:observesProperty bldg:heating-coil-supply-water-temp_bb08db18 . - -bldg:heating-coil-valve-command_5226854f a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:heating-coil-valve-feedback_2699b6b7 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:heating-coil-valve_db9d86b9 a ns1:Valve ; - ns1:hasMedium ns1:Water-HotWater ; - ns1:hasProperty bldg:heating-coil-valve-command_5226854f, - bldg:heating-coil-valve-feedback_2699b6b7 . - -bldg:heating-coil_bb147f94 a ns1:HeatingCoil ; - ns1:cnx bldg:heating-coil-air-in_c8b93585, - bldg:heating-coil-air-out_dd878e76, - bldg:heating-coil-water-in_00cedf87, - bldg:heating-coil-water-out_c4cf7dcc ; - ns1:contains bldg:heating-coil-return-water-temp-sensor_a2b2d31b, - bldg:heating-coil-supply-water-temp-sensor_08a9e8bf, - bldg:heating-coil-valve_db9d86b9 ; - ns1:hasProperty bldg:heating-coil-return-water-temp_76382adb, - bldg:heating-coil-supply-water-temp_bb08db18 . - -bldg:humidity-sensor_1fdba2ec a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:zone1space1 ; - ns1:observesProperty bldg:humidity_4eaa7586 . - -bldg:humidity-sensor_c49f7695 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:zone2space1 ; - ns1:observesProperty bldg:humidity_a45d2fef . - -bldg:hw-hx-A-chw-diff-press-sensor_9b35eccb a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:hw-hx-A-in_3c2d65d7, - bldg:hw-hx-A-out_a0307fd9 ; - ns1:observesProperty bldg:hw-hx-A-chw-diff-press_57cfea21 . - -bldg:hw-hx-B-chw-diff-press-sensor_fa163359 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:hw-hx-B-in_8bc36b42, - bldg:hw-hx-B-out_858e209a ; - ns1:observesProperty bldg:hw-hx-B-chw-diff-press_7b13202b . - -bldg:hw-hx-chw-flow-sensor_7acc1c44 a ns1:Sensor ; - ns1:observesProperty bldg:hw-hx-chw-flow_63a8a58a . - -bldg:hw-hx-chw-supply-temperature_b653dbbf a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:hw-hx_44182aa1 a ns1:HeatExchanger ; - ns1:cnx bldg:hw-hx-A-in_3c2d65d7, - bldg:hw-hx-A-out_a0307fd9, - bldg:hw-hx-B-in_8bc36b42, - bldg:hw-hx-B-out_858e209a ; - ns1:contains bldg:hw-hx-A-chw-diff-press-sensor_9b35eccb, - bldg:hw-hx-B-chw-diff-press-sensor_fa163359, - bldg:hw-hx-chw-flow-sensor_7acc1c44 ; - ns1:hasProperty bldg:hw-hx-A-chw-diff-press_57cfea21, - bldg:hw-hx-B-chw-diff-press_7b13202b, - bldg:hw-hx-chw-flow_63a8a58a, - bldg:hw-hx-chw-return-temperature_d9dbae9b, - bldg:hw-hx-chw-supply-temperature_b653dbbf . - -bldg:in_3b1aef18 a ns1:InletZoneConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:in_dd3b1c48 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air ; - ns1:mapsTo bldg:fcu-in_89a53514 . - -bldg:in_ea358e9d a ns1:InletZoneConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:lead-chw-booster-pump-onoff-cmd_e3bcca0f a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:lead-chw-booster-pump-onoff-sts_7386c082 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:lead-chw-booster-pump_fbbafcea a ns1:Pump ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:lead-chw-booster-pump-onoff-cmd_e3bcca0f, - bldg:lead-chw-booster-pump-onoff-sts_7386c082 . - -bldg:lead-chw-pump-onoff-cmd_758ef7f9 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:lead-chw-pump-onoff-sts_9023b1ed a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:lead-chw-pump_d96f9131 a ns1:Pump ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:lead-chw-pump-onoff-cmd_758ef7f9, - bldg:lead-chw-pump-onoff-sts_9023b1ed . - -bldg:lead-hw-booster-pump-onoff-cmd_fdb524cc a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:lead-hw-booster-pump-onoff-sts_1eea2650 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:lead-hw-booster-pump_f77c6b68 a ns1:Pump ; - ns1:hasMedium ns1:Water-HotWater ; - ns1:hasProperty bldg:lead-hw-booster-pump-onoff-cmd_fdb524cc, - bldg:lead-hw-booster-pump-onoff-sts_1eea2650 . - -bldg:lead-hw-pump-onoff-cmd_512bf3b0 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:lead-hw-pump-onoff-sts_33175305 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:lead-hw-pump_2c7bd99a a ns1:Pump ; - ns1:hasMedium ns1:Water-HotWater ; - ns1:hasProperty bldg:lead-hw-pump-onoff-cmd_512bf3b0, - bldg:lead-hw-pump-onoff-sts_33175305 . - -bldg:oad-command_ef7b8172 a ns1:QuantifiableActuatableProperty ; - qudt:hasQuantityKind qudtqk:DimensionlessRatio ; - qudt:unit unit:PERCENT . - -bldg:oad-feedback_ec4ac164 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:DimensionlessRatio ; - qudt:unit unit:PERCENT . - -bldg:oad-in_8945cf7e a ns1:InletConnectionPoint ; - ns1:cnx bldg:c0_22a4ca32 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:oad-out_4f4d7dd7 a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c1_37d3b648 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:oad_74f57a40 a ns1:Damper ; - ns1:cnx bldg:oad-in_8945cf7e, - bldg:oad-out_4f4d7dd7 ; - ns1:hasProperty bldg:oad-command_ef7b8172, - bldg:oad-feedback_ec4ac164 . - -bldg:out_0828379c a ns1:OutletZoneConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:out_4ed1fd73 a ns1:OutletZoneConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:out_ba53c632 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air ; - ns1:mapsTo bldg:fcu-out_9d774c19 . - -bldg:outside-air_c0ceceea a ns1:InletConnectionPoint ; - ns1:cnx bldg:c0_22a4ca32 ; - ns1:hasMedium ns1:Medium-Air ; - ns1:mapsTo bldg:outside-conn_02315210 . - -bldg:pre-filter-differential-pressure_beccb00a a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Pressure ; - qudt:unit unit:INH2O . - -bldg:pre-filter-in_17913021 a ns1:InletConnectionPoint ; - ns1:cnx bldg:c1_37d3b648 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:pre-filter-out_f9dafc70 a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c2_d0bdeddc ; - ns1:hasMedium ns1:Medium-Air . - -bldg:pre-filter_3e7b62e5 a ns1:Filter ; - ns1:cnx bldg:pre-filter-in_17913021, - bldg:pre-filter-out_f9dafc70 ; - ns1:hasProperty bldg:pre-filter-differential-pressure_beccb00a . - -bldg:rhc-air-in_7828d41e a ns1:InletConnectionPoint ; - ns1:cnx bldg:c0_623511d1 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:rhc-air-in_e183a3bb a ns1:InletConnectionPoint ; - ns1:cnx bldg:c0_25884b51 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:rhc-air-out_2dd2a2c2 a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c1_33624361 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:rhc-air-out_3c30af02 a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c1_2bb68cf2 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:rhc-return-water-temp-sensor_15a7a76d a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:rhc-water-out_e8a6efc9 ; - ns1:observesProperty bldg:rhc-return-water-temp_b8fc20bc . - -bldg:rhc-return-water-temp-sensor_38e88d10 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:rhc-water-out_dda0a705 ; - ns1:observesProperty bldg:rhc-return-water-temp_49330d67 . - -bldg:rhc-supply-water-temp-sensor_b557d1f8 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:rhc-water-in_18944848 ; - ns1:observesProperty bldg:rhc-supply-water-temp_13a19ff3 . - -bldg:rhc-supply-water-temp-sensor_fefc16b2 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:rhc-water-in_3d34a251 ; - ns1:observesProperty bldg:rhc-supply-water-temp_5a43e638 . - -bldg:rhc-valve-command_33f42486 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:rhc-valve-command_f436d1e1 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:rhc-valve-feedback_51cf213a a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:rhc-valve-feedback_774db4ca a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:rhc-valve_2843dbec a ns1:Valve ; - ns1:hasMedium ns1:Water-HotWater ; - ns1:hasProperty bldg:rhc-valve-command_f436d1e1, - bldg:rhc-valve-feedback_51cf213a . - -bldg:rhc-valve_5ab3302f a ns1:Valve ; - ns1:hasMedium ns1:Water-HotWater ; - ns1:hasProperty bldg:rhc-valve-command_33f42486, - bldg:rhc-valve-feedback_774db4ca . - -bldg:rhc_56976ba5 a ns1:HeatingCoil ; - ns1:cnx bldg:rhc-air-in_e183a3bb, - bldg:rhc-air-out_2dd2a2c2, - bldg:rhc-water-in_3d34a251, - bldg:rhc-water-out_e8a6efc9 ; - ns1:contains bldg:rhc-return-water-temp-sensor_15a7a76d, - bldg:rhc-supply-water-temp-sensor_fefc16b2, - bldg:rhc-valve_5ab3302f ; - ns1:hasProperty bldg:rhc-return-water-temp_b8fc20bc, - bldg:rhc-supply-water-temp_5a43e638 . - -bldg:rhc_7431c860 a ns1:HeatingCoil ; - ns1:cnx bldg:rhc-air-in_7828d41e, - bldg:rhc-air-out_3c30af02, - bldg:rhc-water-in_18944848, - bldg:rhc-water-out_dda0a705 ; - ns1:contains bldg:rhc-return-water-temp-sensor_38e88d10, - bldg:rhc-supply-water-temp-sensor_b557d1f8, - bldg:rhc-valve_2843dbec ; - ns1:hasProperty bldg:rhc-return-water-temp_49330d67, - bldg:rhc-supply-water-temp_13a19ff3 . - -bldg:sa_pressure_sensor_faaeb5fd a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:MAU_Supply ; - ns1:observesProperty bldg:sa_sp_c01c63ae . - -bldg:standby-chw-booster-pump-onoff-cmd_41e31955 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:standby-chw-booster-pump-onoff-sts_451dd365 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:standby-chw-booster-pump_e17763bc a ns1:Pump ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:standby-chw-booster-pump-onoff-cmd_41e31955, - bldg:standby-chw-booster-pump-onoff-sts_451dd365 . - -bldg:standby-chw-pump-onoff-cmd_d1dc5bc7 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:standby-chw-pump-onoff-sts_cdaa61be a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:standby-chw-pump_a527ee5d a ns1:Pump ; - ns1:hasMedium ns1:Water-ChilledWater ; - ns1:hasProperty bldg:standby-chw-pump-onoff-cmd_d1dc5bc7, - bldg:standby-chw-pump-onoff-sts_cdaa61be . - -bldg:standby-hw-booster-pump-onoff-cmd_df13e763 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:standby-hw-booster-pump-onoff-sts_325680b1 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:standby-hw-booster-pump_bdfb1964 a ns1:Pump ; - ns1:hasMedium ns1:Water-HotWater ; - ns1:hasProperty bldg:standby-hw-booster-pump-onoff-cmd_df13e763, - bldg:standby-hw-booster-pump-onoff-sts_325680b1 . - -bldg:standby-hw-pump-onoff-cmd_238fe039 a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:standby-hw-pump-onoff-sts_abaa4716 a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:standby-hw-pump_71774136 a ns1:Pump ; - ns1:hasMedium ns1:Water-HotWater ; - ns1:hasProperty bldg:standby-hw-pump-onoff-cmd_238fe039, - bldg:standby-hw-pump-onoff-sts_abaa4716 . - -bldg:sup-air-flow-sensor_06e625cc a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:air-out_1573f52f ; - ns1:observesProperty bldg:sup-air-flow_ea14dfd0 . - -bldg:sup-air-flow-sensor_8a2047b3 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:air-out_4259a71a ; - ns1:observesProperty bldg:sup-air-flow_e2934b56 . - -bldg:sup-air-pressure-sensor_1dec8634 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:air-out_1573f52f ; - ns1:observesProperty bldg:sup-air-pressure_ed2b1cdb . - -bldg:sup-air-pressure-sensor_a5f75a79 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:air-out_4259a71a ; - ns1:observesProperty bldg:sup-air-pressure_aa648b86 . - -bldg:sup-air-temp-sensor_33f4c9b5 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:air-out_4259a71a ; - ns1:observesProperty bldg:sup-air-temp_a110a231 . - -bldg:sup-air-temp-sensor_b24499c4 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:air-out_1573f52f ; - ns1:observesProperty bldg:sup-air-temp_867df756 . - -bldg:sup-flow-sensor_97a1fe0b a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:in_522f91d4 ; - ns1:observesProperty bldg:supply-air-flow_94fd81d6 . - -bldg:sup-flow-sensor_9d9d621f a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:in_fbb720af ; - ns1:observesProperty bldg:supply-air-flow_04df8f7f . - -bldg:supply-fan-in_b6d6a130 a ns1:InletConnectionPoint ; - ns1:cnx bldg:c4_b8980065 ; - ns1:hasMedium ns1:Medium-Air . - -bldg:supply-fan-motor-status_272050cb a ns1:EnumeratedObservableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:supply-fan-oa-flow-switch_88dcce56 a ns1:EnumeratedObservableProperty . - -bldg:supply-fan-out_5199c2df a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c5_4a437c1c ; - ns1:hasMedium ns1:Medium-Air . - -bldg:supply-fan-start-cmd_f620be5a a ns1:EnumeratedActuatableProperty ; - ns1:hasEnumerationKind ns1:EnumerationKind-RunStatus . - -bldg:supply-fan_68c65b65 a ns1:Fan ; - ns1:cnx bldg:supply-fan-in_b6d6a130, - bldg:supply-fan-out_5199c2df ; - ns1:hasProperty bldg:supply-fan-motor-status_272050cb, - bldg:supply-fan-oa-flow-switch_88dcce56, - bldg:supply-fan-start-cmd_f620be5a . - -bldg:temp-sensor_4d041fd3 a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:zone2space1 ; - ns1:observesProperty bldg:temp_c9cb74be . - -bldg:temp-sensor_60d7f00c a ns1:Sensor ; - ns1:hasMeasurementLocation bldg:zone1space1 ; - ns1:observesProperty bldg:temp_6b51956d . - -bldg:zone-in_69afda5d a ns1:InletZoneConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:zone-in_8f9fd1cd a ns1:InletZoneConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:zone-out_9c36405c a ns1:OutletZoneConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:zone-out_e0940a54 a ns1:OutletZoneConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:VAV-1-in a ns1:InletConnectionPoint ; - ns1:cnx bldg:c0_25884b51 ; - ns1:hasMedium ns1:Medium-Air ; - ns1:mapsTo bldg:vav-in_81703e2c . - -bldg:VAV-2-in a ns1:InletConnectionPoint ; - ns1:cnx bldg:c0_623511d1 ; - ns1:hasMedium ns1:Medium-Air ; - ns1:mapsTo bldg:vav-in_16c654b1 . - -bldg:c0_22a4ca32 a ns1:Duct . - -bldg:c0_25884b51 a ns1:Duct . - -bldg:c0_623511d1 a ns1:Duct . - -bldg:c1_2bb68cf2 a ns1:Duct . - -bldg:c1_33624361 a ns1:Duct . - -bldg:c1_37d3b648 a ns1:Duct . - -bldg:c2_11ce9ad4 a ns1:Duct . - -bldg:c2_9465f0a6 a ns1:Duct . - -bldg:c2_d0bdeddc a ns1:Duct . - -bldg:c3_dc7291ff a ns1:Duct . - -bldg:c4_b8980065 a ns1:Duct . - -bldg:c5_4a437c1c a ns1:Duct . - -bldg:c6_bd754946 a ns1:Duct . - -bldg:c7_7a34a1f4 a ns1:Duct . - -bldg:c8_c3a5b4ea a ns1:Duct . - -bldg:chw-hx-A-chw-diff-press_652b9975 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Pressure ; - qudt:unit unit:INH2O . - -bldg:chw-hx-A-in_f66922d3 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:chw-hx-A-out_c0914d60 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:chw-hx-B-chw-diff-press_58a2baca a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Pressure ; - qudt:unit unit:INH2O . - -bldg:chw-hx-B-in_36d2aa33 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:chw-hx-B-out_1d7b1bec a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:chw-hx-chw-flow_0e713c1b a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:VolumeFlowRate ; - qudt:unit unit:FT3-PER-MIN . - -bldg:evaporative-cooler-entering-air-temp_58341bf6 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:evaporative-cooler-leaving-air-humidity_abe98f17 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:RelativeHumiditiy ; - qudt:unit unit:PERCENT_RH . - -bldg:evaporative-cooler-leaving-air-temp_860bfaf4 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:exhaust-air-flow_6c054a8f a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:VolumeFlowRate ; - qudt:unit unit:FT3-PER-MIN . - -bldg:exhaust-air-flow_e308770c a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:VolumeFlowRate ; - qudt:unit unit:FT3-PER-MIN . - -bldg:fcu-in_89a53514 a ns1:InletSystemConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:fcu-out_9d774c19 a ns1:OutletSystemConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:heating-coil-return-water-temp_76382adb a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:heating-coil-supply-water-temp_bb08db18 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:heating-coil-water-in_00cedf87 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:heating-coil-water-out_c4cf7dcc a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:humidity_4eaa7586 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:RelativeHumiditiy ; - qudt:unit unit:PERCENT_RH . - -bldg:humidity_a45d2fef a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:RelativeHumiditiy ; - qudt:unit unit:PERCENT_RH . - -bldg:hw-hx-A-chw-diff-press_57cfea21 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Pressure ; - qudt:unit unit:INH2O . - -bldg:hw-hx-A-in_3c2d65d7 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:hw-hx-A-out_a0307fd9 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:hw-hx-B-chw-diff-press_7b13202b a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Pressure ; - qudt:unit unit:INH2O . - -bldg:hw-hx-B-in_8bc36b42 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:hw-hx-B-out_858e209a a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:hw-hx-chw-flow_63a8a58a a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:VolumeFlowRate ; - qudt:unit unit:FT3-PER-MIN . - -bldg:in_522f91d4 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:in_fbb720af a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:out_0d47c2fc a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:out_d50275af a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:outside-conn_02315210 a ns1:InletSystemConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:rhc-return-water-temp_49330d67 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:rhc-return-water-temp_b8fc20bc a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:rhc-supply-water-temp_13a19ff3 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:rhc-supply-water-temp_5a43e638 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:rhc-water-in_18944848 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:rhc-water-in_3d34a251 a ns1:InletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:rhc-water-out_dda0a705 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:rhc-water-out_e8a6efc9 a ns1:OutletConnectionPoint ; - ns1:hasMedium ns1:Medium-Water . - -bldg:sa_sp_c01c63ae a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Pressure ; - qudt:unit unit:INH2O . - -bldg:sup-air-flow_e2934b56 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:VolumeFlowRate ; - qudt:unit unit:FT3-PER-MIN . - -bldg:sup-air-flow_ea14dfd0 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:VolumeFlowRate ; - qudt:unit unit:FT3-PER-MIN . - -bldg:sup-air-pressure_aa648b86 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Pressure ; - qudt:unit unit:INH2O . - -bldg:sup-air-pressure_ed2b1cdb a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Pressure ; - qudt:unit unit:INH2O . - -bldg:sup-air-temp_867df756 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:sup-air-temp_a110a231 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:supply-air-flow_04df8f7f a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:VolumeFlowRate ; - qudt:unit unit:FT3-PER-MIN . - -bldg:supply-air-flow_94fd81d6 a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:VolumeFlowRate ; - qudt:unit unit:FT3-PER-MIN . - -bldg:supply-conn_2e710b18 a ns1:OutletSystemConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:temp_6b51956d a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:temp_c9cb74be a ns1:QuantifiableObservableProperty ; - qudt:hasQuantityKind qudtqk:Temperature ; - qudt:unit unit:DEG_C . - -bldg:vav-in_16c654b1 a ns1:InletSystemConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:vav-in_81703e2c a ns1:InletSystemConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:vav-out_4402e8e9 a ns1:OutletSystemConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:vav-out_e2fc1c2f a ns1:OutletSystemConnectionPoint ; - ns1:hasMedium ns1:Medium-Air . - -bldg:zone1space1 a ns1:DomainSpace ; - ns1:cnx bldg:in_522f91d4, - bldg:out_d50275af ; - ns1:contains bldg:exh-flow-sensor_f79a20f1, - bldg:humidity-sensor_1fdba2ec, - bldg:sup-flow-sensor_97a1fe0b, - bldg:temp-sensor_60d7f00c ; - ns1:hasDomain ns1:Domain-HVAC ; - ns1:hasProperty bldg:exhaust-air-flow_6c054a8f, - bldg:humidity_4eaa7586, - bldg:supply-air-flow_94fd81d6, - bldg:temp_6b51956d . - -bldg:zone2space1 a ns1:DomainSpace ; - ns1:cnx bldg:in_fbb720af, - bldg:out_0d47c2fc ; - ns1:contains bldg:exh-flow-sensor_4e8fbbdd, - bldg:humidity-sensor_c49f7695, - bldg:sup-flow-sensor_9d9d621f, - bldg:temp-sensor_4d041fd3 ; - ns1:hasDomain ns1:Domain-HVAC ; - ns1:hasProperty bldg:exhaust-air-flow_e308770c, - bldg:humidity_a45d2fef, - bldg:supply-air-flow_04df8f7f, - bldg:temp_c9cb74be . - -bldg:MAU_Supply a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c8_c3a5b4ea ; - ns1:hasMedium ns1:Medium-Air ; - ns1:mapsTo bldg:supply-conn_2e710b18 . - -bldg:air-out_1573f52f a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c2_11ce9ad4 ; - ns1:hasMedium ns1:Medium-Air ; - ns1:mapsTo bldg:vav-out_e2fc1c2f . - -bldg:air-out_4259a71a a ns1:OutletConnectionPoint ; - ns1:cnx bldg:c2_9465f0a6 ; - ns1:hasMedium ns1:Medium-Air ; - ns1:mapsTo bldg:vav-out_4402e8e9 . - diff --git a/poetry.lock b/poetry.lock index db5a4e710..ce14c1544 100644 --- a/poetry.lock +++ b/poetry.lock @@ -14,14 +14,14 @@ files = [ [[package]] name = "alembic" -version = "1.9.3" +version = "1.9.4" description = "A database migration tool for SQLAlchemy." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "alembic-1.9.3-py3-none-any.whl", hash = "sha256:ed2f73ea9c986f43af8ad7502c5f60d6bb1400bcd6d29f230e760e08884cb476"}, - {file = "alembic-1.9.3.tar.gz", hash = "sha256:8fd6aaea56f5a703a190d25a705dfa91d7c313bb71de2f9c68f5abdcaf5df164"}, + {file = "alembic-1.9.4-py3-none-any.whl", hash = "sha256:6f1c2207369bf4f49f952057a33bb017fbe5c148c2a773b46906b806ea6e825f"}, + {file = "alembic-1.9.4.tar.gz", hash = "sha256:4d3bd32ecdbb7bbfb48a9fe9e6d6fd6a831a1b59d03e26e292210237373e7db5"}, ] [package.dependencies] @@ -634,6 +634,7 @@ files = [ {file = "debugpy-1.6.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b5d1b13d7c7bf5d7cf700e33c0b8ddb7baf030fcf502f76fc061ddd9405d16c"}, {file = "debugpy-1.6.6-cp38-cp38-win32.whl", hash = "sha256:70ab53918fd907a3ade01909b3ed783287ede362c80c75f41e79596d5ccacd32"}, {file = "debugpy-1.6.6-cp38-cp38-win_amd64.whl", hash = "sha256:c05349890804d846eca32ce0623ab66c06f8800db881af7a876dc073ac1c2225"}, + {file = "debugpy-1.6.6-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:11a0f3a106f69901e4a9a5683ce943a7a5605696024134b522aa1bfda25b5fec"}, {file = "debugpy-1.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a771739902b1ae22a120dbbb6bd91b2cae6696c0e318b5007c5348519a4211c6"}, {file = "debugpy-1.6.6-cp39-cp39-win32.whl", hash = "sha256:549ae0cb2d34fc09d1675f9b01942499751d174381b6082279cf19cdb3c47cbe"}, {file = "debugpy-1.6.6-cp39-cp39-win_amd64.whl", hash = "sha256:de4a045fbf388e120bb6ec66501458d3134f4729faed26ff95de52a754abddb1"}, @@ -776,14 +777,14 @@ testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pyt [[package]] name = "flask" -version = "2.2.2" +version = "2.2.3" description = "A simple framework for building complex web applications." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Flask-2.2.2-py3-none-any.whl", hash = "sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526"}, - {file = "Flask-2.2.2.tar.gz", hash = "sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b"}, + {file = "Flask-2.2.3-py3-none-any.whl", hash = "sha256:c0bec9477df1cb867e5a67c9e1ab758de9cb4a3e52dd70681f59fa40a62b3f2d"}, + {file = "Flask-2.2.3.tar.gz", hash = "sha256:7eb373984bf1c770023fce9db164ed0c3353cd0b53f130f4693da0ca756a2e6d"}, ] [package.dependencies] @@ -841,14 +842,14 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.30" -description = "GitPython is a python library used to interact with Git repositories" +version = "3.1.31" +description = "GitPython is a Python library used to interact with Git repositories" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.30-py3-none-any.whl", hash = "sha256:cd455b0000615c60e286208ba540271af9fe531fa6a87cc590a7298785ab2882"}, - {file = "GitPython-3.1.30.tar.gz", hash = "sha256:769c2d83e13f5d938b7688479da374c4e3d49f71549aaf462b646db9602ea6f8"}, + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, ] [package.dependencies] @@ -989,14 +990,14 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag [[package]] name = "importlib-resources" -version = "5.10.2" +version = "5.12.0" description = "Read resources from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_resources-5.10.2-py3-none-any.whl", hash = "sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6"}, - {file = "importlib_resources-5.10.2.tar.gz", hash = "sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484"}, + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, ] [package.dependencies] @@ -1352,14 +1353,14 @@ testing = ["coverage", "ipykernel", "matplotlib", "nbformat (>=5.1)", "numpy", " [[package]] name = "jupyter-client" -version = "8.0.2" +version = "8.0.3" description = "Jupyter protocol implementation and client libraries" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.0.2-py3-none-any.whl", hash = "sha256:c53731eb590b68839b0ce04bf46ff8c4f03278f5d9fe5c3b0f268a57cc2bd97e"}, - {file = "jupyter_client-8.0.2.tar.gz", hash = "sha256:47ac9f586dbcff4d79387ec264faf0fdeb5f14845fa7345fd7d1e378f8096011"}, + {file = "jupyter_client-8.0.3-py3-none-any.whl", hash = "sha256:be48ac6bd659cbbddb7a674cf06b3b8afbf53f228253cf58bde604c03bd487b0"}, + {file = "jupyter_client-8.0.3.tar.gz", hash = "sha256:ed65498bea6d876ef9d8da3e0db3dd33c5d129f5b2645f56ae03993782966bd0"}, ] [package.dependencies] @@ -1376,14 +1377,14 @@ test = ["codecov", "coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-co [[package]] name = "jupyter-console" -version = "6.5.1" +version = "6.6.1" description = "Jupyter terminal console" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyter_console-6.5.1-py3-none-any.whl", hash = "sha256:c575bb6ed56ca78189594176341e7b31426ff30fafcd22bf3dad7be309595b5e"}, - {file = "jupyter_console-6.5.1.tar.gz", hash = "sha256:6b91b7b6e8a715053b536db209a2f4b02429d7b28db27373a56a26b0bebd620b"}, + {file = "jupyter_console-6.6.1-py3-none-any.whl", hash = "sha256:b32b5cb673a90909911988a2f1906ced005b07e8dadab6c8664d3f5de44a8191"}, + {file = "jupyter_console-6.6.1.tar.gz", hash = "sha256:5931212d5cbc1f956f6fd615755b5e15f389a8eaa697288dbbe4377017615ecc"}, ] [package.dependencies] @@ -1397,7 +1398,7 @@ pyzmq = ">=17" traitlets = ">=5.4" [package.extras] -test = ["pexpect", "pytest"] +test = ["flaky", "pexpect", "pytest"] [[package]] name = "jupyter-core" @@ -1447,14 +1448,14 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= [[package]] name = "jupyter-server" -version = "2.2.1" +version = "2.3.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.2.1-py3-none-any.whl", hash = "sha256:854fb7d49f6b7f545d4f8354172b004dcda887ba0699def7112daf785ba3c9ce"}, - {file = "jupyter_server-2.2.1.tar.gz", hash = "sha256:5afb8a0cdfee37d02d69bdf470ae9cbb1dee5d4788f9bc6cc8e54bd8c83fb096"}, + {file = "jupyter_server-2.3.0-py3-none-any.whl", hash = "sha256:b15078954120886d580e19d1746e2b62a3dc7bd082cb4716115c25fcd7061b00"}, + {file = "jupyter_server-2.3.0.tar.gz", hash = "sha256:29d6657bfb160b0e39b9030d67f33f918a188f2eba28065314a933b327fef872"}, ] [package.dependencies] @@ -1986,14 +1987,14 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest [[package]] name = "nbclassic" -version = "0.5.1" +version = "0.5.2" description = "Jupyter Notebook as a Jupyter Server extension." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "nbclassic-0.5.1-py3-none-any.whl", hash = "sha256:32c235e1f22f4048f3b877d354c198202898797cf9c2085856827598cead001b"}, - {file = "nbclassic-0.5.1.tar.gz", hash = "sha256:8e8ffce7582bb7a4baf11fa86a3d88b184e8e7df78eed4ead69f15aa4fc0e323"}, + {file = "nbclassic-0.5.2-py3-none-any.whl", hash = "sha256:6403a996562dadefa7fee9c49e17b663b5fd508241de5df655b90011cf3342d9"}, + {file = "nbclassic-0.5.2.tar.gz", hash = "sha256:40f11bbcc59e8956c3d5ef132dec8e5a853e893ecf831e791d54da0d8a50d79d"}, ] [package.dependencies] @@ -2003,7 +2004,7 @@ ipython-genutils = "*" jinja2 = "*" jupyter-client = ">=6.1.1" jupyter-core = ">=4.6.1" -jupyter-server = ">=1.17.0" +jupyter-server = ">=1.8" nbconvert = ">=5" nbformat = "*" nest-asyncio = ">=1.5" @@ -2495,14 +2496,14 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.36" +version = "3.0.37" description = "Library for building powerful interactive command lines in Python" category = "main" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, - {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, + {file = "prompt_toolkit-3.0.37-py3-none-any.whl", hash = "sha256:6a2948ec427dfcc7c983027b1044b355db6aaa8be374f54ad2015471f7d81c5b"}, + {file = "prompt_toolkit-3.0.37.tar.gz", hash = "sha256:d5d73d4b5eb1a92ba884a88962b157f49b71e06c4348b417dd622b25cdd3800b"}, ] [package.dependencies] @@ -2662,48 +2663,48 @@ files = [ [[package]] name = "pydantic" -version = "1.10.4" +version = "1.10.5" description = "Data validation and settings management using python type hints" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5635de53e6686fe7a44b5cf25fcc419a0d5e5c1a1efe73d49d48fe7586db854"}, - {file = "pydantic-1.10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6dc1cc241440ed7ca9ab59d9929075445da6b7c94ced281b3dd4cfe6c8cff817"}, - {file = "pydantic-1.10.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51bdeb10d2db0f288e71d49c9cefa609bca271720ecd0c58009bd7504a0c464c"}, - {file = "pydantic-1.10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78cec42b95dbb500a1f7120bdf95c401f6abb616bbe8785ef09887306792e66e"}, - {file = "pydantic-1.10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8775d4ef5e7299a2f4699501077a0defdaac5b6c4321173bcb0f3c496fbadf85"}, - {file = "pydantic-1.10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:572066051eeac73d23f95ba9a71349c42a3e05999d0ee1572b7860235b850cc6"}, - {file = "pydantic-1.10.4-cp310-cp310-win_amd64.whl", hash = "sha256:7feb6a2d401f4d6863050f58325b8d99c1e56f4512d98b11ac64ad1751dc647d"}, - {file = "pydantic-1.10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:39f4a73e5342b25c2959529f07f026ef58147249f9b7431e1ba8414a36761f53"}, - {file = "pydantic-1.10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:983e720704431a6573d626b00662eb78a07148c9115129f9b4351091ec95ecc3"}, - {file = "pydantic-1.10.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d52162fe6b2b55964fbb0af2ee58e99791a3138588c482572bb6087953113a"}, - {file = "pydantic-1.10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdf8d759ef326962b4678d89e275ffc55b7ce59d917d9f72233762061fd04a2d"}, - {file = "pydantic-1.10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05a81b006be15655b2a1bae5faa4280cf7c81d0e09fcb49b342ebf826abe5a72"}, - {file = "pydantic-1.10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d88c4c0e5c5dfd05092a4b271282ef0588e5f4aaf345778056fc5259ba098857"}, - {file = "pydantic-1.10.4-cp311-cp311-win_amd64.whl", hash = "sha256:6a05a9db1ef5be0fe63e988f9617ca2551013f55000289c671f71ec16f4985e3"}, - {file = "pydantic-1.10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:887ca463c3bc47103c123bc06919c86720e80e1214aab79e9b779cda0ff92a00"}, - {file = "pydantic-1.10.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdf88ab63c3ee282c76d652fc86518aacb737ff35796023fae56a65ced1a5978"}, - {file = "pydantic-1.10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a48f1953c4a1d9bd0b5167ac50da9a79f6072c63c4cef4cf2a3736994903583e"}, - {file = "pydantic-1.10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a9f2de23bec87ff306aef658384b02aa7c32389766af3c5dee9ce33e80222dfa"}, - {file = "pydantic-1.10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:cd8702c5142afda03dc2b1ee6bc358b62b3735b2cce53fc77b31ca9f728e4bc8"}, - {file = "pydantic-1.10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6e7124d6855b2780611d9f5e1e145e86667eaa3bd9459192c8dc1a097f5e9903"}, - {file = "pydantic-1.10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b53e1d41e97063d51a02821b80538053ee4608b9a181c1005441f1673c55423"}, - {file = "pydantic-1.10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:55b1625899acd33229c4352ce0ae54038529b412bd51c4915349b49ca575258f"}, - {file = "pydantic-1.10.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:301d626a59edbe5dfb48fcae245896379a450d04baeed50ef40d8199f2733b06"}, - {file = "pydantic-1.10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6f9d649892a6f54a39ed56b8dfd5e08b5f3be5f893da430bed76975f3735d15"}, - {file = "pydantic-1.10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d7b5a3821225f5c43496c324b0d6875fde910a1c2933d726a743ce328fbb2a8c"}, - {file = "pydantic-1.10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f2f7eb6273dd12472d7f218e1fef6f7c7c2f00ac2e1ecde4db8824c457300416"}, - {file = "pydantic-1.10.4-cp38-cp38-win_amd64.whl", hash = "sha256:4b05697738e7d2040696b0a66d9f0a10bec0efa1883ca75ee9e55baf511909d6"}, - {file = "pydantic-1.10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a9a6747cac06c2beb466064dda999a13176b23535e4c496c9d48e6406f92d42d"}, - {file = "pydantic-1.10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb992a1ef739cc7b543576337bebfc62c0e6567434e522e97291b251a41dad7f"}, - {file = "pydantic-1.10.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:990406d226dea0e8f25f643b370224771878142155b879784ce89f633541a024"}, - {file = "pydantic-1.10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e82a6d37a95e0b1b42b82ab340ada3963aea1317fd7f888bb6b9dfbf4fff57c"}, - {file = "pydantic-1.10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9193d4f4ee8feca58bc56c8306bcb820f5c7905fd919e0750acdeeeef0615b28"}, - {file = "pydantic-1.10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b3ce5f16deb45c472dde1a0ee05619298c864a20cded09c4edd820e1454129f"}, - {file = "pydantic-1.10.4-cp39-cp39-win_amd64.whl", hash = "sha256:9cbdc268a62d9a98c56e2452d6c41c0263d64a2009aac69246486f01b4f594c4"}, - {file = "pydantic-1.10.4-py3-none-any.whl", hash = "sha256:4948f264678c703f3877d1c8877c4e3b2e12e549c57795107f08cf70c6ec7774"}, - {file = "pydantic-1.10.4.tar.gz", hash = "sha256:b9a3859f24eb4e097502a3be1fb4b2abb79b6103dd9e2e0edb70613a4459a648"}, + {file = "pydantic-1.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb"}, + {file = "pydantic-1.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2"}, + {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2"}, + {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9"}, + {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee"}, + {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a"}, + {file = "pydantic-1.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e"}, + {file = "pydantic-1.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984"}, + {file = "pydantic-1.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d"}, + {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b"}, + {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73"}, + {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8"}, + {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a"}, + {file = "pydantic-1.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449"}, + {file = "pydantic-1.10.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87"}, + {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc"}, + {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c"}, + {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6"}, + {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15"}, + {file = "pydantic-1.10.5-cp37-cp37m-win_amd64.whl", hash = "sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419"}, + {file = "pydantic-1.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760"}, + {file = "pydantic-1.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb"}, + {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642"}, + {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab"}, + {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19"}, + {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718"}, + {file = "pydantic-1.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e"}, + {file = "pydantic-1.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3"}, + {file = "pydantic-1.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf"}, + {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb"}, + {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325"}, + {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31"}, + {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e"}, + {file = "pydantic-1.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594"}, + {file = "pydantic-1.10.5-py3-none-any.whl", hash = "sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28"}, + {file = "pydantic-1.10.5.tar.gz", hash = "sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a"}, ] [package.dependencies] @@ -2767,6 +2768,50 @@ files = [ {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, ] +[[package]] +name = "pygit2" +version = "1.11.1" +description = "Python bindings for libgit2." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pygit2-1.11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:263e05ac655a4ce0a1083aaaedfd0a900b8dee2c3bb3ecf4f4e504a404467d1f"}, + {file = "pygit2-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ee6b4a0e181c576cdb64b1568bfbff3d1c2cd7e99808f578c8b08875c0f43739"}, + {file = "pygit2-1.11.1-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:d1b5fcaac1f29337f2d1465fa095e2e375b76a06385bda9391cb418c7937fb54"}, + {file = "pygit2-1.11.1-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:96ff745d3199909d06cab5e419a6b953be99992414a08ec4dddb682f395de8f1"}, + {file = "pygit2-1.11.1-cp310-cp310-win32.whl", hash = "sha256:b3c8726f0c9a2b0e04aac37b18027c58c2697b9c021d3458b28bc250b9b6aecf"}, + {file = "pygit2-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:f42409d25bbfc090fd1af1f5f47584d7e0c4212b037a7f86639a02c30420c6ee"}, + {file = "pygit2-1.11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29f89d96bbb404ca1566418463521039903094fad2f81a76d7083810d2ea3aad"}, + {file = "pygit2-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d5c158b9430c5e76ca728b1a214bf21d355af6ac6e2da86ed17775b870b6c6eb"}, + {file = "pygit2-1.11.1-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:6c3434b143e7570ec45cd1a0e344fe7a12e64b99e7155fa38b74f724c8fc243c"}, + {file = "pygit2-1.11.1-cp311-cp311-manylinux_2_24_x86_64.whl", hash = "sha256:550aa503c86ef0061ce64d61c3672b15b500c2b1e4224c405acecfac2211b5d9"}, + {file = "pygit2-1.11.1-cp311-cp311-win32.whl", hash = "sha256:f270f86a0185ca2064e1aa6b8db3bb677b1bf76ee35f48ca5ce28a921fad5632"}, + {file = "pygit2-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:56b9deeab214653805214f05337f5e9552b47bf268c285551f20ea51a6056c3e"}, + {file = "pygit2-1.11.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3c5838e6516abc4384498f4b4c7f88578221596dc2ba8db2320ff2cfebe9787e"}, + {file = "pygit2-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a886aab5aae8d8db572e20b9f56c13cd506775265222ea7f35b2c781e4fa3a5e"}, + {file = "pygit2-1.11.1-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:3be4534180edd53e3e1da93c5b091975566bfdffdc73f21930d79fef096a25d2"}, + {file = "pygit2-1.11.1-cp38-cp38-manylinux_2_24_x86_64.whl", hash = "sha256:4d6209c703764ae0ba57b17038482f3e54f432f80f88ccd490d7f8b70b167db6"}, + {file = "pygit2-1.11.1-cp38-cp38-win32.whl", hash = "sha256:ddb032fa71d4b4a64bf101e37eaa21f5369f20a862b5e34bbc33854a3a35f641"}, + {file = "pygit2-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:f8de0091e5eeaea2004f63f7dcb4540780f2124f68c0bcb670ae0fa9ada8bf66"}, + {file = "pygit2-1.11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b44674e53efa9eca36e44f2f3d1a29e53e78649ba13105ae0b037d557f2c076"}, + {file = "pygit2-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0170f31c2efb15f6779689df328c05a8005ecb2b92784a37ff967d713cdafe82"}, + {file = "pygit2-1.11.1-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:960a55ff78f48887a7aa8ece952aad0f52f0a2ba1ad7bddd7064fbbefd85dfbb"}, + {file = "pygit2-1.11.1-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:df722c90fb54a42fa019dcf8d8f82961c3099c3024f1fda46c53e0886ff8f0f3"}, + {file = "pygit2-1.11.1-cp39-cp39-win32.whl", hash = "sha256:3b091e7fd00dd2a2cd3a6b5e235b6cbfbc1c07f15ee83a5cb3f188e1d6d1bca1"}, + {file = "pygit2-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:da040dc28800831bcbefef0850466739f103bfc769d952bd10c449646d52ce8f"}, + {file = "pygit2-1.11.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:585daa3956f1dc10d08e3459c20b57be42c7f9c0fbde21e797b3a00b5948f061"}, + {file = "pygit2-1.11.1-pp38-pypy38_pp73-manylinux_2_24_aarch64.whl", hash = "sha256:273878adeced2aec7885745b73fffb91a8e67868c105bf881b61008d42497ad6"}, + {file = "pygit2-1.11.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:48cfd72283a08a9226aca115870799ee92898d692699f541a3b3f519805108ec"}, + {file = "pygit2-1.11.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a9ca4cb2481d2df14d23c765facef325f717d9a3966a986b86e88d92eef11929"}, + {file = "pygit2-1.11.1-pp39-pypy39_pp73-manylinux_2_24_aarch64.whl", hash = "sha256:d5f64a424d9123b047458b0107c5dd33559184b56a1f58b10056ea5cbac74360"}, + {file = "pygit2-1.11.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f13e190cc080bde093138e12bcb609500276227e3e8e8bd8765a2fd49ae2efb8"}, + {file = "pygit2-1.11.1.tar.gz", hash = "sha256:793f583fd33620f0ac38376db0f57768ef2922b89b459e75b1ac440377eb64ec"}, +] + +[package.dependencies] +cffi = ">=1.9.1" + [[package]] name = "pygments" version = "2.14.0" @@ -2946,14 +2991,14 @@ six = ">=1.5" [[package]] name = "python-json-logger" -version = "2.0.5" +version = "2.0.7" description = "A python library adding a json log formatter" category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "python-json-logger-2.0.5.tar.gz", hash = "sha256:3853e0b73e6c1ba4b1f2543066b24950bf1c21ed104f297a7bff8c74532a6ab2"}, - {file = "python_json_logger-2.0.5-py3-none-any.whl", hash = "sha256:f389ccb0a8fd26f84c294dc627a999daf58f759b457ee022f698098f6547288d"}, + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, ] [[package]] @@ -3392,14 +3437,14 @@ files = [ [[package]] name = "soupsieve" -version = "2.3.2.post1" +version = "2.4" description = "A modern CSS selector implementation for Beautiful Soup." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, - {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, + {file = "soupsieve-2.4-py3-none-any.whl", hash = "sha256:49e5368c2cda80ee7e84da9dbe3e110b70a4575f196efb74e51b94549d921955"}, + {file = "soupsieve-2.4.tar.gz", hash = "sha256:e28dba9ca6c7c00173e34e4ba57448f0688bb681b7c5e8bf4971daafc093d69a"}, ] [[package]] @@ -3952,28 +3997,40 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +[[package]] +name = "types-jsonschema" +version = "4.17.0.6" +description = "Typing stubs for jsonschema" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "types-jsonschema-4.17.0.6.tar.gz", hash = "sha256:e9b15e34b4f2fd5587bd68530fa0eb2a17c73ead212f4471d71eea032d231c46"}, + {file = "types_jsonschema-4.17.0.6-py3-none-any.whl", hash = "sha256:ecef99bc64848f3798ad18922dfb2b40da25f17796fafcee50da984a21c5d6e6"}, +] + [[package]] name = "types-pyyaml" -version = "6.0.12.6" +version = "6.0.12.8" description = "Typing stubs for PyYAML" category = "main" optional = false python-versions = "*" files = [ - {file = "types-PyYAML-6.0.12.6.tar.gz", hash = "sha256:24e76b938d58e68645271eeb149af6022d1da99788e481f959bd284b164f39a1"}, - {file = "types_PyYAML-6.0.12.6-py3-none-any.whl", hash = "sha256:77b74d0874482f2b42dd566b7277b0a220068595e0fb42689d0c0560f3d1ae9e"}, + {file = "types-PyYAML-6.0.12.8.tar.gz", hash = "sha256:19304869a89d49af00be681e7b267414df213f4eb89634c4495fa62e8f942b9f"}, + {file = "types_PyYAML-6.0.12.8-py3-none-any.whl", hash = "sha256:5314a4b2580999b2ea06b2e5f9a7763d860d6e09cdf21c0e9561daa9cbd60178"}, ] [[package]] name = "typing-extensions" -version = "4.4.0" +version = "4.5.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] [[package]] @@ -4099,14 +4156,14 @@ test = ["websockets"] [[package]] name = "werkzeug" -version = "2.2.2" +version = "2.2.3" description = "The comprehensive WSGI web application library." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Werkzeug-2.2.2-py3-none-any.whl", hash = "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5"}, - {file = "Werkzeug-2.2.2.tar.gz", hash = "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f"}, + {file = "Werkzeug-2.2.3-py3-none-any.whl", hash = "sha256:56433961bc1f12533306c624f3be5e744389ac61d722175d543e1751285da612"}, + {file = "Werkzeug-2.2.3.tar.gz", hash = "sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe"}, ] [package.dependencies] @@ -4147,14 +4204,14 @@ notebook = ">=4.4.1" [[package]] name = "zipp" -version = "3.13.0" +version = "3.14.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "zipp-3.13.0-py3-none-any.whl", hash = "sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b"}, - {file = "zipp-3.13.0.tar.gz", hash = "sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6"}, + {file = "zipp-3.14.0-py3-none-any.whl", hash = "sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7"}, + {file = "zipp-3.14.0.tar.gz", hash = "sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb"}, ] [package.extras] @@ -4169,4 +4226,4 @@ xlsx-ingress = ["openpyxl"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "8b5de60559a0c5ed0c0f2237a57717256263014b3e30036a5634d86244706052" +content-hash = "bb2123dd492f6137c19298b84014b391c041174b74e409bd735077bd0e3cc473" diff --git a/pyproject.toml b/pyproject.toml index 0f5a9efe0..ed43e97c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,9 @@ readme = "README.md" repository = "https://github.com/NREL/BuildingMOTIF" documentation = "https://nrel.github.io/BuildingMOTIF" +[tool.poetry.scripts] +buildingmotif = 'buildingmotif.bin.cli:app' + [tool.poetry.dependencies] python = "^3.8" rdflib = "6.1.1" @@ -34,6 +37,9 @@ openpyxl = "^3.0.10" setuptools = "^65.6.3" netifaces = "^0.11.0" psycopg2 = "^2.9.5" +pygit2 = "^1.11.1" +jsonschema = "^4.17.3" +types-jsonschema = "^4.17.0.6" [tool.poetry.dev-dependencies] black = "^22.3.0" diff --git a/tests/unit/test_schemas.py b/tests/unit/test_schemas.py new file mode 100644 index 000000000..d885f7461 --- /dev/null +++ b/tests/unit/test_schemas.py @@ -0,0 +1,37 @@ +import pytest +from jsonschema.exceptions import ValidationError + +from buildingmotif.schemas import validate_libraries_yaml + +bad_fixtures = [ + {"ontology": "Brick.ttl"}, # needs to be outer array + {"abc": "def"}, # needs to be outer array + [{"abc": "def"}], # bad key + [{"git": {"repo": "abc"}}], # missing fields + [{"directory": 123}], # bad data type + [{"directory": 123}, {"directory": "/a/b/c"}], # one bad field one good field + [{"ontology": "Brick.ttl", "directory": "a/b/c"}], # only one field at a time +] + +good_fixtures = [ + [{"ontology": "Brick.ttl"}], + [{"directory": "a/b/c"}], + [{"git": {"repo": "https://abc", "branch": "main", "path": "my/templates"}}], + [{"ontology": "Brick.ttl"}, {"directory": "a/b/c"}], +] + + +def pytest_generate_tests(metafunc): + if "bad_fixture" in metafunc.fixturenames: + metafunc.parametrize("bad_fixture", bad_fixtures) + if "good_fixture" in metafunc.fixturenames: + metafunc.parametrize("good_fixture", good_fixtures) + + +def test_libraries_yml_schema_invalidate_bad(bad_fixture): + with pytest.raises(ValidationError): + validate_libraries_yaml(bad_fixture) + + +def test_libraries_yml_schema_validate_good(good_fixture): + validate_libraries_yaml(good_fixture)