BACnet Schedule and Calendar Objects: How Scheduling Works

BACnet scheduling explained: the Schedule object's weekly and exception schedules, the Calendar object's date lists and WeekNDay entries, the midnight rule, and what the CAS BACnet Stack supports.

What Is a BACnet Schedule?

The Schedule object, defined in Clause 12.24 of ANSI/ASHRAE 135-2024, is how a BACnet device automates time-of-day control. It holds a weekly schedule plus an optional list of exceptions, computes a current value from them, and writes that value into the properties of other objects at the scheduled times. Its companion, the Calendar object (Clause 12.9), holds a named list of dates (holidays, special events, floating dates like “the last Monday of May”) that Schedules reference to decide when an exception applies.

Between them, these two objects are the highest-leverage pair in everyday building automation: one properly modeled Schedule and Calendar can rule the operating hours of an entire portfolio. They are also famously easy to get subtly wrong, because the evaluation rules are more precise than they look.

Weekly BACnet Schedule grid with occupied, setback, and off periods, a holiday exception day, and a shared Calendar object feeding the exception definitions

Where You’d Hit This in the Field

A school district is the classic case. Regular hours Monday to Friday, half days on early-dismissal Wednesdays, summer hours from late June, and closures for a holiday list that includes both fixed dates (July 1) and floating ones (the last Monday of May). Modeled well, that is one Schedule per equipment group and one district-wide Calendar: the holiday list lives in exactly one place, and next year’s dates get updated once. Modeled badly, it is hard-coded time blocks in every rooftop unit, and someone edits thirty controllers every June (the scenario is illustrative, but most integrators have lived some version of it).

What the Spec Defines

The weekly schedule. Weekly_Schedule is an array of seven day lists, each a list of time/value pairs. The current value of a day’s schedule is the latest entry at or before the current time; if there is none, the schedule’s value is Null.

Exceptions. Exception_Schedule entries override the weekly pattern on specific days: a date, a date range, a WeekNDay pattern, or a reference to a Calendar object. Each entry carries a priority, and the highest-priority exception in effect wins.

The evaluation order. At any moment the Schedule resolves its Present_Value in three steps: the highest-priority exception in effect that yields a non-Null value; otherwise the weekly schedule for the current day; otherwise Schedule_Default. Whenever the resolved value changes, the Schedule writes it to every member of List_Of_Object_Property_References, at the priority set by Priority_For_Writing, and an error writing one member does not stop the writes to the rest.

The midnight rule. Clause 12.24 is explicit: the evaluation runs at 00:00 every day, and Present_Value takes the value of Schedule_Default at 00:00 unless the day has an entry at exactly 00:00. A scheduled event that logically spans midnight (night setback that runs 22:00 to 06:00, for instance) must place a 00:00 entry in the schedule in effect for the second day, and for every subsequent day of the event. Schedule values do not carry across midnight on their own, and this rule is a classic implementation trap, both for devices and for the people configuring them.

Timeline of a night setback crossing midnight: with no 00:00 entry on day two, Present_Value snaps back to Schedule_Default when the Schedule re-evaluates at midnight

The Calendar. A Calendar’s Date_List mixes three entry forms: single dates, date ranges, and WeekNDay patterns (month, week-of-month, day-of-week, so “last Monday of May” is one entry that is correct every year). Its Present_Value is simply TRUE on days that match. Because Schedules reference Calendars by object, many Schedules can share one Calendar, which is the whole point: one holiday list, maintained once.

Calendar page showing the three BACnet calendar entry forms: a pinned single date, a highlighted date range, and a WeekNDay pattern circling the last Monday of May

Local vs remote targets. A Schedule that writes properties in its own device exercises SCHED-I-B; one that writes to objects in other devices across the network exercises SCHED-E-B, which brings network reliability into the control path.

Time itself. A schedule is only as good as the device’s clock. The TimeSynchronization service keeps fleet clocks aligned, and a device that accepts it claims DM-TS-B.

What the CAS BACnet Stack Supports Today

The CAS BACnet Stack supports the Schedule object, including the weekly and exception calculation and write-out to local objects (SCHED-I-B), and the Calendar object with all three entry forms: single dates, date ranges, and recurring WeekNDay entries. Scheduling has been through our full test suite and is running on customer sites today.

Write-out to remote objects (SCHED-E-B) works end to end at the code and test level; it has not yet been run against a BTL profile, so state it that way in a PICS (Protocol Implementation Conformance Statement) until it has. That distinction is exactly the kind of per-feature honesty a spec reviewer will respect.

In the field, the free CAS BACnet Explorer can browse a device’s Schedule and Calendar objects and their properties, which is the fast way to see what a controller thinks its week looks like before anyone argues about why the fans ran on Sunday.

How 6.x Expands This

In 6.x we are exercising schedule behavior against the BACnet Testing Laboratory’s published test plans, including the remote write-out path (SCHED-E-B), moving that capability from “works end to end” to third-party-verifiable. The day-boundary evaluation rules get particular attention; the midnight rule above is where implementations most often drift from the spec.

Where This Lives in the BACnet Spec

Scheduling touches a specific set of objects, services, BIBBs, and profiles. Each links to its reference page.

Object types

  • Schedule (Clause 12.24): weekly and exception schedules, evaluation, and write-out.
  • Calendar (Clause 12.9): dates, date ranges, and WeekNDay patterns shared by Schedules.

Services

  • WriteProperty: how a Schedule’s resolved value reaches its member objects.
  • TimeSynchronization: keeps the clocks a schedule depends on aligned across a fleet.

BIBBs

  • SCHED-I-B: scheduling with targets inside the same device.
  • SCHED-E-B: scheduling that writes to remote devices over the network.
  • DM-TS-B: the device accepts TimeSynchronization requests.

Profiles

  • B-BC: the building-controller profile; required to schedule actions in itself and in other devices.
  • B-AWS: the advanced operator workstation; where schedules and calendars get created and edited in field devices.

Where to Go Next