BACnet SubscribeCOV Service

SubscribeCOV signs a client up for change-of-value notifications on an object (Clause 13.14): how it works, the error codes it returns

What SubscribeCOV Is

SubscribeCOV is an alarm-and-event service in BACnet, defined in Clause 13.14 of ANSI/ASHRAE 135-2024. A COV (Change of Value) client uses it to subscribe for notifications when the properties of a particular object change. It is a confirmed service: the device that owns the object answers with a result, or with an error naming why the subscription could not be created.

SubscribeCOV covers the standard objects whose COV behavior the standard predefines (an analog input reports its Present_Value and Status_Flags, for example). To subscribe to an arbitrary property instead, a client uses SubscribeCOVProperty. Once subscribed, the client receives changes through ConfirmedCOVNotification or UnconfirmedCOVNotification, whichever it chose.

How It Works

The client sends a subscriber process identifier, the monitored object identifier, a flag choosing confirmed or unconfirmed notifications, and a lifetime in seconds. The device creates a subscription context and returns a positive result, then sends an initial notification as soon as it can so the client starts with the current value. A lifetime of zero requests an indefinite subscription with no automatic cancellation. Omitting both the confirmed-notifications flag and the lifetime turns the request into a cancellation. Devices that execute this service must accept lifetimes up to at least 28800 seconds (8 hours), so a client resubscribes before the lifetime elapses to keep the subscription alive.

Where You’ll See It

  • Replacing polling. A head end (the central BMS server) subscribes to the points it monitors and lets the controllers push changes, rather than reading each point on a timer, which cuts traffic on busy segments such as MS/TP (Master-Slave/Token-Passing, BACnet’s RS-485 serial transport).
  • Resubscription cycles. Because subscriptions expire, a client re-sends SubscribeCOV on an interval shorter than the lifetime; the device treats a matching resubscription as a refresh.
  • Cancellation on shutdown. A client that no longer needs a point sends the cancellation form so the device stops sending and frees the subscription slot.

SubscribeCOV Error Codes

Clause 13.14 defines the error class and code a device returns for each failure. The general error model lives in Clause 18 of the standard.

SituationError classError code
The specified object does not existOBJECTUNKNOWN_OBJECT
The specified object does not support COV notificationsOBJECTOPTIONAL_FUNCTIONALITY_NOT_SUPPORTED
No context can be created because of resource limitationsRESOURCESNO_SPACE_TO_ADD_LIST_ELEMENT
The lifetime is outside the range the device supportsSERVICESVALUE_OUT_OF_RANGE

Reading these in the field:

  • OPTIONAL_FUNCTIONALITY_NOT_SUPPORTED means the object exists but does not offer COV reporting; not every object type does, and a client that needs a non-standard property should try SubscribeCOVProperty.
  • NO_SPACE_TO_ADD_LIST_ELEMENT means the device has run out of subscription slots. Cancel unused subscriptions or reduce how many points one client subscribes to.
  • VALUE_OUT_OF_RANGE on the lifetime usually means a client asked for a lifetime larger than the device supports; support above 28800 seconds is optional.
  • No response at all is not a SubscribeCOV error. A timeout means the request never reached the device or the reply never came back, which is a transport or addressing problem.

Profiles That Require It

SubscribeCOV splits by direction. Executing it (accepting subscriptions) comes from the DS-COV-B building block and is required of controllers that offer COV reporting. Initiating it comes from DS-COV-A and is a client behavior.

DirectionRequired by BIBBProfiles
Execute (accept subscriptions)DS-COV-BControllers that host COV-reporting objects: life-safety, access-control, and elevator controllers
Initiate (subscribe)DS-COV-AClient and operator profiles that monitor points: operator workstations and supervisory controllers

What Chipkin Provides

The CAS BACnet Stack executes SubscribeCOV on the server side, managing subscription contexts and lifetimes and sending the initial and change notifications; the client subscribe side is implemented in Chipkin’s BACnet test tooling. Talk to us about adding BACnet client or server support to your device.