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.

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 plugin. Using the two together is the recommended approach - let the scan plugin find the devices and tags on the network, then have it generate a fully configured BACnet/IP node for you.

Add Device

Go to Configuration -> South Devices, then click Add Device to add the driver. Configure the following settings in the popup dialog box.

  • Name: The name of this device node.
  • Plugin: Select the BACnet/IP plugin.

Device Configuration

After clicking Create, you will be redirected to the Device Configuration page, where we will set up the parameters required for Neuron to establish a connection with the northbound application. You can also click the device configuration icon on the southbound device card to enter the Device Configuration interface.

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.

Configure Data Groups and Tags

After the plug-in is added and configured, the next step is to establish communication between your device and Neuron by adding groups and tags to the Southbound driver.

Once device configuration is completed, navigate to the South Devices page. Click on the device card or device row to access the Group List page. Here, you can create a new group by clicking on Create, then specifying the group name and data collection interval.

Upon successfully creating a group, click on its name to proceed to the Tag List page. This page allows you to add device tags for data collection. You'll need to provide information such as the tag address, attributes, and data type.

For information on general configuration items, see Connect to Southbound Devices. The subsequent section will concentrate on configurations specific to the driver.

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

BACnet/IP devices can be discovered by broadcasting Who-Is messages and listening for I-Am responses. The scan plugin implements this discovery, and can also re-enumerate the tags of known devices. It is a separate plugin from the BACnet/IP driver, and is used to generate fully configured BACnet/IP nodes.

The usual workflow is three steps:

  1. Enable scanning in system settings, choosing the scan modes according to your network topology
  2. Look at the devices and tags found by the scan
  3. Select a device and the tags you want, and click to generate a BACnet/IP node with all its tags

Enable Scanning

In System Settings -> BACnet/IP Device Scan, enable scanning.

Scan Configuration

ParameterDefaultDescription
Local Bind Address0.0.0.0Local interface to bind. 0.0.0.0 binds every interface; name one on a multi-homed host
Local Bind Port47808Local port used to send and receive BACnet messages. This normally has to be 47808, see below
Device Scan Interval600How often to broadcast Who-Is to find devices, in seconds, 30 - 86400
Point Scan Interval1200How often to re-enumerate the tags of known devices, in seconds, 60 - 86400
Local Broadcast ScanEnabledSend Who-Is as an Original-Broadcast-NPDU
Global Broadcast ScanDisabledSend Who-Is with DNET 0xFFFF, which BACnet routers forward to every network they serve
Broadcast Address255.255.255.255Destination of both broadcast modes. A subnet-directed address such as 192.168.1.255 is better
Scan via BBMDDisabledRegister as a foreign device with a BBMD and send Who-Is as Distribute-Broadcast-To-Network
BBMD IP AddressemptyOnly needed when Scan via BBMD is enabled
BBMD Port47808Only needed when Scan via BBMD is enabled

Choosing the Scan Modes

The three modes correspond to three different places a device can be. They may be enabled together, and duplicate discoveries are merged.

Where the device isMode to enableWhy
On the same IP subnet as NeuronLocal Broadcast ScanThe common case; the broadcast reaches it directly
On the same BACnet/IP network but a different IP subnetScan via BBMDIP broadcasts do not cross subnets, so a BBMD there has to relay them
On an MS/TP or other BACnet network behind a BACnet routerGlobal Broadcast ScanA router receiving a Who-Is with DNET 0xFFFF forwards it onward

If you cannot tell which applies, enable all three and look at the result. A device found across a BACnet network is reported with routed set to true plus a dnet and dadr, which go straight into the target device network and MAC above.