Automation and Point Collections#
Automation and Point Collections are named groups for organizing building automation entities. They make it possible to describe application-level bundles such as frost detection, ventilation control, room control applications, startup sequences, alarm packages, and operator-facing point groups.
These collections are organizational. They help tools find related entities, but they do not replace the Brick relationships that describe physical composition, point ownership, topology, or control behavior.
Important
Do not infer functional semantics from collection membership alone. If a sensor, command, alarm, and piece of equipment are in the same collection, that only says they belong to the same modeled bundle. Use explicit Brick relationships to describe what is measured, commanded, controlled, hosted, or physically part of something else.
At-a-Glance#
Create a
brick:Point_Collectionfor point-only groups.Create a
brick:Automation_Collectionfor mixed automation bundles.Put member entities into the collection with
rec:includes.Attach every point to what it describes with
brick:hasPointorbrick:isPointOf.Attach every hosted point to its controller or ICT equipment with
brick:hostsPointorbrick:isHostedBy.Use
brick:hasPartonly for equipment composition, not collection membership.Add
rdfs:labelso tools can present the collection clearly.
The Two Collection Types#
Use brick:Automation_Collection for a logical automation bundle. An Automation Collection can include equipment, points, point collections, and other automation collections. It is the right choice when a grouping represents a control application, sequence, alarm package, or other automation function that spans more than just points.
Use brick:Point_Collection for a point-only bundle. A Point Collection can include points and nested Point Collections. It is the right choice for operator displays, trend packages, export packages, and other groupings whose members are only points.
Both types use rec:includes for membership:
@prefix bldg: <urn:example/> .
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix rec: <https://w3id.org/rec#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
bldg:VentilationControl a brick:Automation_Collection ;
rdfs:label "Ventilation control" ;
rec:includes bldg:AirHandler,
bldg:VentilationPoints .
bldg:VentilationPoints a brick:Point_Collection ;
rdfs:label "Ventilation points" ;
rec:includes bldg:DamperPosition,
bldg:CO2Setpoint .
Relationship Roles#
Use collection membership for organization, and use the normal Brick relationships for the model semantics:
Use
rec:includesto put an entity into an Automation Collection or Point Collection.Use
brick:hasPartfor physical or structural composition, such as an AHU having a fan or coil.Use
brick:hasPoint/brick:isPointOfto attach a point to the equipment, location, or zone it describes.Use
brick:hostsPoint/brick:isHostedByto describe the ICT equipment, controller, gateway, or device that hosts or exposes a point.Use
brick:controls/brick:isControlledByfor control relationships between controllers and the equipment they supervise.
Equipment, spaces, and zones can include automation collections with rec:includes. This is useful when an asset or zone has a logical application bundle, but the bundle is not a physical part of that asset or zone.
Choosing the Right Pattern#
Use a Point Collection when all of these are true:
the grouping only contains points or nested point groups
the grouping is mainly for display, export, trending, configuration, or navigation
membership should not imply control logic, equipment structure, or a sequence of operation
Use an Automation Collection when any of these are true:
the grouping includes equipment or other non-point entities
the grouping represents an automation application, control package, alarm package, or sequence
the grouping needs nested Point Collections for subsets of points
the grouping should be associated with an equipment instance, space, or zone as a named application
Define a custom subclass when the grouping has stable meaning in a project or organization. For example, mpo:FrostDetectionCollection can be declared as a subclass of brick:Automation_Collection.
Example: Frost Detection#
This example models an AHU with a frost detection package. The AHU uses brick:hasPart for physical components and rec:includes for the logical automation bundle. The points are still attached to the entities they describe with brick:isPointOf / brick:hasPoint.
@prefix bldg: <urn:example/collection#> .
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix mpo: <http://my-private-ontology.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rec: <https://w3id.org/rec#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
mpo:FrostDetectionCollection a owl:Class ;
rdfs:subClassOf brick:Automation_Collection ;
rdfs:label "Frost Detection Collection" ;
rdfs:comment "An automation collection that includes components for frost detection in an AHU." .
bldg:Ahu a brick:AHU ;
brick:hasPart bldg:Hcl, bldg:Fan ;
rec:includes bldg:FrostDetection .
bldg:Hcl a brick:Heating_Coil .
bldg:Fan a brick:Discharge_Fan .
bldg:FrostDetection a mpo:FrostDetectionCollection ;
rdfs:label "AHU frost detection" ;
rec:includes bldg:FrostDetectionSensor,
bldg:FrostDetectionMonitoring,
bldg:FrostPoints .
bldg:FrostDetectionSensor a brick:Sensor_Equipment ;
brick:hasPoint bldg:FrostDetected .
bldg:FrostDetectionMonitoring a brick:Enable_Command ;
brick:isPointOf bldg:Ahu .
bldg:FrostPoints a brick:Point_Collection ;
rdfs:label "Frost detection points" ;
rec:includes bldg:FrostDetected,
bldg:MixedAirTemp .
bldg:FrostDetected a brick:Frost_Sensor ;
brick:isPointOf bldg:FrostDetectionSensor .
bldg:MixedAirTemp a brick:Mixed_Air_Temperature_Sensor ;
brick:isPointOf bldg:Ahu .
The Automation Collection groups the whole frost detection application. The nested Point Collection groups only the telemetry associated with that application.
Example: Room Application#
Automation Collections can represent applications within a zone or space. In this example, a zone includes an HVAC application. The HVAC application includes equipment and point-only collections for specific application areas.
@prefix bldg: <urn:example/room#> .
@prefix brick: <https://brickschema.org/schema/Brick#> .
@prefix rec: <https://w3id.org/rec#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
bldg:Zone a rec:Zone ;
rec:includes bldg:Hvac .
bldg:Room a rec:Room ;
rec:hasPart bldg:Zone .
bldg:Hvac a brick:Automation_Collection ;
rdfs:label "HVAC" ;
rec:includes bldg:RadiantCeiling,
bldg:RoomTemperatureSetpointDetermination,
bldg:AirVolumeFlowTracking,
bldg:VentilationControl .
bldg:RadiantCeiling a brick:Radiant_Panel ;
rdfs:label "Radiant ceiling" ;
brick:feeds bldg:Room .
bldg:RoomTemperatureSetpointDetermination a brick:Point_Collection ;
rdfs:label "Room temperature setpoint determination" ;
rec:includes bldg:RoomTemperatureSetpoint,
bldg:RoomTemperatureSetpointShift .
bldg:RoomTemperatureSetpoint a brick:Target_Zone_Air_Temperature_Setpoint ;
rdfs:label "Room temperature setpoint" ;
brick:isPointOf bldg:Zone .
bldg:RoomTemperatureSetpointShift a brick:Temperature_Adjust_Sensor ;
rdfs:label "Room temperature setpoint shift" ;
brick:isPointOf bldg:Zone .
bldg:AirVolumeFlowTracking a brick:Point_Collection ;
rdfs:label "Air volume flow tracking" ;
rec:includes bldg:RoomSupplyAirVolumeFlow,
bldg:RoomExtractAirVolumeFlowSetpoint .
bldg:RoomSupplyAirVolumeFlow a brick:Supply_Air_Flow_Sensor ;
rdfs:label "Room supply air volume flow" ;
brick:isPointOf bldg:Zone .
bldg:RoomExtractAirVolumeFlowSetpoint a brick:Exhaust_Air_Flow_Setpoint ;
rdfs:label "Present setpoint for room extract air volume flow" ;
brick:isPointOf bldg:Zone .
bldg:VentilationControl a brick:Point_Collection ;
rdfs:label "Ventilation control" ;
rec:includes bldg:PresentVentilationSetpoint,
bldg:RoomAirQualitySetpointComfort,
bldg:RoomAirQualitySetpointPreComfort .
bldg:PresentVentilationSetpoint a brick:Damper_Position_Setpoint ;
rdfs:label "Present ventilation setpoint" ;
brick:isPointOf bldg:Zone .
bldg:RoomAirQualitySetpointComfort a brick:CO2_Setpoint ;
rdfs:label "Setpoint room air quality for comfort" ;
brick:isPointOf bldg:Zone .
bldg:RoomAirQualitySetpointPreComfort a brick:CO2_Setpoint ;
rdfs:label "Setpoint room air quality for pre-comfort" ;
brick:isPointOf bldg:Zone .
The top-level HVAC collection identifies the room automation application. Its point-only subcollections make it easy for tools to retrieve the points for each part of the application.
Example: Controller-Hosted Points#
Collections do not replace point hosting. A controller should still use brick:hostsPoint for the points it exposes, while Point Collections can organize those points for display or configuration.
@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:hostsPoint 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 .
One can nest Point Collections to model more complex setups: brick:Controller hosts the individual points and the collection organizes them.
Query Patterns#
The following queries assume standard RDFS subclass reasoning is either available in the graph or handled by the a/rdfs:subClassOf* property paths shown below.
Retrieve all members of an Automation Collection, including nested automation and point collections:
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rec: <https://w3id.org/rec#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?member WHERE {
?collection a/rdfs:subClassOf* brick:Automation_Collection ;
rec:includes+ ?member .
}
Retrieve all points in a Point Collection, including points in nested Point Collections:
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rec: <https://w3id.org/rec#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?point WHERE {
?collection a/rdfs:subClassOf* brick:Point_Collection ;
rec:includes+ ?point .
?point a/rdfs:subClassOf* brick:Point .
}
Find all automation bundles associated with an AHU and the entities they include:
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rec: <https://w3id.org/rec#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?collection ?member WHERE {
?ahu a/rdfs:subClassOf* brick:AHU ;
rec:includes ?collection .
?collection a/rdfs:subClassOf* brick:Automation_Collection ;
rec:includes+ ?member .
}
Find automation bundles associated with a zone and the points included in those bundles:
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rec: <https://w3id.org/rec#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?collection ?point WHERE {
?zone a rec:Zone ;
rec:includes ?collection .
?collection a/rdfs:subClassOf* brick:Automation_Collection ;
rec:includes+ ?point .
?point a/rdfs:subClassOf* brick:Point .
}
Retrieve both physical parts and logical automation bundles from an AHU:
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rec: <https://w3id.org/rec#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?related WHERE {
?ahu a/rdfs:subClassOf* brick:AHU .
{
?ahu brick:hasPart+ ?related .
} UNION {
?ahu rec:includes+ ?related .
}
}
Find the equipment or zone that each point in a collection describes:
PREFIX brick: <https://brickschema.org/schema/Brick#>
PREFIX rec: <https://w3id.org/rec#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?point ?entity WHERE {
?collection rec:includes+ ?point .
?point a/rdfs:subClassOf* brick:Point ;
brick:isPointOf ?entity .
}