Understanding COV (Change of Value) Subscriptions
COV subscriptions provide efficient real-time data updates in BACnet systems, reducing network traffic compared to polling.
What is COV?
Change of Value (COV) is a BACnet service where a device automatically notifies subscribers when a point value changes significantly.
COV vs Polling
| Method | How It Works | Network Traffic |
|---|
| Polling | Client requests value periodically | Constant, regardless of changes |
| COV | Server notifies on change | Only when values change |
How COV Works
Subscription Process
1. Client sends SubscribeCOV request
2. Server accepts subscription
3. Server monitors point for changes
4. When value changes > COV_Increment:
→ Server sends COV notification
5. Client acknowledges (if confirmed)
6. Repeat until subscription expires
COV Increment
The COV_Increment property defines the minimum change required to trigger a notification:
| Point Type | Typical COV_Increment |
|---|
| Temperature | 0.5°F or 0.25°C |
| Humidity | 1-2% RH |
| Pressure | 0.1 in.w.c. |
| Setpoint | 0.5°F |
| Damper/Valve | 1-5% |
Example: If COV_Increment = 0.5°F:
- Value changes from 72.0 to 72.3°F → No notification
- Value changes from 72.0 to 72.6°F → Notification sent
Binary Points
Binary points (BI, BO, BV) notify on any state change (no increment needed).
Types of COV Subscriptions
Confirmed COV (SubscribeCOV)
- Client must acknowledge each notification
- Guaranteed delivery (retries if no ACK)
- Higher overhead but reliable
Unconfirmed COV (SubscribeCOVProperty)
- No acknowledgment required
- Lower overhead
- Suitable for non-critical data
Subscription Properties
Lifetime
| Setting | Behavior |
|---|
| Lifetime = 0 | Subscription never expires (not recommended) |
| Lifetime = 300 | Expires after 5 minutes (must re-subscribe) |
| Typical | 300-600 seconds (5-10 minutes) |
Best practice: Use reasonable lifetime and re-subscribe periodically.
Subscription Parameters
When subscribing, specify:
| Parameter | Description |
|---|
| Subscriber Process ID | Identifies the subscription |
| Monitored Object | Which object to watch |
| Issue Confirmed Notifications | Confirmed vs unconfirmed |
| Lifetime | How long subscription lasts |
Configuration
Setting COV_Increment
- Access the point properties
- Find COV_Increment property
- Set appropriate value for point type
- Value too small = excessive notifications
- Value too large = missed changes
Server-Side Considerations
- COV subscriptions consume server resources
- Most devices limit concurrent subscriptions
- Typical limits: 50-200 subscriptions per device
Client-Side Considerations
- Must handle incoming notifications
- Re-subscribe before lifetime expires
- Handle subscription rejections gracefully
Best Practices
When to Use COV
| Use Case | Recommendation |
|---|
| Frequently changing values | ✅ COV |
| Critical real-time data | ✅ COV (confirmed) |
| Slow-changing values | ⚠️ Polling may be simpler |
| Very large point counts | ⚠️ Consider hybrid approach |
| Devices with limited COV support | ❌ Use polling |
COV Increment Guidelines
| Too Small | Result |
|---|
| Sensor noise triggers constant notifications | Network congestion |
| Minor fluctuations reported | Graphics flicker |
| Too Large | Result |
|---|
| Significant changes not reported | Stale data displayed |
| Alarms may be delayed | Missed conditions |
Subscription Management
- Track active subscriptions
- Re-subscribe proactively (before expiration)
- Handle subscription failures gracefully
- Monitor for notification gaps
Troubleshooting
No COV Notifications Received
- Verify subscription active - Check subscription list
- Check COV support - Not all devices/points support COV
- Check COV_Increment - May be set too high
- Network issues - Verify connectivity
- Subscription expired - Re-subscribe
Too Many Notifications
- Increase COV_Increment - Reduce sensitivity
- Check for sensor noise - May need filtering
- Review subscription list - Remove unnecessary
Subscription Rejected
| Error | Cause | Solution |
|---|
| no-space-for-object | Too many subscriptions | Reduce subscriptions |
| cov-subscription-failed | Device doesn't support | Use polling instead |
| unknown-object | Object doesn't exist | Verify object ID |
COV vs Polling Decision Matrix
| Scenario | Recommended |
|---|
| 10 points, fast updates needed | COV |
| 1000 points, hourly trending | Polling |
| Critical alarm points | COV (confirmed) |
| Legacy device, no COV support | Polling |
| Graphics with real-time feel | COV |
| Batch data collection | Polling |
Implementation Example
Niagara
- Create BACnet proxy point
- Enable "Poll" or "COV" subscription type
- If COV: Set reasonable lifetime
- Configure COV increment on source device
Metasys
- Integration objects support COV by default
- Configure refresh rate as backup
- Monitor COV status in diagnostics
Reference
- ASHRAE Standard 135-2020, Clause 13.1 - COV Services
- BACnet Testing Laboratories - Interoperability guidelines