Controllers#

Note

brick:Controller, brick:controls/brick:isControlledBy, and brick:hosts/brick:isHostedBy are new in Brick v1.5.

A Controller is a piece of ICT equipment that supervises and commands one or more physical equipment instances and exposes the points used to do so. Brick provides two relationship pairs for modeling controllers:

  • brick:controls / brick:isControlledBy — links a Controller to the Equipment it supervises.

  • brick:hosts / brick:isHostedBy — links a Controller (or any ICT Equipment) to the Points it exposes on the network.

These relationships are distinct from brick:hasPoint, which expresses that a point describes a piece of equipment, regardless of which device exposes it.

Relationships#

brick:controls: the subject (a brick:Controller) commands the object (a brick:Equipment instance).

brick:hosts: the subject (a brick:ICT_Equipment or brick:Controller) exposes the object (a brick:Point) on the network. This is the physical/logical hosting relationship — the device through which the point is accessed.

A point may be hosted by a controller (brick:hosts) and also described as belonging to an equipment (brick:hasPoint / brick:isPointOf). These two relationships are independent.

Example: VAV Controller#

@prefix bldg: <http://example.com/controller#> .
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix rec: <https://w3id.org/rec#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

bldg:Controller_1 a brick:Controller ;
    rdfs:label "Main Building Controller" ;
    brick:controls bldg:VAV1 ;
    brick:hosts bldg:VAV1_Temperature_Sensor,
                bldg:VAV1_Occupancy_Sensor .

bldg:VAV1 a brick:Variable_Air_Volume_Box ;
    rdfs:label "VAV1" ;
    brick:hasPoint bldg:VAV1_Temperature_Sensor,
                   bldg:VAV1_Occupancy_Sensor ;
    brick:feeds bldg:Zone1 .

bldg:VAV1_Temperature_Sensor a brick:Temperature_Sensor .
bldg:VAV1_Occupancy_Sensor a brick:Occupancy_Sensor .

bldg:Zone1 a rec:HVACZone ;
    rdfs:label "Zone 1" .

Here brick:controls captures the supervisory relationship and brick:hosts captures which device exposes the points on the network. brick:hasPoint remains on the VAV to express that those points describe the VAV — not the controller.

Combining Controllers with Point Collections#

brick:hosts and brick:Point_Collection serve different purposes and can be used together. Use brick:hosts for the physical/network hosting relationship; use a brick:Point_Collection to group points for display, export, or application logic.

@prefix bldg: <urn:example/vav#> .
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix rec: <https://w3id.org/rec#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix unit: <http://qudt.org/vocab/unit/> .

bldg:VAV_1 a brick:Variable_Air_Volume_Box ;
    brick:hasPoint bldg:VAV_1_SAF_Sensor .

bldg:Ctrl_1 a brick:Controller ;
    brick:controls bldg:VAV_1 ;
    brick:hosts bldg:VAV_1_SAF_Sensor .

bldg:VAV_1PointCollection a brick:Point_Collection ;
    rdfs:label "VAV 1 Point Collection" ;
    rec:includes bldg:VAV_1_SAF_Sensor .

bldg:VAV_1_SAF_Sensor a brick:Supply_Air_Flow_Sensor ;
    brick:hasUnit unit:FT3-PER-MIN ;
    brick:isPointOf bldg:VAV_1 .

The controller hosts the sensor; the Point Collection organizes it for tools. See Point Collections for more on organizing points into bundles.

Query Patterns#

Find all equipment controlled by a given controller:

PREFIX brick: <https://brickschema.org/schema/Brick#>

SELECT ?equipment WHERE {
    ?controller a/rdfs:subClassOf* brick:Controller ;
                brick:controls ?equipment .
}

Find which controller hosts a given point:

PREFIX brick: <https://brickschema.org/schema/Brick#>

SELECT ?controller WHERE {
    ?controller brick:hosts :my_point .
}

Find all points hosted by controllers in the model, and the equipment those points describe:

PREFIX brick: <https://brickschema.org/schema/Brick#>

SELECT ?controller ?point ?equipment WHERE {
    ?controller a/rdfs:subClassOf* brick:Controller ;
                brick:hosts ?point .
    ?point brick:isPointOf ?equipment .
}