BACnet

The BACnet Device Driver allows Iotellect Server to communicate with devices supporting BACnet/IP Protocol. The BACnet is widely used in building automation and control systems for applications such as heating, ventilating, and air-conditioning control, lighting control, access control, and fire detection systems.

The BACnet driver provides connectivity to equipment using the BACnet protocol over IP networks (often referred to as BACnet/IP or Annex J).

Supported Object Types

The below list contains all BACnet object types that may be read, written and processed by Iotellect via BACnet driver.

  • Analog Input

  • Analog Output

  • Analog Value

  • Binary Input

  • Binary Output

  • Binary Value

  • Calendar

  • Command

  • Device

  • Event Enrollment

  • File

  • Group

  • Loop

  • Multi State Input

  • Multi State Output

  • Notification Class

  • Program

  • Schedule

  • Averaging

  • Multi State Value

  • Trend Log

  • Life Safety Point

  • Life Safety Zone

  • Accumulator

  • Pulse Converter

  • Event Log

  • Trend Log Multiple

  • Load Control

  • Structured View

  • Access Door

Supported Services

The below list contains all BACnet services that may be accessed using the driver.

BACnet Service

BACnet Interoperability Building Block (BIBB)

Who-Is

DM-DDB-A

ReadProperty

DS-RP-A

ReadPropertyMultiple

DS-RPM-A

WriteProperty

DS-WP-A

SubscribeCOV

DS-COV-A

SubscribeCOVProperty

DS-COVP-A

BACnet Interoperability Building Block (BIBB) describes the services supported by a BACnet device or application (Annex K of BACnet specification).

Segmentation Support

The BACnet Device Driver supports segmented requests and segmented responses. Both requests and responses support window sizes between 1 and 127 bytes.

Driver Information

Driver Plugin ID:

com.tibbo.linkserver.plugin.device.bacnet

Global Settings

To participate in a BACnet network, Iotellect Server emulates a BACnet device that communicates with other devices in the network. This device is called Local Device in terms of the driver.

Global settings are used to set up this Local Device.

Property

Description

Device ID

The Device ID is used to uniquely identify Local BACnet device, it can be in the range of 0 to 4194304. There cannot be more than one device using the same Device ID in one network.

Broadcast Address

Broadcast address mask for Who-Is request.

Local Bind Address

Indicates a specific network address (network interface) to be used for communicating with the devices. Default is 0.0.0.0, which will allow communication over multiple IP addresses.

Port

Specifies the local UDP port that the driver will bind to for all communications on the channel. The default setting is 47808 (0xBAC0). Typically, all BACnet/IP devices on an Ethernet network use the same port.

Connection Timeout

The amount of time (in milliseconds) that the driver will wait for an I-Am response after sending a Who-Is service request.

Timeout

This parameter specifies the time that the driver will wait for an expected response from the device before retrying or going on to the next request. The valid range is 100 to 9999 milliseconds.

Segment Timeout

Stands for the same timeout as above, but for segmented requests.

Segment Window

This parameter specifies the number of message segments that can be sent before a segment acknowledge message must be returned by the receiving party. The sender proposes a window size, and the receiver determines the actual size (which will be no larger than the proposed size). Thus, the driver will use this setting as the proposed window size for requests, and as the actual window size limit for responses from the device. Larger settings will likely increase performance on a reliable network, though smaller settings will allow communications problems to be detected earlier and corrected with fewer segments being resent. The valid range is 1 to 127.

Retries

Specifies the number of times that the driver will retry a confirmed request before giving up.

Max APDU Length Accepted

This parameter specifies the overall length or number of bytes of message segments that the driver will accept. The driver will attempt to read the maximum APDU length allowed by the target device on startup, and will use the smallest of the local or remote limits when sending requests. A smaller setting may be needed in order to accommodate the limitations of hardware between the driver and target device. Options include 50, 128, 206 (fits LonTalk frame), 480 (fits ARCNET frame), 1024, and 1476 (fits ISO 8803-3 frame). The largest value 1476 is generally the best choice.

Allow Any Primitive Types for String Properties

This parameter enables enhanced compatibility mode for BACnet controllers that violate the BACnet specification for CharacterString properties (such as the Present_Value of a CharacterString Value object).

