Skip to main content

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.

ClassBACnet object typeCommandable
bacnet:AnalogInputObjectAI: a measured analog value (temperature, pressure, flow)no
bacnet:AnalogOutputObjectAO: an analog output driving a physical actuatoryes
bacnet:AnalogValueObjectAV: a software analog value (setpoint, calculated value)yes
bacnet:BinaryInputObjectBI: a two-state input (contact, run status)no
bacnet:BinaryOutputObjectBO: a two-state physical output (start/stop, enable)yes
bacnet:BinaryValueObjectBV: a two-state software valueyes
bacnet:MultistateInputObjectMSI: an input with an enumerated set of statesno
bacnet:MultistateOutputObjectMSO: an enumerated physical outputyes
bacnet:MultistateValueObjectMSV: an enumerated software value (a mode)yes
bacnet:DeviceObjectDevice: the controller itself, one per device–
bacnet:TimeStampThe 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.

Three mechanisms, each visible on the class pages:

  1. External reference. Point has hasExternalReference targeting 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 targeting bacnet:DeviceObject. A Point points at its BACnet object; the Thing that hosts it points at the device object.
  2. 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.
  3. Point properties. Point itself carries a bacnet:priority-array property (the pointBacnetPriorityArray shape), alongside protocol-neutral properties that are usually filled from BACnet: unit, valueMap and stateTexts (state text for multistate and binary objects), readOnly, minLimit / maxLimit, datatype, and unused for 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 objectStart fromThen decide
AISensorWhich quantity and medium: Zone_Air_Temperature_Sensor, Supply_Air_Static_Pressure_Sensor, …
AO, AVSetpoint or CommandA target (…_Setpoint) or a driven output such as Damper_Position_Command. AVs are frequently setpoints, but also calculated values that are really Sensors
BIStatusOn_Off_Status, Occupancy_Status, or an Alarm when the point reports an off-normal condition
BO, BVCommandStart_Stop_Command, Enable_Command; a BV can also be a Status or an enable setpoint
MSIStatusMode_Status or another Status subclass; stateTexts give the enumeration
MSO, MSVCommand or StatusMode_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