BACnet Connector Details
- 1 Intro
- 1.1 Objects
- 1.2 Properties
- 2 Differences
- 3 BACnet Protocol Revision 1.18 Update
- 3.1 Network Port
- 3.1.1 Register FIN as BBMD
- 3.1.2 Unregister FIN as BBMD
- 3.1.3 Register FIN as FD
- 3.1.4 Unregister FIN as FD
- 3.1.5 Read Network Port Properties
- 3.1.6 Write Network Port Properties
- 3.1.7 The Fallback mechanism
- 3.1.8 Write Network Port properties using any BACnet client
- 3.1.9 Apply Changes-Pending
- 3.1.10 Client Restart Query
- 3.1 Network Port
Intro
The user can find below the details of the new BTL Certified BACnet Operator Workstation (OWS) and BACnet Server (not certified). It includes new functionalities, supported objects and properties. As well as some differences compared to the old configurations.
The documentation for the BACnet connector can be found in BACnet Connector and BACnet Server can be found in BACnet Server.
Objects
Supported objects are as shown in this spreadsheet.
Properties
Supported properties are as shown in this spreadsheet.
Differences
Below are some differences covering both the BACnet Connector Client and BACnet Server.
BACnet Connector Client
The bacnetLocalAddress tag is now replaced with bacnetRoute string tag if connecting through VPN and if network number is 0. The bacnetRoute tag will need to be added to the BACnet connector in order for it to communicate and for the connector to know where the device lives. The reason is because VPN doesn’t support broadcast messages such as ‘who-is’ and ‘i-am’. The bacnetRoute tag is a string type and it’s value is the router IP address.
The bacnetLocalAddress tag is deprecated.
The actorTimeout (“APDU Timeout”) and bacnetRetryCount (“Retry Count”) are now set up in the BACnet Global Config tool, not in the tuning policy record(s). Both will apply to all BACnet connectors.
Query to batch remove these tags from tuning policies if applicable:
readAll(connTuning).map x => diff(x, {-actorTimeout, -bacnetRetryCount}).commitAfter the updating to 5.1, this process identifier number from the BACnet device will be the same for all connectors because the instance number of the device (added in the NC object recipient list) is changed.
User needs to manually change the process identifier number in the BACnet device or the value of the bacnetAlarmPid tag in order to have specific alarms added in the Alarms app. User should not have to do anything when migrating as the connector will re-subscribe to those NCs using the new pid and the new instance number.If there was a
bacnetAlarmPid
set and for some reason there is a requirement to keep all settings the same, the user would just have to make sure the the bacnetInstance is the same as on the older setup and set it in the BACnet Global Config tool.The ACC object is configured with the kind type as number after the update. The user must manually change it to string type if used.
Some point types have changed. Here is a list of those point types.
If using a FIN zip on a Windows environment, the user needs initialize the BT BACnet Stack (BBS) configuration manually. Look at the “Setting BBS Manually” section in the BACnet Connector doc on how to do this.
New connector is not supported on MAC.
New connector supports communication with multiple IP’s (network cards) when local bind address is set to 0.0.0.0 and standard port of 47808. If local bind address is configured to some specific IP and port other than 47808, then it can only communicate on that IP network card and port.
All projects on the same instance will share the same local bind address IP and Port.
Read Property Multiple (RPM) supports all/optional/required properties also.
Write Property Multiple (WPM) with specific Index of Array support added.
Proprietary Data types will be displayed as Raw data in FIN.
For intrinsic alarms, add the corresponding Event Enrollment (EE) object under the Equip Tree in the database. The EE would be mapped as a point under an equip just like all the other BACnet objects, which then allows the connector to subscribe to those notification events.
For IP devices the default value of APDU Timeout is 6sec and Retry Count is 3 (recommended and default in the BACnet Global Config tool).
Support for Foreign Device registration.
Recommend Java 11 for new FIN.
BACnet Server
An object's PRESENT_VALUE is dependent on PriorityArray and RelinquishDefault properties.
All the project devices will be on same local network number and local bind address.
The bacnetServerLocalAddress and bacnetServerNetwork tags no longer needed on the bacnetServer extension.
All the project devices should have a unique device instance number and MAC address.
Added new properties:
a) RelinquishDefault on all Value Objects (AV/BV/MSV)
b) PropertyList on all supported objects
c) Polarity for BIPoints with Str type and missing the enum tag, won't be added to Server Device (strings don’t exist in BACnet protocol).
Writing a value of 0 to any specific index of MSV will clear that index (Null).
When the Server is enabled, BBMD and FD are not supported and will not process local broadcast messages.
BACnet Client and Server cannot communicate with each other on the same PC.
The bacnetServerConfigureIp() function has been deprecated.
BACnet Client and Server must have different instance number if in the same instance of FIN.
BACnet Protocol Revision 1.18 Update
Below are new updates with BACnet protocol revision 1.18.
Configuration settings:
Engineering units
standard-cubic-feet-per-day (47808)
million-standard-cubic-feet-per-day (47809)
thousand-cubic-feet-per-day (47810)
thousand-standard-cubic-feet-per-day (47811)
pounds-mass-per-day (47812)
millirems (47814)
millirems-per-hour (47815)
BACnetWeekNDay
Allow selection of the Nth last day of the month in a BACnetWeekNDay : 7, 8, and 9
UTC_Offset
Support for new object types:
Timer
Properties required for Timer object:
Present_Value
Timer_State
Timer_Running
Default_Timeout
State_Change_Values
Network Port
Elevator Group
Lift
Escalator
Support new event types:
Change_of_timer
Support new properties:
SubscribeCOV Property Multiple Service
COV Property Multiple Service
unConfCOV Property Multiple Service
Network Port
The Network Port object primarily encompasses properties related to networking. Functions such as BBMD support and FD registration now utilize these Network Port properties. Registration of BBMD and FD remains consistent, employing the Folio query method. Additionally, other queries are available for individually managing Network Port properties. Below is a list of these queries along with their descriptions.
Why Network Port Object is Added
The new protocol version update allows FIN to incorporate support for the Network Port Object. Adopting the object property approach simplifies FIN configuration for BBMD and FD, eliminating the need for direct access to FIN. Changes can be made by simply adjusting the property values.
What is the Network Port Object Instance
The instance is Network Port 1
and can be used as NP1
or 56:1
.
Properties supported in Network Port Object
| Properties |
| Properties |
1 | Object-Identifier | 15 | Network-Number |
2 | Object-Name | 16 | BACnet-IP-Mode |
3 | Object-Type | 17 | Changes-Pending |
4 | Description | 18 | IP-Address |
5 | Status-Flags | 19 | BACnet-IP-UDP-port |
6 | Reliability | 20 | IP-subnet-mask |
7 | Out-Of-Service | 21 | APDU-length |
8 | Mac-Address | 22 | BBMD-Accept-FD-Registrations |
9 | Network-Type | 23 | FD-Subscription-Lifetime |
10 | Protocol-Level | 24 | BBMD-Broadcast-Distribution-Table |
11 | Link-Speed | 25 | BBMD-Foreign-Device-Table |
12 | IP-Default-Gateway | 26 | FD-BBMD-Address |
13 | IP-DHCP-Enable | 27 | IP-DHCP-Lease-Time-Remaining |
14 | IP-DHCP-Lease-Time | 28 | IP-DHCP-Server |
All the above properties are readable using bacnetReadPropertyFromDB
query in Folio → Launch (refer to Read Network Port Properties section).
Functions that changed
Old Functions | New Functions |
bacnetRegisterAsForeignDevice | bacnetRegisterForeignDeviceWithNetworkPort |
bacnetUnRegisterForeignDevice | bacnetUnregisterForeignDeviceWithNetworkPort |
bacnetRegisterAsBBMD | bacnetRegisterBBMDwithNetworkPort |
bacnetUnRegisterBBMD | bacnetUnregisterBBMDwithNetworkPort |
New functions
bacnetReadPropertyFromDB |
bacnetWriteNetworkPortProperty |
bacnetApplyNetworkPortPendingChanges |
bacnetClientRestart |
Register FIN as BBMD
Following the protocol revision 1.18 updates, BBMD no longer supports the BDT table. Instead, all BBMD entries are now added to the BBMD_Broadcast_Distribution_Table property of the Network Port object. Users do not need to manually manage these properties; they only need to register FIN as BBMD using the provided queries. FIN will handle the addition of values to their respective properties internally. Refer to the examples below for guidance.
Example: bacnetRegisterBBMDwithNetworkPort(BBMD-entries, Accept-FD-Registration, Max-Fdt-Entries, Two-Hops)
Use the below queries to register FIN as BBMD.
bacnetRegisterBBMDwithNetworkPort()
This query registers FIN as BBMD using the Network Port object. By default, it automatically adds FIN's self-entry to the BBMD_Broadcast_Distribution_Table property within the Network Port object. Explicitly providing the self-entry is not necessary.bacnetRegisterBBMDwithNetworkPort([["192.168.253.1",47808,"255.255.255.0"]])
This query adds the specified BBMD entry along with FIN's self-entry to the BBMD_Broadcast_Distribution_Table property of the Network Port object.bacnetRegisterBBMDwithNetworkPort([["192.168.253.1",47808,"255.255.255.0"],["192.168.253.111",47808,"255.255.255.0"]], true, 25, false)
This query adds all specified BBMD entries, including FIN's self-entry, to the BBMD_Broadcast_Distribution_Table property of the Network Port object.
Upon the successful execution of this query, a success status will be displayed on the folio UI, and the stack will restart to apply the changes. You can then read all the BBMD entries by using a read-property query on the Network Port object (instance 1- NP:1 or 56:1) and the BBMD_Broadcast_Distribution_Table property (414) from any other tool like VTS or YABE. Send the read-property query to FIN with the specified Object and property. Alternatively, you can read the property values using bacnetReadPropertyFromDB
(refer to Read Network Port Properties section).
Unregister FIN as BBMD
To unregister FIN as a BBMD and revert it to Normal mode, you can use the bacnetUnregisterBBMDwithNetworkPort
query. Executing this query will restart FIN.
Example: bacnetUnregisterBBMDwithNetworkPort()
bacnetUnregisterBBMDwithNetworkPort()
Unregister FIN as a BBMD and restart the stack. The default parameter is TRUE.bacnetUnregisterBBMDwithNetworkPort(false)
To unregister FIN as a BBMD without restarting FIN, set the parameter to FALSE in the query. You can then run thebacnetApplyNetworkPortPendingChanges()
Folio query to apply the changes. However, since the stack must be restarted for the changes to take effect, it is recommended to runbacnetUnregisterBBMDwithNetworkPort()
without the FALSE parameter.
Register FIN as FD
Following the protocol revision 1.18 updates, configuring FIN as a Foreign Device is done using the properties of the Network Port object. Parameters such as time-to-live and BBMD IP are now managed through these properties. However, users do not need to worry about these properties as they only need to register FIN as a Foreign Device using the queries provided below. FIN handles the assignment of values to the respective properties internally. Refer to the examples below for guidance.
Example: bacnetRegisterForeignDeviceWithNetworkPort("IP:UDP", timeToLive (in seconds), FD-Registration-Timeout, FD-Registration-Retries)
Specify the IP and UDP address of the BBMD with which you want FIN to register as a Foreign Device. Provide the time-to-live parameter and registration-timeout parameter in the query. The FD-registration-retries parameter is optional (default is 3).
This query internally populates the FD-Subscription-Lifetime & FD-BBMD-Address properties. You can read these values using the bacnetReadPropertyFromDB
Folio query (refer to Read Network Port Properties section).
Use the below queries to register FIN as BBMD.
bacnetRegisterForeignDeviceWithNetworkPort("192.168.253.136:47808", 1800, 1200, 4)
bacnetRegisterForeignDeviceWithNetworkPort("192.168.1.1:47808", 2000, 200)
Unregister FIN as FD
To unregister FIN as a Foreign Device and revert it to Normal mode, use the bacnetUnregisterForeignDeviceWithNetworkPort
query. This query will also restart FIN.
Example: bacnetUnregisterForeignDeviceWithNetworkPort()
bacnetUnregisterForeignDeviceWithNetworkPort()
Unregister FIN as a FD and restart the stack. The default parameter is TRUE.bacnetUnregisterForeignDeviceWithNetworkPort(false)
To unregister FIN as a FD without restarting FIN, set the parameter to FALSE in the query. You can then run thebacnetApplyNetworkPortPendingChanges()
Folio query to apply the changes. However, since the stack must be restarted for the changes to take effect, it is recommended to runbacnetUnregisterForeignDeviceWithNetworkPort()
without the FALSE parameter.
Read Network Port Properties
As the Network Port object is supported by FIN, similar to the default device object, you can now read the values of Network Port properties directly from the Folio. This functionality allows you to verify the values after setting them using the bacnetWriteNetworkPortProperty()
query. Reading the values of the Network Port object's properties is crucial to ensure that the values are correctly set, as listed in the "properties supported" section.
Note: You can now also read the values of local device object properties.
Example: bacnetReadPropertyFromDB (ObjectId, property, index)
Specify the object identifier as the first parameter, followed by the property. The index parameter is optional and is required only if the property is of type array and you want to retrieve it based on an index. By default, the index parameter is null.
Below are some examples:
bacnetReadPropertyFromDB("NP1", 75)
To read the Object-ID of the Network Port object (NP1
). In this query,75
corresponds to the Object-Identifier property.bacnetReadPropertyFromDB("NP1", "BACnet-IP-Mode")
To determine if FIN is operating as a BBMD, FD, or in Normal mode.bacnetReadPropertyFromDB("NP1", "BBMD_Broadcast_Distribution_Table")
To read which BBMD entries are present in the BDT.bacnetReadPropertyFromDB(8:1, "object_list")
To read the Object-List of the Network Port Object.
Note: Executing the above query won't send any requests to other devices on the network. Instead, it will display the values saved in our local database on the UI. These values correspond to the properties of the Network Port Object or the Device Object, as only these two objects are supported locally for now.
Write Network Port Properties
Since the latest version of FIN supports functionalities like BBMD and FD using the network port, it is essential to write these properties with correct values. Currently, there is no dedicated UI provided for manipulating Network Port properties, so the only way to do this is through Folio queries.
After changing a property value using bacnetWriteNetworkPortProperty
, FIN must be restarted for the changes to take effect. For example, if you change the network-number
property value, you must restart FIN for it to start with the new network number. The provision for restarting FIN is flag-based, with the default value being false (i.e., don’t restart FIN), provided in the query. However, it is recommended to restart FIN using the bacnetApplyNetworkPortPendingChanges
query.
When you change a property value, the Changes-Pending
property is set to TRUE
, indicating that some changes have been made and need to be applied. Therefore, once you have made the necessary changes to various network port properties, you can apply those changes by running the bacnetApplyNetworkPortPendingChanges
query.
The writable properties are listed below. Only network port properties can be written using this query.
Properties that can be modified in the Network Port object using the bacnetWriteNetworkPortProperty
folio query
Properties |
Network-Number |
BACnet-IP-Mode |
IP-Address |
BACnet-IP-UDP-port |
IP-subnet-mask |
BBMD-Accept-FD-Registrations |
FD-Subscription-Lifetime |
BBMD-Broadcast-Distribution-Table |
FD-BBMD-Address |
Example: bacnetWriteNetworkPortProperty (property, value, reStartFIN, index)
The "reStartFIN" parameter defaults to FALSE, meaning that changes are applied without restarting FIN. Setting it to TRUE will restart FIN and apply the changes. The "Index" parameter defaults to null.
bacnetWriteNetworkPortProperty(400, "192.168.245.1", true, null)
This will set the IP-Address property (Property Identifier - 400) of FIN.bacnetWriteNetworkPortProperty("bacnet_ip_udp_port", 47808)
This will set the IP-UDP port property of the Network Port Object. However, the changes will be applied only when the stack restarts. After setting this property, if you check the "Changes-Pending" property, it will show TRUE until the changes are applied.bacnetWriteNetworkPortProperty("network-number", 65530)
This will set the Network-Number property. However, the changes will be applied only when the stack restarts. After setting this property, if you check the "Changes-Pending" property, it will show TRUE until the changes are applied.
The Fallback mechanism
Attempting to change a property value to an inappropriate or unavailable value will result in an error, and FIN will revert to the old configuration. For example, if you try to change the UDP port value to 47809, but that port is already occupied, FIN will revert to the old UDP port, and an appropriate message will be displayed on the UI. This mechanism applies to BBMD and FD queries as well.
Write Network Port properties using any BACnet client
The Network Port object contains various properties that can also be modified using the traditional "Write-property()" request from BACnet tools like Yabe or VTS. However, it's important to note that currently, only 4 properties can be changed using the write-property request. These properties are listed in the table below:
BBMD-Accept-FD-Registrations | BBMD-Broadcast-Distribution-Table |
FD-Subscription-Lifetime | FD-BBMD-Address |
To modify these properties using the write-property service, you'll need to select the object as (Network Port, 1) and choose one of the above mentioned properties. It's important to note that BBMD-Accept-FD-Registrations and BBMD-Broadcast-Distribution-Table are writable only when FIN is configured as a BBMD (refer to the "Register FIN as BBMD" section), while FD-Subscription-Lifetime and FD-BBMD-Address are writable only when FIN is configured as an FD (refer to the "Register FIN as FD" section).
After making these changes using the write-property service, you need to apply the changes in FIN by restarting it. However, manually restarting FIN from a remote location is challenging. To address this, FIN now supports the ReinitializeDevice
service request. It is crucial to send the ReinitializeDevice
service request to FIN after making changes to property values remotely. Without sending this request, the changes will not apply in FIN.
Below are the parameters to send ReinitializeDevice
service request.
State: Warm-Start or Activate-Changes
Password: <As password support is not provided in this release, leave the password field blank>
Apply Changes-Pending
Use the following query to apply pending changes to the stack and restart FIN. It is crucial to run this query after using bacnetWriteNetworkPortProperty
to ensure the changes take effect.
Example: bacnetApplyNetworkPortPendingChanges()
Client Restart Query
Another query you can use to restart FIN is the client restart query. This query provides an additional feature: if you explicitly pass TRUE in the query, it restarts FIN with the old configuration, i.e., the configuration from the last successful restart of FIN. This can be used instead of the bacnetApplyNetworkPortPendingChanges()
query.
Example: bacnetClientRestart()
bacnetClientRestart()
Restart the client with the current configuration, which may include changes that have not yet been applied to FIN, i.e., changes that are pending.bacnetClientRestart(true)
Restart the client from the last successful configuration, which will exclude any current changes that have not yet been applied to FIN.