According to the BACnet standard, such properties must contain string values only.
However, some devices send numeric or other primitive data types instead (for example: 15.4, -20, 1).
When this option is disabled, the driver treats this as a parsing error, which may cause device desynchronization.

When this option is enabled:

  • the driver accepts any primitive BACnet data types for CharacterString properties

  • values are automatically converted to their string representation

  • device synchronization continues without errors even if the controller sends non-standard data.

This option should be enabled only when required, as it relaxes standard BACnet type validation.

User Level Settings

None defined.

Device Account Properties

Properties specific to a certain BACnet device.

Connection Settings

Connection settings define how Iotellect Server communicates with a certain BACnet device. The following connection properties are available:

Property

Description

Network

Communication protocol used to establish a connection between Iotellect and the BACnet device.

  • BACnet IP. Use BACnet protocol over standard TCP/IP network.

  • BACnet MS/TP. Use BACnet protocol over a serial communication interface.

Addressing Method

There are three ways to address a BACnet device:

  • By address/port. In this case device Instance Number is detected by sending Who-Is request to specified address/port.

  • By device instance number. In this case IP address and port of device with specified Instance Number is detected by sending a broadcast Who-Is request to an IP range specified by Broadcast Address global setting.

  • Combined. May be used for communicating with devices that do not support Who-Is identification. In this case, both address/port and Instance Number must be specified.

IP Address or Host Name

Address of a BACnet device to connect to.

Port

An IP port of device to connect to.

Remote

Enable to indicate that the BACnet device and the Iotellect server are located in different subnets, with intermediary gateway devices pre-configured with UDP routing. In this case, the driver skips the Who-Is connection stage and attempts to immediately read the device properties.

Variable Naming Schema

Determines how the names of variables are constructed and represented in Iotellect.

  • By Object Identifier. Construct variable names using the BACnet object identifier and property identifier.

  • By Object Name. Construct variable names based on the object name and property name.

Read Timeout

Determines the maximum amount of time Iotellect will wait for a response from the BACnet device after sending a request. If the indicated Read Timeout elapses without a response, a synchronization error will occur and the device status will be set to Connection failed.

The Read Timeout must be less than the Synchronization Period indicated for the device.

Default value for Read Timeout is zero (0) , which indicates no timeout, and in this case the driver will wait indefinitely until receiving a response from the BACnet device.

Write Priority

