Skip to content

BACnet/IP ​

BACnet (Building Automation and Control Networks) is a communication protocol used in smart buildings. It is defined by the International Organization for Standardization (ISO), the American National Standards Institute (ANSI) and the American Society of Heating, Venting, and Air-conditioning Engineers (ASHRAE). BACnet is designed specifically for smart buildings and control systems, and can be used for heating, ventilation, and air conditioning (HVAC), lighting control, access control, fire detection systems, and related equipment. Its advantages include reducing the cost of maintenance systems and making installation simpler than general industrial communication protocols. In addition, BACnet also provides five standard protocols commonly used in the industry, which can prevent equipment and system suppliers from monopolizing the market and increase the scalability and compatibility of future systems. BACnet supports multiple communication methods, including serial ports, IP, Ethernet, and ZigBee.

For the generic steps, see Create a Southbound Driver and Groups and Tags.

The BACnet/IP driver talks to a single device at a known address by unicast, reading with ReadPropertyMultiple and writing with WriteProperty. It does no discovery of its own: Who-Is/I-Am broadcasts and cross-subnet discovery through a BBMD (BACnet Broadcast Management Device) belong to the Device Scanning driver. Using the two together is the recommended approach - let the scan driver find the devices and tags on the network, then have it generate a fully configured BACnet/IP node for you.

Add Driver ​

On Data Collection → South Devices, click Add Device.

  • Name: The name of this device node.
  • Driver: Select the BACnet/IP driver.

Connection Parameters ​

Click the driver card to open the Device Configuration page and fill in:

ParameterDescription
Target Device IP AddressIP of the BACnet device. When the device sits behind a BACnet router, put the router's IP here
Target Device PortPort of the BACnet device, default 47808
Target Device NetworkNetwork number (DNET) of the BACnet network the device is on, 0 - 65534. Only used when a device MAC is given; leave at 0 for a direct device
Target Device MACMAC (DADR) of the device behind the router, as hex without separators. Leave empty for a device on this network

Reaching a Device on Another BACnet Network ​

Crossing IP subnets and crossing BACnet networks are two different things, and they are configured differently:

  • Across IP subnets but still within the same BACnet/IP network - this only affects broadcasts; unicast reads and writes are unaffected. Give this driver the device's own IP; no BBMD is involved.
  • Across BACnet networks, where the device hangs off an MS/TP network or another B/IP network behind a BACnet router - the device has no directly reachable IP and every message has to be forwarded by the router. This is when the target device network and MAC are needed.

The MAC length depends on the network the device is on: an MS/TP station number is one octet such as 05, while a B/IP address is six octets of IP plus port, e.g. C0A80164BAC0 for 192.168.1.100:47808.

ScenarioTarget Device IP AddressTarget Device NetworkTarget Device MAC
Device on this network, directly reachableDevice IP0empty
Device on MS/TP network 2001 behind a routerRouter IP200105
Device on another B/IP network behind a routerRouter IPThat network's numberC0A80164BAC0

TIP

When in doubt, run a scan first with Device Scanning. Every device it reports carries address, port, dnet and dadr, which map one to one onto the four settings above - or call its apply endpoint and skip filling them in by hand.

Tag Configuration ​

The data types and address formats supported by this driver are listed below.

Data Types ​

  • FLOAT
  • DOUBLE
  • BIT
  • BOOL
  • INT8
  • INT32
  • UINT8
  • UINT16
  • UINT32
  • STRING

Address Format ​

AREA ADDRESS(.PROPERTY_ID)

AREA is the area abbreviation, ADDRESS the object instance number, and PROPERTY_ID an optional property name. With no property given, the current value (Present_Value) is read or written, except in the DEV area.

support Area

AREAOBJECT TYPEADDRESS RANGEATTRIBUTEDATA TYPEREMARK
AIanalog-input0 - 0x3fffffreadFLOATanalog input
AOanalog-output0 - 0x3fffffread/writeFLOATanalog output
AVanalog-value0 - 0x3fffffread/writeFLOATanalog value
BIbinary-input0 - 0x3fffffreadBITbinary input
BObinary-output0 - 0x3fffffread/writeBITbinary output
BVbinary-value0 - 0x3fffffread/writeBITbinary value
MSImulti-state-input0 - 0x3fffffreadUINT8multi state input
MSOmulti-state-output0 - 0x3fffffread/writeUINT8multi state output
MSVmulti-state-value0 - 0x3fffffread/writeUINT8multi state value
ACCaccumulator0 - 0x3fffffread/writeUINT32 (UINT8 accepted)accumulator
LAVlarge-analog-value0 - 0x3fffffread/writeDOUBLElarge analog value
IVinteger-value0 - 0x3fffffread/writeINT32integer value
PIVpositive-integer-value0 - 0x3fffffread/writeUINT32positive integer value
CSVcharacterstring-value0 - 0x3fffffread/writeSTRINGcharacter string value
LOlighting-output0 - 0x3fffffread/writeFLOATlighting output
BLObinary-lighting-output0 - 0x3fffffread/writeBITbinary lighting output
DVdate-value0 - 0x3fffffread/writeSTRINGdate value
TVtime-value0 - 0x3fffffread/writeSTRINGtime value
DEVdevice0 - 0x3fffffreadsee property tabledevice

