Easy BACnet · BACnet IP Controls made Easy Points lists Get the app

What is BACnet COV, and when is it better than polling?

Updated 4 November 2026

Short answer

Polling means the client reads a point on a timer, whether it changed or not. COV (Change of Value) means the client subscribes once and the device sends a notification when the value moves by more than its COV_Increment, or when a binary or multi-state point changes state. COV cuts traffic, which matters most on slow MS/TP trunks, but it's optional in BACnet, devices can hold only so many subscriptions, and subscriptions expire. When a head-end shows a value that never moves, a lapsed COV subscription is a common reason.

Polling

The client sends ReadProperty (or ReadPropertyMultiple, several properties in one request) for each point every so many seconds. Every BACnet device supports reads, so polling always works. The cost is traffic: 400 points every 10 seconds is 40 reads a second whether anything changed or not. On BACnet IP that rarely matters; on a 38,400-baud MS/TP trunk shared by 40 controllers, it does.

COV

The client sends SubscribeCOV for an object, naming itself as the recipient, a lifetime, and whether it wants confirmed or unconfirmed notifications. From then on the device sends a notification carrying Present_Value and Status_Flags:

SubscribeCOVProperty does the same for one named property, on devices that support it.

Lifetime and renewal

A subscription runs for its lifetime in seconds, then the device drops it without telling anyone. The client is expected to resubscribe before it runs out. A lifetime of 0 means "indefinite", but subscriptions are usually held in RAM and lost when the device restarts, so a client that never renews stops getting updates after the first power blip. That's the classic "the graphic says 72 and has said 72 since Tuesday" fault. A good head-end renews on a schedule and falls back to polling when a subscription is refused.

COV_Increment

On analog objects COV_Increment sets how far the value has to move before a notification goes out. Too small, say 0.01 on a noisy duct static, and the device floods the network. Too large, say 5 on a zone temperature, and the trend looks flat and the graphic looks stuck. It's a property on the object, and on many devices it is writable.

Why COV sometimes doesn't work

Which one to use

Integrators commonly use COV for points behind MS/TP routers and for status points that rarely change, and poll fast-moving analogs on BACnet IP or anything on a device with weak COV support. Many head-ends let you choose per device or per point. When a value looks frozen, read it directly with a tool that polls. If the direct read shows a different value, the device is fine and the head-end's subscription is the problem.

Easy BACnet doesn't subscribe to anything. It reads a point when you open it or tap Refresh, so it leaves nothing behind in the device, and it's a quick way to make that direct-read check.

Check it on your own network. Easy BACnet is a free Android app that finds BACnet IP devices and reads their points in a couple of taps.

Get it on Google Play