Defines the write priority that changes made to the properties of the BACnet device (whether via the Properties Editor or bindings) will be transmitted. If no Write Priority is explicitly set (i.e., it's null), then the driver will send the write request without specifying a priority, leaving it to the BACnet device to handle according to its default behavior. Options include standard BACnet priorities:

  • 1 — Manual-Life Safety

  • 2 — Automatic-Life Safety

  • 3 — Available

  • 4 — Available

  • 5 — Critical Equipment Control

  • 6 — Minimum On/Off

  • 7 — Available

  • 8 — Manual Operator

  • 9–16 — Available

Sequential Objects Synchronization

Enables sequential synchronization of BACnet objects instead of parallel processing. This mode can help prevent communication overload and timeout errors when working with devices that have a large number of objects or properties. Strongly recommended for networks with limited bandwidth or high device concentration.

Usage recommendations:

  • Keep false (default value) for small or medium networks with moderate controller and property counts (default mode — parallel synchronization).

  • Set to true in large-scale installations with a high number of controllers or devices containing large property sets, especially if the driver repeatedly remains in the Synchronizing state or reports unexpected synchronization errors.

Max Sequential Variable Value Read Errors

Maximum number of consecutive variable-value read errors allowed before the BACnet driver stops value synchronization. When this threshold is reached within a single synchronization cycle, the driver marks the connection as disconnected and suspends polling. Default: 0 (check disabled).

Device Assets

The driver creates one root asset for every BACnet object type supported by the device. Each asset's children match to the individual instances of this object found in the device.

Device Settings

The BACnet Device Driver creates one Device setting variable per every discovered property of every BACnet Device's object. The variables are divided into several groups. Properties of the Device Object are put in a Basic Properties group. All other settings are divided into groups by Object Type: Analog Input, Analog Output, etc.

In every Object Type group, a new subgroup is created for every Object Instance if it has properties of corresponding type.

Device Operations

The BACnet Device Driver context provides the following functions and actions:

Subscribe COV

This function allows to subscribe/unsubscribe from object's Change of Value (COV) notifications. COV facility allows the driver to receive notifications upon changes of remote BACnet object's property.

If an object provides COV reporting, then changes of certain object's properties trigger sending COV notifications to subscribed clients.

After successful subscription the Device Driver will asynchronously update   device settings cache upon receiving a COV notification.

There are some risks related to using COV subscriptions. These are problems intrinsic to event-based systems, such as unexpected link failure problems, lost subscriptions on device reset, etc. Critical data items should be periodically polled in addition to receiving their updates via COV notifications.

Format of the function input parameters has the following fields:

Name

Type

Description

subscribe

Boolean

Flag indicating whether subscription or unsubscription should be performed.

subscriberProcessIdentifier

Long

It is a numeric "handle" meaningful to identify the subscription within the driver. Do not use the same process identifier for different subscriptions.

The same identifier should be used later to unsubscribe from COV notifications.

monitoredObjectIdentifier

DataTable

Holds the identifier of the object within the receiving device for which a subscription is desired. There are two fields:

  • objectType (Data Table)

  • instanceNumber (Integer) the id of the Device Asset corresponding to the target object.

issueConfirmedNotifications

Boolean

Defines whether the device should issue ConfirmedCOVNotifications or UnconfirmedCOVNotifications when changes occur.

lifetime

Long

The desired lifetime of the subscription. A value of zero shall indicate an indefinite lifetime, meaning no automatic cancellation. A non-zero value indicates the period of time before the subscription will be automatically canceled.

The function has no output parameters.

For more information about COV subscriptions see ALARM AND EVENT SERVICES: SubscribeCOV Service section of BACnet specification.

Subscribe COV Property

This function is similar to above, but it allows to subscribe for change notifications occurred to the properties of a particular object.

Format of the function input parameters has the following fields:

Name

Type

Description

subscribe

Boolean

Flag indicating whether subscription or unsubscription should be performed.

subscriberProcessIdentifier

Long

It is a numeric "handle" meaningful to identify the subscription within the driver. Do not use the same process identifier for different subscriptions.

The same identifier should be used later to unsubscribe from COV notifications.

monitoredObjectIdentifier

DataTable

Holds the identifier of the object within the receiving device for which a subscription is desired. There are two fields:

  • objectType (Data Table)

  • instanceNumber (Integer) the id of the Device Asset corresponding to the target object.

issueConfirmedNotifications

Boolean

Defines whether the device should issue ConfirmedCOVNotifications or UnconfirmedCOVNotifications when changes occur.

lifetime

Long

The desired lifetime of the subscription. A value of zero shall indicate an indefinite lifetime, meaning no automatic cancellation. A non-zero value indicates the period of time before the subscription will be automatically canceled.

monitoredPropertyIdentifier

Integer

Identifies the property whose changes should be tracked.

covIncrement

Float

The minimum change in the monitored property that will cause a COVNotification to be issued by a BACnet device. This parameter is ignored if the BACnet type of the monitored property is not REAL.

The function has no output parameters.

Read Property

This function is used to request value of a single property of a certain BACnet Object.

The function has the following input parameters:

Name

Type

Description

objectIdentifier

DataTable

Identifies the object whose property is to be read and returned in the response. There are two fields:

  • objectType (Data Table)

  • instanceNumber (Integer) the id of the Device Asset corresponding to the target object.

propertyIdentifier

Integer

Identifies the property to be read and returned by this function. There are two fields:

  • valueClassName (String)

  • propertyIdentifier (Integer)

propertyArrayIndex

Long

If the referred property is an array, this optional parameter indicates the array index. If it is omitted (i.e. NULL) the entire array should be read.

The function output is value of a referenced property. Its format depends on property type.

You can use Read Property and Read Property Multiple functions to read proprietary properties. Simply set propertyIdentifier parameter to desirable property index.

Read Property Multiple

This function is used to request values of one or multiple properties of one or multiple BACnet Objects.

Format of the function input parameters (can have multiple records) has the following fields:

Name

Type

Description

objectIdentifier

DataTable

Identifies the object whose property is to be read and returned in the response. There are two fields:

  • objectType (Data Table)

  • instanceNumber (Integer) the id of the Device Asset corresponding to the target object.

propertyReferences

DataTable

The list of properties to read from the object, specified by two fields:

  • propertyIdentifier

  • propertyArrayIndex

The special property identifiers ALL, REQUIRED, or OPTIONAL can also be used.

The function output parameters format:

Name

Type

Description

objectIdentifier

DataTable

Object identifier, specified by:

  • objectType (Data Table)

  • instanceNumber (Integer) the id of the Device Asset corresponding to the target object.

results

DataTable

Read results for properties of the above object in the form of table with several fields:

  • error (Boolean)

  • propertyIdentifier (Integer)

  • propertyArrayIndex (Integer)

  • readResult (DataTable)

readResult field contains property value or error text is error has occurred.

Write Property

The function is used to modify the value of a single property of a BACnet object.

Format of the function input parameters:

Name

Type

Description

objectIdentifier

DataTable

Identifies the object whose property is to be written. There are two fields:

  • objectType (Data Table)

  • instanceNumber (Integer) the id of the Device Asset corresponding to the target object.

propertyIdentifier

DataTable

Identifies the property to be written. There are two fields:

  • valueClassName (String)

  • propertyIdentifier (Integer)

propertyArrayIndex

Long

If the referred property is an array, this optional parameter indicates the array index.

valueType

String

BACnet value type. This parameter makes sense only in interactive function call mode. It is used to set the format for the parameter below.

value

DataTable

New property value.

priority

Integer

An integer in the range 1-16, which indicates the priority assigned to this write operation.

The function has no output parameters.

Acknowledge Alarm

Use the acknowledgeAlarm function to acknowledge an alarm on a BACnet controller.

The function has the following input parameters:

Name

Type

Description

acknowledgingProcessIdentifier

Integer

Identifier of the process that sends the acknowledgment.

eventObjectIdentifier

ObjectIdentifier

Identifier of the object that generated the alarm.

eventStateAcknowledged

EventState

Alarm state to acknowledge (for example, OFFNORMAL, FAULT, or NORMAL).

timeStamp

Date

Time when the alarm occurred.

acknowledgmentSource

String

Source of the acknowledgment, such as a username, operator ID, or module name.

timeOfAcknowledgment

Date

Time when the acknowledgment was sent.

The function has no output parameters.

Retrieve Active Alarms

This function is used to retrieve a list of active alarms currently present on a BACnet controller.
It implements the getAlarmSummaryRequest service defined in the BACnet standard.

The function has no input parameters.

The function output parameters format:

Name

Type

objectIdentifier

ObjectIdentifier

eventState

EventState

acknowledgmentStatus

Boolean

acknowledgmentSource

String

This function is typically used for polling the controller’s current alarm state and synchronizing it with Iotellect dashboards or event streams.

No events provided by the driver.

Connection Handling

This driver makes the device Online if:

  • Local BACnet Device is successfully created and initialized.

  • A remote BACnet device identified itself during Who-Is/I-Am exchange (if Addressing Method device connection setting is not Combined).

  • The following properties of the remote Device Object were successfully read: Max APDU Length Accepted, Segmentation Supported, Vendor Identifier (if Addressing Method device connection setting is Combined).

Synchronization Details

Synchronization between Iotellect Server and BACnet device includes the following steps:

  • Reading remote device's supported services and creating appropriate device operations.

  • Recognizing all objects present in the remote device by reading Object List property of Device object of remote BACnet unit.

  • Discovering properties of all found objects.

The BACnet driver combines two strategies for discovering object properties:

  • requesting the Object to return all its properties;

  • reading every property defined in BACnet specification for the appropriate Object Type.

The first strategy allows to discover proprietary object properties if a device has them, while the second one will discover only standard BACnet properties.

Proprietary properties can be discovered during synchronization if a device supports special property identifier ALL in ReadPropertyMultiple service.

All device settings have read/write access, but the device itself can restrict write access to them. In case of trying to set a write-protected variable, a Write Access Denied error will be generated by the device.

Was this page helpful?