TIP

The data type follows from the object type and cannot be chosen freely. An AI tag must be FLOAT and an MSV tag must be UINT8; the wrong type is rejected with a type-not-supported error. The ACC area is UINT32 per the standard, with UINT8 kept only so tags configured earlier still validate.

Input objects (AI, BI, MSI) reflect a measured quantity and are not writable - adding one with the write attribute is refused.

support standard property

propertyaddresstype
object nameObject_Namestring
object typeObject_Typeuint8
descriptionDescriptionstring
device typeDevice_Typestring
status flagsStatus_Flagsstring
event stateEvent_Stateuint8
out of serviceOut_Of_Servicebool
update intervalUpdate_Intervaluint8
minimumMin_Pres_Valuefloat
maximumMax_Pres_Valuefloat
resolutionResolutionfloat
COV incrementCOV_Incrementfloat
time delayTime_Delayuint8
notification classNotification_Classuint8
notify typeNotify_Typeuint8
unitUnitsuint8
high limitHigh_Limitfloat
low limitLow_Limitfloat
deadbandDeadbandfloat
reliabilityReliabilityuint8
polarityPolarityuint8
system statusSystem_Statusuint8
vendor nameVendor_Namestring
vendor identifierVendor_Identifieruint8
model nameModel_Namestring
firmware revisionFirmware_Revisionstring
application software versionApplication_Software_Versionstring
locationLocationstring
protocol versionProtocol_Versionuint16
protocol conformance classProtocol_Conformance_Classuint8
supported protocol serviceProtocol_Service_Supportedstring
supported protocol object typesProtocol_Object_Types_Supportedstring
serial numberSerial_Numberstring
max accepted apdu lengthMax_APDU_Length_Accepteduint16
supported segmentationSegmentation_Supporteduint8
local timeLOCAL_TIMEstring
local dateLOCAL_DATEstring
utc offsetUTC_Offsetint8
daylight savings statusDaylight_Savings_Statusbool
APDU segment timeoutAPUD_Segment_Timeoutuint8
APDU timeoutAPUD_Timeoutuint16
number of APDU retriesNumber_Of_APDU_Retriesuint8
max masterMax_Masteruint8
max info frameMax_Info_Frameuint8
profile nameProfile_Namestring
pluse ratePulse_Rateuint8
scaleScalefloat
prescalePrescalefloat
value before changeValue_Before_Changeuint8
value change timeValue_Change_Timestring

If no property is specified, the default property is Present_Value.

support custom property

PROPERTY_ID consists of two parts: a custom flag and the value (integer) of the property, with the overall format being AREA ADDRESS.custom.id.

Support Present Value zeroing operation, currently supporting AO and BO regions. The address format is "(AO|BO)xxx.NULL", and only write operations are supported. Depending on the type of region, write the zero value of the corresponding type.

TIP

A .NULL tag is write-only. Adding one with the read or subscribe attribute is refused with an attribute-not-supported error.

Example Addresses ​

AddressData TypeDescription
AI0FLOATAI area, address is 0
AI1FLOATAI area, address is 1
AV30FLOATAV area, address is 30
BO10BITBO area, address is 10
BO20BITBO area, address is 20
BO10.NULLBITBO area, address is 10, write NULL
BI0BITBI area, address is 0
BI1BITBI area, address is 1
BV3BITBV area, address is 3
MSI10UINT8MSI area, address is 10
MSI20UINT8MSI area, address is 20
MSI30UINT8MSI area, address is 30
ACC1UINT32ACC area, address is 1
LAV5DOUBLELAV area, address is 5
IV7INT32IV area, address is 7
PIV8UINT32PIV area, address is 8
CSV2STRINGCSV area, address is 2
AI0.Object_NameSTRINGAI area, address is 0, property is Object_Name
AI0.custom.1234ALLAI area, address is 0, property is 1234
DEV400001.Vendor_NameSTRINGDEV area, address is 400001, property is vendor name

Device Scanning ​

When the device inventory is not known, Administration → BACnet/IP Device Scan broadcasts to discover devices and enumerate their tags, then generates a fully configured BACnet/IP driver from the result. See BACnet/IP Device Scan.