BacNet Alarms

Overview

In Bacnet, alarms are Event Notifications of type alarm.

They may be sent each time a point changes its state.

A bacnet point has 3 states (that we support): 

  • NORMAL

  • OFFNORMAL

  • FAULT

An alarm may need to be acknowledged or not, depending on the flags set on the Event Notification.

See 13. ALARM AND EVENT SERVICES of the BACnet standard

Functionality supported by BACnet Alarms: 

  • GET_ALARM_SUMMARY

  • GET_ENROLLMENT_SUMMARY

  • UNCONFIRMED_EVENT_NOTIFICATION

  • CONFIRMED_EVENT_NOTIFICATION

  • ACKNOWLEDGE_ALARM

Setup

The connector record may contain the tag:

- "bacnetAlarmPid" - 'Number'

It specifies the connector will only handle alarms associated with that process identifier. If the tag is missing then the connector will handle alarms associated with any process identifier.

Workflow

1. At connector startup, if the connecting device supports Event Notification, then for each Bacnet  point that was dragged in DB Builder:

  • it registers the connector in the point's Notification Class; in order to receive Notification Events

  • it retrieves the Alarm Summary for that point; the last alarms for each point's state transition

2. When Finstack receives an Event Notification:

  • if it is of type Event then it is cached; only the last 200 Events are stored and can be retrieved

  • if it is of type Alarm then test if should be handled: the bacnet point of the alarm was dragged  and the process identifier of the alarm matches the one set in the connector record (see above)

  • if the alarm is handled then it is added in the Alarms App

  • if the alarm is not handled then try to remove this connector from the point's Notification Class

The added Bacnet Alarms can be seen in the Alarms App.
*** Brief info about the Alarms App and Alarms framework:

*** Skyspark Alarms framework allows you to create any numbers of alarms for a point. An alarm can be

*** acknowledged, and by doing so, the next time the same alarm is set (updated) the timestamp of the

*** acknowledgement will be stored.

3. Because Bacnet points have 3 states: NORMAL, OFFNORMAL and FAULT, an alarm is added for each state.

Example:

  • when a Bacnet Alarm arrives informing the point changed to FAULT an alarm is added for that point and the new state.

  • when a Bacnet Alarm arrives informing the point changed to OFFNORMAL an alarm is added for that point and the new state.

  • when a Bacnet Alarm arrives informing the point changed to FAULT the alarm for that state is updated

Each point may end up with a maximum of 3 different alarms. Each time an alarm arrives the timestamp of arival is stored. The alarms can be acknowledged from the Alarms App, and the acknowledgement timestamp is stored.

Acknowledging an alarm in the Alarms App will NOT send an AcknowledgeAlarm message to the device.

Tags that a bacnet alarm has (in addition to a normal alarm):

- "processIdentifier" - 'Number' - "eventType" - 'Str' - "notifyType" - 'Str' - "notificationClass" - 'Number' - "fromState" - 'Str' - "toState" - 'Str' - "ackRequired" - '' - "priority" - 'Number' - "alarmText" - 'Str' - "timeStamp" - 'Number' - "initiatingDeviceIdentifier" - 'Str' - "eventObjectIdentifier" - 'Str' - "bacnetConnRef" - 'Ref' - "pointRef" - 'Ref; - "last_ts" - 'DateTime' - "his" - 'Str' - "audit" - 'Str'

4. Special cases:

  • A Bacnet alarm notification references (is defined by) only one Bacnet Object on the device.

  • Alarms in Finstack reference (are defined by) only one DB point.

  • It is permited to drag a bacnet point over several (ex.: 3) DB points, this end up with 3 DB points referencing only one bacnet point and only one Bacnet Object on the device.

If a Bacnet alarm notification arrives it will match all the (ex.:3) DB points.

  • In this case only one alarm is added for only one DB point (an initial random choice which)  and all the subsequent alarms asociated with that Bacnet Object will be added for that initialy selected DB point.

  • It is permited to create several (ex.:3) connectors to the same device.

If from each device a bacnet point is dragged over different DB points, this ends up with 3 DB points  referencig 3 bacnet points, but only one Bacnet Object on the device.

  • In this case 3 alarms are added for each DB point and all the subsequent alarms asociated with that  Bacnet Object will be added each DB points.

  • It is permited to create several (ex.:3) connectors to the same device.

  • It is permited to drag a bacnet point over several (ex.: 3) DB points.

  • This end up with 9 DB points referencing only 3 bacnet points from 3 different connectors, which in  the end reference the same Bacnet Object.

If a Bacnet alarm notification arrives it will match all the (ex.:9) DB points.

  • In this case 3 alarms are added, one for only one DB point associated with a different bacnet point  from a different connector. And all the subsequent alarms asociated with that Bacnet Object will be  added each of those 3 DB points.


Functions

Grid bacnetGetAlarms(Obj conn) - Returns the unhandled alarms of Bacnet connector.

Parameters:
 - conn: the BACnet connection used to query the object properties
Examples:
bacnetGetAlarms(@connRef).