Skip to content

BACnet Schedule Sync

3.9.9

NF can discover BACnet schedule objects on the network and manage them alongside locally created schedules. Synchronization keeps the NF representation and the device schedule in agreement.

Discovery and Import

When NF scans a BACnet device (via Discover > Scan Objects), schedule objects are automatically imported into the schedule service. The import reads:

  • Object name
  • Weekly schedule (7 daily timetables)
  • Exception schedule (special events)
  • Schedule default value
  • Effective period
  • Out of service flag

Imported schedules appear on the Schedules page with a BACnet source badge showing the originating device ID and object instance.

Note

If a schedule for the same device and object already exists, the import updates it rather than creating a duplicate.

Sync Modes

Each device-sourced schedule has a sync mode that controls how changes flow:

Mode Direction Behavior
Read-only Device → NF Schedule rules are imported from the device and cannot be edited in NF. Use the Sync button to pull the latest version.
Bidirectional Device ↔ NF Rules can be edited in NF and written back to the device. Changes from either side are tracked in the sync log.
None No automatic sync. The schedule was imported once and is now independent.

Change the sync mode in the schedule editor. New imports default to Read-only.

Sync Interval

For read-only and bidirectional schedules, you can set a sync interval that controls how often NF automatically re-reads the schedule from the device. Set to zero for manual-only sync.

Syncing from a Device

Click Sync in the schedule editor (or call SyncSchedule via the API) to re-read the schedule from its BACnet device. The sync:

  1. Reads the current weekly schedule, exception schedule, default value, effective period, and out-of-service flag from the device.
  2. Updates the NF schedule with the new rule data.
  3. Preserves NF-only settings: targets, priority for writing, sync mode, and "expose as BACnet" flag.
  4. Logs the change in the sync log.
  5. Triggers immediate re-evaluation of the effective value.

If the sync fails (device offline, timeout, etc.), the error is recorded in the schedule's last_sync_error field and displayed in the UI.

Writing Back to a Device

For schedules in Bidirectional sync mode, click Write to Device (or call WriteScheduleToSource) to push local changes back to the BACnet device. The write-back sends:

  • Weekly schedule
  • Exception schedule
  • Schedule default value

Write-back errors are recorded in the sync log entry for that operation.

Warning

Writing back overwrites the device's schedule rules entirely. Other properties on the device (like schedule targets configured natively on the controller) are not affected.

Sync Log

Every sync operation -- whether from the device or to the device -- is recorded in the schedule's sync log. View it in the Sync Log tab of the schedule editor.

Each entry shows:

Field Description
Origin Device (pulled from device) or Local (pushed from NF or edited via API)
Timestamp When the change occurred
Changed fields Which parts of the schedule were modified (e.g., weekly schedule, special events)
Actor What initiated the change (e.g., scan:260001, api, sync)
Error Write-back error message, if any

The sync log retains the most recent 500 entries per schedule.

Exposing Local Schedules as BACnet

Local schedules (not imported from a device) can be exposed as BACnet schedule objects on the gateway's local device. This allows external BACnet clients (other controllers, BMS front-ends) to read the schedule's present value and timetable data.

Enable this with the Expose as BACnet toggle in the schedule editor. When enabled, NF:

  1. Creates a local BACnet schedule object with an auto-assigned instance number.
  2. Keeps the object's weekly schedule, exception schedule, default value, and present value synchronized with the NF schedule.
  3. Removes the object if the toggle is disabled or the schedule is deleted.

Note

Exported BACnet objects are identified by a description field containing hpl-managed:<uuid>. They are excluded from re-import to prevent sync loops.