BACnet
Related classes: BACnet_Concept · bacnet:AnalogInputObject · bacnet:BinaryOutputObject · bacnet:MultistateValueObject · bacnet:DeviceObject · BACnet_Device · BACnet_Object_Id · Point
BACnet is the protocol most building controllers speak. The ontology keeps BACnet's own vocabulary in its own namespace, dtmi:org:ashrae:bacnet, and links those objects to the semantic model rather than merging them into it. A Temperature_Sensor stays a Temperature_Sensor; the fact that it arrived as analog-input 1 on device 1201 is recorded next to it.
The eleven classes
All eleven extend the abstract BACnet_Concept, which extends Entity, and mirror the standard BACnet object types.
| Class | BACnet object type | Commandable |
|---|---|---|
| bacnet:AnalogInputObject | AI: a measured analog value (temperature, pressure, flow) | no |
| bacnet:AnalogOutputObject | AO: an analog output driving a physical actuator | yes |
| bacnet:AnalogValueObject | AV: a software analog value (setpoint, calculated value) | yes |
| bacnet:BinaryInputObject | BI: a two-state input (contact, run status) | no |
| bacnet:BinaryOutputObject | BO: a two-state physical output (start/stop, enable) | yes |
| bacnet:BinaryValueObject | BV: a two-state software value | yes |
| bacnet:MultistateInputObject | MSI: an input with an enumerated set of states | no |
| bacnet:MultistateOutputObject | MSO: an enumerated physical output | yes |
| bacnet:MultistateValueObject | MSV: an enumerated software value (a mode) | yes |
| bacnet:DeviceObject | Device: the controller itself, one per device | – |
| bacnet:TimeStamp | The BACnet TimeStamp type; declared without properties in this export | – |
The nine point-like objects share a set of properties taken from the standard: bacnet:object-identifier, bacnet:object-name, bacnet:object-type, bacnet:description, bacnet:out-of-service and bacnet:command-time-array. Inputs and binary outputs add bacnet:polarity; the analog objects add bacnet:low-limit. The six commandable objects require bacnet:priority-array and carry a typed relinquish default: bacnetAnalogRelinquishDefault (float), bacnetBinaryRelinquishDefault (boolean) or bacnetMultistateRelinquishDefault (integer). bacnet:DeviceObject has bacnet:object-identifier, bacnet:object-type and bacnet:location.
How objects link to Things and Points
Three mechanisms, each visible on the class pages:
- External reference. Point has
hasExternalReferencetargeting the nine object classes: "links an entity to an external reference object (e.g., a BACnet object) that describes its origin or counterpart in an external system". Thing has the same relationship targetingbacnet:DeviceObject. A Point points at its BACnet object; the Thing thathostsit points at the device object. - Identities. Two Identity subclasses exist for BACnet keys, attached with
hasIdentity: BACnet_Object_Id, whose value has the form{DeviceID}(/object={ObjectType}:{InstanceNumber})?, and BACnet_Vendor_Id, the vendor number from the ASHRAE assigned-vendor-id list. - Point properties.
Pointitself carries abacnet:priority-arrayproperty (thepointBacnetPriorityArrayshape), alongside protocol-neutral properties that are usually filled from BACnet:unit,valueMapandstateTexts(state text for multistate and binary objects),readOnly,minLimit/maxLimit,datatype, andunusedfor placeholder points a controller exposes but does not use.
On the equipment side Mapped adds BACnet_Device (a Device) and BACnet_Controller (a Controller under ICT_Equipment). Use BACnet_Device for the box discovered on the network and give it hasExternalReference → bacnet:DeviceObject; the equipment it controls (the AHU, the VAV) is a separate Thing linked with controls / isControlledBy.
From object type to point class
BACnet tells you the shape of a value, not what it means. The object type narrows the Brick point family; the semantics — which medium, which position in the airflow, which equipment — need the object name, description and units, and a person who knows the site.
| BACnet object | Start from | Then decide |
|---|---|---|
| AI | Sensor | Which quantity and medium: Zone_Air_Temperature_Sensor, Supply_Air_Static_Pressure_Sensor, … |
| AO, AV | Setpoint or Command | A target (…_Setpoint) or a driven output such as Damper_Position_Command. AVs are frequently setpoints, but also calculated values that are really Sensors |
| BI | Status | On_Off_Status, Occupancy_Status, or an Alarm when the point reports an off-normal condition |
| BO, BV | Command | Start_Stop_Command, Enable_Command; a BV can also be a Status or an enable setpoint |
| MSI | Status | Mode_Status or another Status subclass; stateTexts give the enumeration |
| MSO, MSV | Command or Status | Mode_Command when written to, a Status when read only |
Practical checks: the priority array and relinquish default exist only on commandable objects, so their presence is a reliable signal that a point is a Command or Setpoint rather than a Sensor, and readOnly on the Point should agree. out-of-service set on an object means the present value is being overridden and may not reflect the field.
Example
BACnet_Device "FCU-3 controller" hasExternalReference → bacnet:DeviceObject 1201
hasIdentity → BACnet_Object_Id "1201"
hasIdentity → BACnet_Vendor_Id "8"
controls → Fan_Coil_Unit "FCU-3"
hosts →
Zone_Air_Temperature_Sensor → bacnet:AnalogInputObject 1201/object=analog-input:1
Zone_Air_Temperature_Setpoint → bacnet:AnalogValueObject 1201/object=analog-value:1
On_Off_Status "fan" → bacnet:BinaryInputObject 1201/object=binary-input:1
Start_Stop_Command "fan" → bacnet:BinaryOutputObject 1201/object=binary-output:1
Mode_Command → bacnet:MultistateValueObject 1201/object=multi-state-value:1
Fan_Coil_Unit "FCU-3" hasPoint → each of the five points above