To subscribe, a BACnet connector needs to add itself as a recipient in the property "RECIPIENT_LIST" of a Notification Class Object (for more information on how Alarms work to see the Alarms doc).
According to Bacnet documentation, a recipient can be defined by it's device ID or by it's BACnet address.
How the recipient this works:
1. A recipient defined by it's device ID:
every recipient is a BACnet client and so, it has a device ID, to be reachable by other BACnet devices in the network. On Finstack, all connectors by default have a LocalVirtualDevice (only one for all) in the background.
only works it both the recipient (BACnet client) and the BACnet device are in the same BACnet network
if a BACnet device has a recipient with the device ID, it will send out periodically WhoIs messages, querying about that device ID, saves the address that responds with IAm and sends Alarms to that address
2. A recipient defined by it's Bacnet Address:
this is used when the recipient (BACnet client) and BACnet device are on different BACnet networks. Because of that, the WhoIs will not work, so it needs the address directly
the BACnet address we are referring to here is the local BACnet address of the recipient (our BACnet connector)
it is the BACnet address other devices use to communicate with our BACnet connector.
it is the same as the BACnet binding address if the binding address is not the default 0.0.0.0
the recipient also needs to have the network number the BACnet client is in. Here we have a problem because our BACnet connector does not have any knowledge about the BACnet network he is in.
How to configure on a BACnet connector, what type of recipient to register itself as:
by default a BACnet connector will subscribe as a recipient using the device ID
to explicitly specify how to subscribe you can add the tag "bacnetAlarmSubscribeType" on the connector or on the connTunningPolicy. The tag has a string value that can be:
- "useDevice" - "useAddress" - "useBoth" |
when subscribing using the BACnet address, as I said earlier, we need the local BACnet address that is not always the same as the binding address. I added a mechanism to try to determine as best/accurate as possible the local BACnet address. But the user can also add the tag bacnetAlarmSubscribeAddress on the connector or on the connTunningPolicy to explicitly specify the local BACnet address, e.g."bacnetAlarmSubscribeAddress":"192.168.1.23:47808". It only works for BACnet UDP addresses
when subscribing using the BACnet address, as I said earlier, we need the network number and the BACnet connector does not have any knowledge about it. This must be defined explicitly by adding the tag bacnetAlarmSubscribeNetwork on the connector or on the connTunningPolicy. The default value is 0.