# bacstack v0.1.0-dev.1 - Table of Contents

> BACstack is a low-level Elixir implementation for the ASHRAE standard 135, BACnet - Building Automation and Controller network. In its current published state, v0.0.x, it can (only) act as a BACnet client for other BACnet devices.

## Pages

- [Constants: Engineering Unit](engineering_unit.md)
- [Constants: Object Type](object_type.md)
- [Constants: Property Identifier](property_identifier.md)
- [Example: Who Is](who_is.md)

## Modules

- [BACnet](BACnet.md): BACstack is a low-level Elixir implementation for the ASHRAE standard 135, BACnet - Building Automation and Controller network.
This implementation supports ASHRAE 135-xxxx and BACnet/IPv4. Support for other transport layers (such as BACnet/SC)
can be straight forward added on top of it.

- Protocol: General
  - [BACnet.Protocol](BACnet.Protocol.md): This module is mostly used for basic decoding of BACnet frames (Protocol Data Units - PDU).
  - [BACnet.Protocol.APDU](BACnet.Protocol.APDU.md): This module provides decoding of Application Data Units (APDU).
  - [BACnet.Protocol.APDU.Abort](BACnet.Protocol.APDU.Abort.md): Abort APDUs abruptly terminate an ongoing confirmed transaction.
  - [BACnet.Protocol.APDU.ComplexACK](BACnet.Protocol.APDU.ComplexACK.md): Complex ACK APDUs return successful results that contain data.
  - [BACnet.Protocol.APDU.ConfirmedServiceRequest](BACnet.Protocol.APDU.ConfirmedServiceRequest.md): Confirmed Service Request APDUs carry service invocations that require a reply.
  - [BACnet.Protocol.APDU.Error](BACnet.Protocol.APDU.Error.md): Error APDUs report that a confirmed service request could not be completed.
  - [BACnet.Protocol.APDU.Reject](BACnet.Protocol.APDU.Reject.md): Reject APDUs are sent when a confirmed service request cannot even be
*interpreted* because of a protocol or syntactical error.
  - [BACnet.Protocol.APDU.SegmentACK](BACnet.Protocol.APDU.SegmentACK.md): Segment ACK APDUs are used during segmented data transfer.
  - [BACnet.Protocol.APDU.SimpleACK](BACnet.Protocol.APDU.SimpleACK.md): Simple ACK APDUs are the minimal successful reply to a confirmed service.
  - [BACnet.Protocol.APDU.UnconfirmedServiceRequest](BACnet.Protocol.APDU.UnconfirmedServiceRequest.md): Unconfirmed Service Request APDUs carry one-way service invocations.
  - [BACnet.Protocol.ApplicationTags](BACnet.Protocol.ApplicationTags.md): This module provides application tags encoding and decoding as per ASHRAE 135-2012
Clause 20.2 (and the formal ASN.1 definitions in Clause 21), including support for
constructed data and context-specific tags.
  - [BACnet.Protocol.ApplicationTags.Encoding](BACnet.Protocol.ApplicationTags.Encoding.md): Helper types and functions for working with the decoded form of application
tags (`{:null, nil}`, `{:unsigned_integer, 42}`, `{:constructed, {tag, value, len}}`, etc.).
  - [BACnet.Protocol.BACnetURI](BACnet.Protocol.BACnetURI.md): ASHRAE 135 Annex Q.8 defines a BACnet URI scheme,
in cases where a URI is needed to refer to data that is accessible using BACnet services.
  - [BACnet.Protocol.Constants](BACnet.Protocol.Constants.md): BACnet Protocol constants.
  - [BACnet.Protocol.IncompleteAPDU](BACnet.Protocol.IncompleteAPDU.md): This module is used to represent a segmented incomplete APDU.
  - [BACnet.Protocol.NPCI](BACnet.Protocol.NPCI.md): Network Protocol Control Information (NPCI) is the header that precedes every
BACnet Network Protocol Data Unit (NPDU). It carries the information that
BACnet routers and receiving devices need to correctly forward or deliver the
message.
  - [BACnet.Protocol.NameValue](BACnet.Protocol.NameValue.md): BACnetNameValue is a structure used primarily for the `Tags` property
(of type BACnetARRAY of BACnetNameValue) that exists on nearly every
standardized BACnet object type (ASHRAE 135-2016 Clause 12.x and Annex Y).
  - [BACnet.Protocol.NetworkLayerProtocolMessage](BACnet.Protocol.NetworkLayerProtocolMessage.md): Network layer messages are used for prividing the basis for
router auto-configuration, router maintenance and
network layer congestion control.
  - [BACnet.Protocol.NpciTarget](BACnet.Protocol.NpciTarget.md): Network Protocol Control Information targets are used to describe
source and destination targets (network and address information) inside
of Network Protocol Control Information (`BACnet.Protocol.NPCI`).

- Protocol: Data Types
  - [BACnet.Protocol.AccessSpecification](BACnet.Protocol.AccessSpecification.md): An Access Specification (also called Read Access Specification or Write Access
Specification depending on context) describes a set of properties belonging to
a single object that should be read or written together.
  - [BACnet.Protocol.AccessSpecification.Property](BACnet.Protocol.AccessSpecification.Property.md): Represents one property entry inside an Access Specification.
  - [BACnet.Protocol.AccumulatorRecord](BACnet.Protocol.AccumulatorRecord.md): An Accumulator Record captures a single sample from an Accumulator object
at a particular point in time.
  - [BACnet.Protocol.ActionCommand](BACnet.Protocol.ActionCommand.md): An Action Command is one step inside an Action List that belongs to a Command
object. When the Command object is activated (by writing to its present value),
the device executes the sequence of Action Commands in order.
  - [BACnet.Protocol.ActionList](BACnet.Protocol.ActionList.md): An Action List is an ordered collection of Action Command structures. It is
the executable content of a Command object. Each element of the list (accessed
by array index) represents one complete sequence that the Command object can
perform when it is triggered at that index.
  - [BACnet.Protocol.AddressBinding](BACnet.Protocol.AddressBinding.md): An Address Binding is the mapping between a device's Object Identifier (the
Device object instance) and the network address at which that device can be
reached. It is the fundamental data structure used by the BACnet address
resolution mechanisms.
  - [BACnet.Protocol.AlarmSummary](BACnet.Protocol.AlarmSummary.md): An Alarm Summary entry is the data structure returned by the Get Alarm Summary
confirmed service. It gives a client a compact, point-in-time list of every object
inside a device that is currently in an alarm or fault condition and that the client
is permitted to observe.
  - [BACnet.Protocol.BACnetArray](BACnet.Protocol.BACnetArray.md): A BACnet Array (`BACnetARRAY` in the standard) is an ordered, indexed collection
of elements of the same datatype. It is one of the most important structured
datatypes in BACnet and appears as the type of many standard object properties.
  - [BACnet.Protocol.BACnetDate](BACnet.Protocol.BACnetDate.md): A BACnet Date is a structured value that can represent either a specific calendar
date or a *date pattern* containing wildcards and special values. It is one of the
fundamental data types in BACnet (application tag 10) and is used pervasively for
schedules, calendars, trend-log time ranges, and event timestamps.
  - [BACnet.Protocol.BACnetDateTime](BACnet.Protocol.BACnetDateTime.md): A BACnet DateTime is a simple SEQUENCE that combines a `BACnet.Protocol.BACnetDate` and a
`BACnet.Protocol.BACnetTime`. It is the most common concrete timestamp form used throughout
the protocol (application tag 12 when appearing as a primitive).
  - [BACnet.Protocol.BACnetError](BACnet.Protocol.BACnetError.md): A BACnet Error is the combination of an Error Class and an Error Code that
explains why a service request or action could not be fulfilled. It is
transmitted inside Error APDUs and also appears inside the result(-) parameter
of many confirmed services (Read Property, Write Property, Create Object, etc.).
  - [BACnet.Protocol.BACnetTime](BACnet.Protocol.BACnetTime.md): A BACnet Time is a structured value (application tag 11) that can represent either
a specific time of day or a *time pattern* with one or more components marked as
`:unspecified`. It is the natural companion to `BACnet.Protocol.BACnetDate` and
appears in the same contexts: schedules, calendars, trend logs, event notifications,
and TimeSynchronization services.
  - [BACnet.Protocol.BACnetTimestamp](BACnet.Protocol.BACnetTimestamp.md): A BACnet Timestamp is a CHOICE type that can represent three different notions
of "when something happened". The most common form is a full BACnet Date and
Time. For trend logs that produce very high-frequency samples, a simple
sequence number is often used instead because it consumes far less space and
avoids the cost of maintaining a real-time clock with sub-second precision.
The third form (Time only) is used when only the time of day is significant.
  - [BACnet.Protocol.CalendarEntry](BACnet.Protocol.CalendarEntry.md): A Calendar Entry is the CHOICE type used by both Calendar objects and Schedule
objects to describe "special" days (holidays, maintenance periods, after-hours
operation, etc.).
  - [BACnet.Protocol.CovSubscription](BACnet.Protocol.CovSubscription.md): A COV Subscription records that a particular client (identified by its
Process Identifier and Recipient address) has asked to be notified whenever
a specific property (or the entire object) changes value beyond a configured
increment.
  - [BACnet.Protocol.DailySchedule](BACnet.Protocol.DailySchedule.md): A Daily Schedule is a list of `BACnet.Protocol.TimeValue` pairs that define the
desired behavior of a scheduled property for one 24-hour period. It is the
fundamental building block of both the normal `weekly_schedule` (7 entries,
one per `BACnet.Protocol.DaysOfWeek`) and the `exception_schedule` in Schedule objects.
  - [BACnet.Protocol.DateRange](BACnet.Protocol.DateRange.md): A Date Range defines an inclusive period bounded by a start `BACnet.Protocol.BACnetDate` and
an end `BACnet.Protocol.BACnetDate`. It is one of the three CHOICE alternatives inside
`BACnet.Protocol.CalendarEntry` (alongside a specific `BACnet.Protocol.BACnetDate` and
a `BACnet.Protocol.WeekNDay` pattern).
  - [BACnet.Protocol.DaysOfWeek](BACnet.Protocol.DaysOfWeek.md): DaysOfWeek is a 7-bit bit string (application tag 8) where each bit represents
one day of the week. It is one of the most frequently used building blocks for
recurring schedules and exception handling in BACnet.
  - [BACnet.Protocol.Destination](BACnet.Protocol.Destination.md): A Destination describes where and when event notifications should be sent for a
particular recipient. It is the core data structure used inside Notification Class
objects to define the distribution list for alarms and events.
  - [BACnet.Protocol.DeviceObjectPropertyRef](BACnet.Protocol.DeviceObjectPropertyRef.md): A Device Object Property Reference is the most complete form of property
reference in BACnet. It identifies a specific property (with optional array
index) inside a specific object, optionally qualified by the device that
contains that object.
  - [BACnet.Protocol.DeviceObjectRef](BACnet.Protocol.DeviceObjectRef.md): A DeviceObjectRef points to an object, optionally qualified by the
device that contains it. It is one of the most common reference types in the
entire BACnet object model.
  - [BACnet.Protocol.EnrollmentSummary](BACnet.Protocol.EnrollmentSummary.md): An Enrollment Summary entry is produced by the Get Enrollment Summary service.
It lists the objects inside a device that have been configured to generate event
notifications (intrinsic or algorithmic) to a particular notification class or
recipient, filtered by the parameters supplied in the request.
  - [BACnet.Protocol.EventInformation](BACnet.Protocol.EventInformation.md): Event Information is the rich data structure returned by the Get Event Information
service (ASHRAE 135 Clause 13.12). It is the modern replacement for the older
Get Alarm Summary service and is the recommended way for a client to obtain a
complete picture of every object in a device that is capable of generating events.
  - [BACnet.Protocol.EventLogRecord](BACnet.Protocol.EventLogRecord.md): An Event Log Record is the structure stored by an Event Log object every time
it receives (or generates) an event notification. It captures the timestamp,
the full Confirmed Event Notification that was processed, the log status or
any time change, at the moment the record was created.
  - [BACnet.Protocol.EventMessageTexts](BACnet.Protocol.EventMessageTexts.md): Event Message Texts is a simple triple of character strings that a device can
use to supply human-readable messages for each of the three possible event
state transitions. The three fields correspond to the messages that should be
sent when the object transitions to-Offnormal, to-Fault, and to-Normal.
  - [BACnet.Protocol.EventTimestamps](BACnet.Protocol.EventTimestamps.md): Event Timestamps is a composite structure that holds three BACnet Timestamp values
recording the most recent transitions of an event-generating object into the
off-normal, fault, and normal states. It is carried inside Event Information
entries and inside certain event notification parameters.
  - [BACnet.Protocol.EventTransitionBits](BACnet.Protocol.EventTransitionBits.md): Event Transition Bits is a three-bit bit string used throughout the BACnet event
and alarm model. Each bit corresponds to one of the three possible state
transitions an object can make
  - [BACnet.Protocol.GroupChannelValue](BACnet.Protocol.GroupChannelValue.md): A Group Channel Value is the payload element used by the Write Group service.
It allows a single confirmed or unconfirmed request to command many objects
at once by addressing them through a numeric "channel" rather than by object
identifier.
  - [BACnet.Protocol.HostNPort](BACnet.Protocol.HostNPort.md): A BACnetHostNPort describes a host address together with a UDP (or equivalent)
port number. It is used in several Network Port object properties, most
notably
  - [BACnet.Protocol.LimitEnable](BACnet.Protocol.LimitEnable.md): BACnet Limit Enable is a two-bit bit string that controls which of the intrinsic
or algorithmic limit-detection mechanisms are active for an object (primarily
Analog Input/Value, Large Analog Value, etc.).
  - [BACnet.Protocol.LogMultipleRecord](BACnet.Protocol.LogMultipleRecord.md): A Log Multiple Record is the data element used by Trend Log Multiple objects.
Unlike a normal Trend Log (which records a single point over time), a Trend
Log Multiple records several properties from one or more objects at the same
instant, producing a "row" of related samples.
  - [BACnet.Protocol.LogRecord](BACnet.Protocol.LogRecord.md): A Log Record is the basic unit stored inside the buffer of a Trend Log or
Event Log object. Every time a trend log collects a sample, or an event log
records an event notification, a Log Record is appended to the circular buffer.
  - [BACnet.Protocol.LogStatus](BACnet.Protocol.LogStatus.md): Log Status is a compact three-bit bit string that reports the operational state
of a Trend Log or Event Log object. The three bits respectively indicate whether
logging has been disabled by the Log_Enable property, whether the internal buffer
has been purged since the last notification, and whether logging was interrupted
(for example because of a power failure or a configuration change).
  - [BACnet.Protocol.NotificationClassPriority](BACnet.Protocol.NotificationClassPriority.md): The notification class priority BACnet array is used to convey the priority
used for event notifications. A lower number indicates a higher priority.

  - [BACnet.Protocol.ObjectIdentifier](BACnet.Protocol.ObjectIdentifier.md): A BACnet Object Identifier (application tag 12) is the universal handle by which
every object in every BACnet device is named and addressed. It is a 32-bit packed
value defined as
  - [BACnet.Protocol.ObjectPropertyRef](BACnet.Protocol.ObjectPropertyRef.md): An Object Property Reference is the most common way to name a specific property
of a specific object in BACnet. It consists of an Object Identifier, a Property
Identifier (which may be a standard named property or a vendor-specific numeric
identifier), and an optional array index when the property is an array.
  - [BACnet.Protocol.Prescale](BACnet.Protocol.Prescale.md): A Prescale is a simple multiplier / modulo-divide pair used by Accumulator objects
to scale the raw pulse count coming from a physical meter into the engineering units
that the present value property should report.
  - [BACnet.Protocol.PriorityArray](BACnet.Protocol.PriorityArray.md): The Priority Array is a BACnet means of ensuring Command Prioritization.
The Priority Array is an array (or in this case a struct) that contains 16 levels of priority,
each which can take a particular value (each priority must have the same type) or NULL (`nil`).
The highest priority (lowest array index) with a non-NULL value is the active command.
  - [BACnet.Protocol.PropertyRef](BACnet.Protocol.PropertyRef.md): A Property Reference names only a property (and optionally an array index)
without identifying the object that contains it. It is used in contexts where
the object is already known from surrounding context.

  - [BACnet.Protocol.PropertyState](BACnet.Protocol.PropertyState.md): Property State is a large CHOICE used to carry the value of almost any
property in event and fault algorithms (Change-of-State, Command-Failure,
various fault detectors, etc.).
  - [BACnet.Protocol.PropertyValue](BACnet.Protocol.PropertyValue.md): Property Value packages a property reference (identifier + optional array
index) together with the value to be written (or that was read). It is the
basic payload element inside `WritePropertyMultiple`, `ReadPropertyMultiple`
results, and several action / event parameter structures.
  - [BACnet.Protocol.ReadAccessResult](BACnet.Protocol.ReadAccessResult.md): A Read Access Result is the response data returned for one object when a
Read Property Multiple request is processed. It contains the Object
Identifier of the object that was read, followed by a list of individual
property results (which may contain either a successful value or an error
for that specific property).
  - [BACnet.Protocol.ReadAccessResult.ReadResult](BACnet.Protocol.ReadAccessResult.ReadResult.md): Represents the result of reading one specific property as part of a Read
Property Multiple response.
  - [BACnet.Protocol.Recipient](BACnet.Protocol.Recipient.md): A Recipient identifies the target of an event notification or a COV notification.
It is a CHOICE between either a specific device (identified by its Device
object identifier) or a network address (which may be a unicast address, a
broadcast address, or a remote network broadcast).
  - [BACnet.Protocol.RecipientAddress](BACnet.Protocol.RecipientAddress.md): A Recipient Address is the low-level network addressing information used when
a BACnet device needs to send an event notification or COV notification to a
specific location rather than to a known Device object identifier.
  - [BACnet.Protocol.ResultFlags](BACnet.Protocol.ResultFlags.md): BACnet Result Flags is a three-bit bit string returned by range-reading services
(ReadRange, GetEventInformation, etc.) to describe the window of data that was
actually returned.
  - [BACnet.Protocol.RouterEntry](BACnet.Protocol.RouterEntry.md): A BACnetRouterEntry describes one first-hop router that can be used to reach
a remote BACnet network.
  - [BACnet.Protocol.SetpointReference](BACnet.Protocol.SetpointReference.md): A Setpoint Reference is a nullable pointer to another property that should be
treated as the setpoint for a control loop object (Loop, Analog Output, etc.).
  - [BACnet.Protocol.SpecialEvent](BACnet.Protocol.SpecialEvent.md): A Special Event defines an exception that overrides the normal weekly
schedule on selected days. It is the mechanism Schedule objects use for
holidays, maintenance windows, after-hours operation, etc.
  - [BACnet.Protocol.StatusFlags](BACnet.Protocol.StatusFlags.md): BACnet Status Flags is a four-bit bit string (application tag 8) that provides a
compact summary of an object's health and operating mode. It is the `status_flags`
property on virtually every standard object type and appears in almost every
event-related structure.
  - [BACnet.Protocol.TimeValue](BACnet.Protocol.TimeValue.md): A Time Value is the atomic (time, value) pair used inside `BACnet.Protocol.DailySchedule`
entries. It says: "at (or after) this time, the scheduled property should
take on this value".
  - [BACnet.Protocol.VmacEntry](BACnet.Protocol.VmacEntry.md): A BACnetVMACEntry maps a virtual MAC address (VMAC) to the native MAC
address used by the underlying data link.
  - [BACnet.Protocol.WeekNDay](BACnet.Protocol.WeekNDay.md): A WeekNDay (Week And Day) is a compact 3-component pattern used inside
`BACnet.Protocol.CalendarEntry` and `BACnet.Protocol.SpecialEvent` to describe
recurring days without listing every date.
Classic examples: "the third Tuesday of every month", "every even week on Friday",
or "the last Sunday in odd months".

- Protocol: Objects
  - [BACnet.Protocol.Device.ObjectTypesSupported](BACnet.Protocol.Device.ObjectTypesSupported.md): BACnet object types need to be supported by the device, in order for a BACnet client
to be able to handle them.
  - [BACnet.Protocol.Device.ServicesSupported](BACnet.Protocol.Device.ServicesSupported.md): BACnet Services need to be supported by the device, in order for a BACnet client
to be able to invoke them.
  - [BACnet.Protocol.ObjectsUtility](BACnet.Protocol.ObjectsUtility.md): This module offers utility functions that work on all object types.
  - [BACnet.Protocol.ObjectTypes.Accumulator](BACnet.Protocol.ObjectTypes.Accumulator.md): The Accumulator object provides a standardised representation for pulse-counting
measurement devices such as utility meters (electricity, water, gas, etc.). Pulses
are accumulated into the readonly `present_value` using the `prescale` (pulses per
unit) and `scale` factors so the exposed value matches the meter's register as
closely as possible, including proper rollover behaviour at `max_present_value`
(defaults to 32-bit unsigned max). Additional properties expose the instantaneous
`pulse_rate` over a configurable `limit_monitoring_interval`, allow presetting the
counter via `value_set`, and record change timestamps.
  - [BACnet.Protocol.ObjectTypes.AnalogInput](BACnet.Protocol.ObjectTypes.AnalogInput.md): The Analog Input object is the primary BACnet object type for exposing continuous
sensor measurements such as temperature, pressure, flow, humidity, current, voltage,
or any other physical analog quantity. Its `present_value` (a float) reflects the
current reading, scaled and in the units specified by the required `units` property.
Supporting properties include `min_present_value`/`max_present_value` limits,
`resolution`, `update_interval`, `device_type` (for the physical sensor), and
reliability/out_of_service handling.
  - [BACnet.Protocol.ObjectTypes.AnalogOutput](BACnet.Protocol.ObjectTypes.AnalogOutput.md): The Analog Output object is used to command analog actuators (valve or
damper positioners, variable-speed drives, heating elements, etc. -- which may be
hardware output signals or anything similar) or to publish
analog setpoints and calculated control signals. The `present_value` is fully
commandable: writes go through a 16-level `priority_array` with a `relinquish_default`
fallback; the effective value is the highest-priority non-null entry (or the default).
  - [BACnet.Protocol.ObjectTypes.AnalogValue](BACnet.Protocol.ObjectTypes.AnalogValue.md): The Analog Value object represents an analog (floating-point) data value or parameter
that exists only inside the BACnet device (setpoint, calculated intermediate result,
tuned constant, etc.) rather than being directly wired to hardware I/O. Because it is
not a physical input or output, its `present_value` can be written by the local
application or by BACnet clients.
  - [BACnet.Protocol.ObjectTypes.Averaging](BACnet.Protocol.ObjectTypes.Averaging.md): The Averaging object computes minimum, maximum, and average (plus variance if
supported) of a monitored property over a sliding time or sample window. It is
intended for statistical monitoring, load profiling, or simple trending without
requiring an external historian. The object references any numeric, boolean or
enumerated property (local or on another device via `object_property_reference`)
and samples it at the rate given by `window_interval` / `window_samples`.
  - [BACnet.Protocol.ObjectTypes.BinaryInput](BACnet.Protocol.ObjectTypes.BinaryInput.md): The Binary Input object exposes the state of a physical two-state sensor or contact
(door switch, pump run status, high-level float, limit switch, etc.). The `present_value`
is a Boolean (ACTIVE/INACTIVE or similar) that can be inverted from the physical
polarity via the `polarity` property. A `device_type` string can document the
underlying hardware.
  - [BACnet.Protocol.ObjectTypes.BinaryOutput](BACnet.Protocol.ObjectTypes.BinaryOutput.md): The Binary Output object is used to command two-state actuators (relays,
contactors, motor starters, solenoid valves, fans, pumps, etc. -- which may be
hardware output signals or anything similar). Its `present_value`
(ACTIVE/INACTIVE) is fully commandable through a priority array; the resulting
command is translated to the output according to the `polarity` property
(normal or reverse).
  - [BACnet.Protocol.ObjectTypes.BinaryValue](BACnet.Protocol.ObjectTypes.BinaryValue.md): The Binary Value object holds a two-state (Boolean) parameter that lives entirely in
the device's memory rather than being bound to physical I/O. It is the binary
counterpart to Analog Value and Multistate Value and is commonly used for operating
mode flags, enable/disable commands, alarm latches, or any calculated Boolean result
that needs to be visible and writable over the network.
  - [BACnet.Protocol.ObjectTypes.BitstringValue](BACnet.Protocol.ObjectTypes.BitstringValue.md): The Bitstring Value object exposes an arbitrary-length bit string (a set of Boolean
flags packed into an octet string) as a single named BACnet value. It is useful when
you need to publish a compact status word, a collection of related alarm bits, mode
bits, or any other group of Boolean states that naturally belong together.
  - [BACnet.Protocol.ObjectTypes.Calendar](BACnet.Protocol.ObjectTypes.Calendar.md): The Calendar object maintains a list of calendar dates and/or date patterns
that represent holidays, special events, or other date-based exceptions.
Other objects (primarily Schedule objects) reference a Calendar by its
Object Identifier to determine whether the current day is "in calendar" or not.
  - [BACnet.Protocol.ObjectTypes.CharacterStringValue](BACnet.Protocol.ObjectTypes.CharacterStringValue.md): The Character String Value object stores an arbitrary-length UTF-8 (or BACnet
character set) string as a network-visible named value. Typical uses include
operator messages, equipment labels, alarm descriptions, configuration parameters
expressed as text, or any other human-readable information that needs to be
exchanged or modified over BACnet.
  - [BACnet.Protocol.ObjectTypes.Command](BACnet.Protocol.ObjectTypes.Command.md): The Command object provides a single-point "macro" mechanism: writing an integer
action code (`present_value`) causes the object to execute a predefined list of
write operations on other object properties, all as a single atomic action from
the network's point of view. This is the standard way to implement "go to occupied
mode", "night setback", "fire alarm response", or any other coordinated multi-point
state change.
  - [BACnet.Protocol.ObjectTypes.DatePatternValue](BACnet.Protocol.ObjectTypes.DatePatternValue.md): The Date Pattern Value object holds a single recurring date pattern expressed with
the rich BACnet date wildcards. It is the pattern version of the simple
`BACnet.Protocol.ObjectTypes.DateValue` object.
  - [BACnet.Protocol.ObjectTypes.DateTimePatternValue](BACnet.Protocol.ObjectTypes.DateTimePatternValue.md): The Date Time Pattern Value object stores a combined date+time pattern that supports
the full set of BACnet wildcards on both the date and time portions. It is the most
powerful of the pattern value objects and is used when you need to express rules such
as "every weekday at 07:30 during even months" or "last Friday of the quarter at
17:00".
  - [BACnet.Protocol.ObjectTypes.DateTimeValue](BACnet.Protocol.ObjectTypes.DateTimeValue.md): The Date Time Value object holds a single concrete date-and-time value.
It is the non-recurring counterpart to `BACnet.Protocol.ObjectTypes.DateTimePatternValue`
and is typically used for absolute timestamps such as "last maintenance performed",
"contract expires", "next scheduled run", or any other point-in-time configuration
or status datum that must be visible on the network.
  - [BACnet.Protocol.ObjectTypes.DateValue](BACnet.Protocol.ObjectTypes.DateValue.md): The Date Value object stores a single concrete calendar date (year, month, day,
weekday) as a network-visible named value. It is the non-pattern counterpart to
`BACnet.Protocol.ObjectTypes.DatePatternValue` and is used for absolute dates
such as "project start", "warranty expiration", "last filter change",
or any other date that needs to be read or written by BACnet clients.
  - [BACnet.Protocol.ObjectTypes.Device](BACnet.Protocol.ObjectTypes.Device.md): The Device object is the single, mandatory root object that represents an entire
BACnet device on the network. Every BACnet device contains exactly one Device
object whose `object_identifier` is also used as the device's unique address within
the BACnet internetwork.
  - [BACnet.Protocol.ObjectTypes.EventEnrollment](BACnet.Protocol.ObjectTypes.EventEnrollment.md): The Event Enrollment object is the primary mechanism for defining intrinsic or
algorithmic event/alarm generation in BACnet. It references a single property
(local or on a remote device via `object_property_reference`), applies a chosen
event algorithm (CHANGE_OF_STATE, OUT_OF_RANGE, BUFFER_READY, etc.) together with
optional fault algorithms, and, when the state changes, sends notifications to the
recipients listed in the associated Notification Class.
  - [BACnet.Protocol.ObjectTypes.EventLog](BACnet.Protocol.ObjectTypes.EventLog.md): The Event Log object captures `BACnet.Protocol.Services.ConfirmedEventNotification`
and `BACnet.Protocol.Services.UnconfirmedEventNotification` into a timestamped buffer,
so that alarm and event history can be retrieved later with the
`BACnet.Protocol.Services.ReadRange` service. It is the BACnet-native replacement
for a local alarm printer or syslog for events.
  - [BACnet.Protocol.ObjectTypes.File](BACnet.Protocol.ObjectTypes.File.md): The File object is the BACnet abstraction for a data file stored inside (or
accessible through) the device. It enables remote file transfer using the
`BACnet.Protocol.Services.AtomicReadFile` and `BACnet.Protocol.Services.AtomicWriteFile`
services. Clients first read the File object's properties to learn the file's
size, access method (stream or record), and last modification time, then perform
the actual transfer operations using the file's Object Identifier.
  - [BACnet.Protocol.ObjectTypes.Group](BACnet.Protocol.ObjectTypes.Group.md): The Group object lets a client treat a collection of properties (possibly from
many different objects) as a single named entity. A ReadProperty or
ReadPropertyMultiple directed at the Group's `present_value` returns a list of the
current values of every member.
  - [BACnet.Protocol.ObjectTypes.IntegerValue](BACnet.Protocol.ObjectTypes.IntegerValue.md): The Integer Value object publishes a signed integer that lives inside the device.
It is the signed counterpart to Positive Integer Value and is typically used
for counters that may go negative, error codes, step numbers, or any other integer
quantity that clients need to read or write.
  - [BACnet.Protocol.ObjectTypes.LargeAnalogValue](BACnet.Protocol.ObjectTypes.LargeAnalogValue.md): The Large Analog Value object stores a double-precision (IEEE 754) floating point value.
It is the high-precision sibling of Analog Value and is intended for
scientific-grade measurements, accumulated energy totals, very small or very large
physical quantities, or any calculation that would lose accuracy with single-precision.
  - [BACnet.Protocol.ObjectTypes.Loop](BACnet.Protocol.ObjectTypes.Loop.md): The Loop object is the standard BACnet representation of a closed-loop controller
(PID, PI, P, or any other feedback algorithm). It continuously computes a
`present_value` (the controlled variable or the output, depending on the
implementation) from a `controlled_variable_reference`, a `setpoint_reference`,
and the three tuning parameters `proportional_constant`, `integral_constant`,
and `derivative_constant` (plus bias and other parameters).
  - [BACnet.Protocol.ObjectTypes.MultistateInput](BACnet.Protocol.ObjectTypes.MultistateInput.md): The Multistate Input object reports the current state of a multi-position physical
or logical sensor as a positive integer (1..N). The meaning of each state number
is a local matter and is documented for humans via the optional `state_text`
array (index 1 corresponds to state 1). Typical examples: fan speed selector
feedback, valve position (closed / mid / open), operating mode reported by a
chiller, etc.
  - [BACnet.Protocol.ObjectTypes.MultistateOutput](BACnet.Protocol.ObjectTypes.MultistateOutput.md): The Multistate Output object commands a multi-state actuator
(e.g. multi-speed fan, chiller mode selector,
damper with several positions, etc. -- which may be
hardware output signals or anything similar). The `present_value`
is an integer in the range 1..N; the meaning of each state number
is defined locally and can be documented with `state_text`.
  - [BACnet.Protocol.ObjectTypes.MultistateValue](BACnet.Protocol.ObjectTypes.MultistateValue.md): The Multistate Value object is the in-memory (non-physical I/O) counterpart to
Multistate Input and Multistate Output. It holds an integer state (1..N) that
represents an operating mode, a stage, a position in a sequence, or any other
enumerated control parameter that lives inside the device.
  - [BACnet.Protocol.ObjectTypes.NetworkPort](BACnet.Protocol.ObjectTypes.NetworkPort.md): The Network Port object type defines a standardized object whose properties represent
the externally visible characteristics of a network port of a BACnet device.
All BACnet devices shall contain at least one Network Port object per configured port.
It is a local matter whether or not Network Port objects exist for non-configured ports.
It is a local matter whether or not the Network Port object is used for non-BACnet ports.
  - [BACnet.Protocol.ObjectTypes.NotificationClass](BACnet.Protocol.ObjectTypes.NotificationClass.md): The Notification Class object is the central configuration point for event/alarm
routing in a BACnet device. Every object that can generate events (intrinsic or via
Event Enrollment) references exactly one Notification Class. The class defines
  - [BACnet.Protocol.ObjectTypes.OctetStringValue](BACnet.Protocol.ObjectTypes.OctetStringValue.md): The Octet String Value object holds an arbitrary sequence of bytes as a network-visible
named value. It is the binary counterpart to
`BACnet.Protocol.ObjectTypes.CharacterStringValue` and is intended for data
that has no textual interpretation on the wire: X.509 certificates, cryptographic keys,
firmware image chunks, proprietary configuration blobs, compressed trend data, etc.
  - [BACnet.Protocol.ObjectTypes.PositiveIntegerValue](BACnet.Protocol.ObjectTypes.PositiveIntegerValue.md): The Positive Integer Value object publishes an unsigned integer (non-negative) as a
named BACnet value. It is the unsigned sibling of
`BACnet.Protocol.ObjectTypes.IntegerValue` and is typically
used for counters, pulse totals, stage numbers, error counters, or any quantity
that by nature cannot be negative.
  - [BACnet.Protocol.ObjectTypes.Program](BACnet.Protocol.ObjectTypes.Program.md): The Program object gives BACnet clients a standardised window into a vendor-specific
control program, script, or state machine running inside the device. It exposes the
current `program_state` (idle, running, halted, etc.), a `program_change` command
property that can be used to start, stop, restart, or unload the program, plus
optional `reason_for_halt`, `program_location`, and `instance_of` (for identifying
which program (image) is loaded).
  - [BACnet.Protocol.ObjectTypes.PulseConverter](BACnet.Protocol.ObjectTypes.PulseConverter.md): The Pulse Converter object turns a raw pulse train (from a physical input)
into engineering-unit rate or total values over a configurable time window.
It is especially useful for demand metering (kW, gpm, etc.) where you
want a smoothed rate without having to count every pulse yourself.
  - [BACnet.Protocol.ObjectTypes.Schedule](BACnet.Protocol.ObjectTypes.Schedule.md): The Schedule object is the heart of time-based automation in BACnet. It contains a
weekly schedule (seven day schedules, each a list of time/value pairs) plus a list
of exception schedules (holidays, special events) that can reference
`BACnet.Protocol.ObjectTypes.Calendar` objects or contain inline date patterns.
At the scheduled times the object automatically writes the configured values
into the target properties listed in `list_of_object_property_references`.
  - [BACnet.Protocol.ObjectTypes.StructuredView](BACnet.Protocol.ObjectTypes.StructuredView.md): The Structured View object is a pure organisational container. It lets a device
expose a hierarchical tree (or forest) of references to other objects so that a
client can navigate the device content the same way a user would navigate a
building ("Floor 3" -> "AHU-03" -> "Supply Temp"). Each view contains a
`node_type`, a `node_subtype`, and a list of `subordinate_list` entries that point
to child objects (which may themselves be other Structured Views).
  - [BACnet.Protocol.ObjectTypes.TimePatternValue](BACnet.Protocol.ObjectTypes.TimePatternValue.md): The Time Pattern Value object holds a recurring time-of-day pattern that may contain
"don't care" wildcards in any of the hour/minute/second/hundredths fields. It is the
time-only sibling of `BACnet.Protocol.ObjectTypes.DateTimePatternValue` Value and
is the pattern form of the simple `BACnet.Protocol.ObjectTypes.TimeValue` object.
  - [BACnet.Protocol.ObjectTypes.TimeValue](BACnet.Protocol.ObjectTypes.TimeValue.md): The Time Value object stores a single concrete time-of-day (hour, minute, second,
hundredths) as a named BACnet value. It is the non-recurring counterpart to
`BACnet.Protocol.ObjectTypes.TimePatternValue` and is used for absolute times
such as "occupied start", "night setback time", "report generation time",
or any other clock time that must be configurable over the network.
  - [BACnet.Protocol.ObjectTypes.TrendLog](BACnet.Protocol.ObjectTypes.TrendLog.md): The Trend Log object is the standard BACnet mechanism for local data logging.
It watches a single property (any object, local or remote, referenced via
`log_device_object_property`) and records timestamped samples into a circular or
growing buffer. Logging can be triggered periodically (`log_interval`), on COV of
the monitored property, or by an explicit trigger.
  - [BACnet.Protocol.ObjectTypes.TrendLogMultiple](BACnet.Protocol.ObjectTypes.TrendLogMultiple.md): The Trend Log Multiple object extends Trend Log to record several properties at
once into each log entry. All monitored properties (listed in
`log_device_object_property`) are sampled on the same trigger
(periodic or explicit), producing a single record that contains the values
of every member at that instant. This makes it ideal for capturing correlated
data (e.g. supply/return temp + valve position + airflow at the same moment).

- Protocol: Services
  - [BACnet.Protocol.Services.AcknowledgeAlarm](BACnet.Protocol.Services.AcknowledgeAlarm.md): This module represents the BACnet Acknowledge Alarm service.
  - [BACnet.Protocol.Services.AddListElement](BACnet.Protocol.Services.AddListElement.md): This module represents the BACnet Add List Element service.
  - [BACnet.Protocol.Services.AtomicReadFile](BACnet.Protocol.Services.AtomicReadFile.md): This module represents the BACnet Atomic Read File service.
  - [BACnet.Protocol.Services.AtomicWriteFile](BACnet.Protocol.Services.AtomicWriteFile.md): This module represents the BACnet Atomic Write File service.
  - [BACnet.Protocol.Services.ConfirmedCovNotification](BACnet.Protocol.Services.ConfirmedCovNotification.md): This module represents the BACnet Confirmed COV Notification service.
  - [BACnet.Protocol.Services.ConfirmedEventNotification](BACnet.Protocol.Services.ConfirmedEventNotification.md): This module represents the BACnet Confirmed Event Notification service.
  - [BACnet.Protocol.Services.ConfirmedPrivateTransfer](BACnet.Protocol.Services.ConfirmedPrivateTransfer.md): This module represents the BACnet Confirmed Private Transfer service.
  - [BACnet.Protocol.Services.ConfirmedTextMessage](BACnet.Protocol.Services.ConfirmedTextMessage.md): This module represents the BACnet Confirmed Text Message service.
  - [BACnet.Protocol.Services.CreateObject](BACnet.Protocol.Services.CreateObject.md): This module represents the BACnet Create Object service.
  - [BACnet.Protocol.Services.DeleteObject](BACnet.Protocol.Services.DeleteObject.md): This module represents the BACnet Delete Object service.
  - [BACnet.Protocol.Services.DeviceCommunicationControl](BACnet.Protocol.Services.DeviceCommunicationControl.md): This module represents the BACnet Device Communication Control service.
  - [BACnet.Protocol.Services.GetAlarmSummary](BACnet.Protocol.Services.GetAlarmSummary.md): This module represents the BACnet Get Alarm Summary service.
  - [BACnet.Protocol.Services.GetEnrollmentSummary](BACnet.Protocol.Services.GetEnrollmentSummary.md): This module represents the BACnet Get Enrollment Summary service.
  - [BACnet.Protocol.Services.GetEventInformation](BACnet.Protocol.Services.GetEventInformation.md): This module represents the BACnet Get Event Information service.
  - [BACnet.Protocol.Services.IAm](BACnet.Protocol.Services.IAm.md): This module represents the BACnet I-Am service.
  - [BACnet.Protocol.Services.IHave](BACnet.Protocol.Services.IHave.md): This module represents the BACnet I-Have service.
  - [BACnet.Protocol.Services.LifeSafetyOperation](BACnet.Protocol.Services.LifeSafetyOperation.md): This module represents the BACnet Life Safety Operation service.
  - [BACnet.Protocol.Services.ReadProperty](BACnet.Protocol.Services.ReadProperty.md): This module represents the BACnet Read Property service.
  - [BACnet.Protocol.Services.ReadPropertyMultiple](BACnet.Protocol.Services.ReadPropertyMultiple.md): This module represents the BACnet Read Property Multiple service.
  - [BACnet.Protocol.Services.ReadRange](BACnet.Protocol.Services.ReadRange.md): This module represents the BACnet Read Range service.
  - [BACnet.Protocol.Services.ReinitializeDevice](BACnet.Protocol.Services.ReinitializeDevice.md): This module represents the BACnet Reinitialize Device service.
  - [BACnet.Protocol.Services.RemoveListElement](BACnet.Protocol.Services.RemoveListElement.md): This module represents the BACnet Remove List Element service.
  - [BACnet.Protocol.Services.SubscribeCov](BACnet.Protocol.Services.SubscribeCov.md): This module represents the BACnet Subscribe COV service.
  - [BACnet.Protocol.Services.SubscribeCovProperty](BACnet.Protocol.Services.SubscribeCovProperty.md): This module represents the BACnet Subscribe COV Property service.
  - [BACnet.Protocol.Services.TimeSynchronization](BACnet.Protocol.Services.TimeSynchronization.md): This module represents the BACnet Time Synchronization service.
  - [BACnet.Protocol.Services.UnconfirmedCovNotification](BACnet.Protocol.Services.UnconfirmedCovNotification.md): This module represents the BACnet Unconfirmed COV Notification service (Change Of Value).
  - [BACnet.Protocol.Services.UnconfirmedEventNotification](BACnet.Protocol.Services.UnconfirmedEventNotification.md): This module represents the BACnet Unconfirmed Event Notification service.
  - [BACnet.Protocol.Services.UnconfirmedPrivateTransfer](BACnet.Protocol.Services.UnconfirmedPrivateTransfer.md): This module represents the BACnet Unconfirmed Private Transfer service.
  - [BACnet.Protocol.Services.UnconfirmedTextMessage](BACnet.Protocol.Services.UnconfirmedTextMessage.md): This module represents the BACnet Unconfirmed Text Message service.
  - [BACnet.Protocol.Services.UtcTimeSynchronization](BACnet.Protocol.Services.UtcTimeSynchronization.md): This module represents the BACnet UTC Time Synchronization service.
  - [BACnet.Protocol.Services.WhoHas](BACnet.Protocol.Services.WhoHas.md): This module represents the BACnet Who-Has service.
  - [BACnet.Protocol.Services.WhoIs](BACnet.Protocol.Services.WhoIs.md): This module represents the BACnet Who-Is service.
  - [BACnet.Protocol.Services.WriteGroup](BACnet.Protocol.Services.WriteGroup.md): This module represents the BACnet Write Group service.
  - [BACnet.Protocol.Services.WriteProperty](BACnet.Protocol.Services.WriteProperty.md): This module represents the BACnet Write Property service.
  - [BACnet.Protocol.Services.WritePropertyMultiple](BACnet.Protocol.Services.WritePropertyMultiple.md): This module represents the BACnet Write Property Multiple service.
  - [BACnet.Protocol.Services.Ack.AtomicReadFileAck](BACnet.Protocol.Services.Ack.AtomicReadFileAck.md): The Atomic Read File Acknowledgment is the response to a successful Atomic
Read File service request.
  - [BACnet.Protocol.Services.Ack.AtomicWriteFileAck](BACnet.Protocol.Services.Ack.AtomicWriteFileAck.md): The Atomic Write File Acknowledgment is the response to a successful Atomic
Write File service request.
  - [BACnet.Protocol.Services.Ack.ConfirmedPrivateTransferAck](BACnet.Protocol.Services.Ack.ConfirmedPrivateTransferAck.md): The Confirmed Private Transfer Acknowledgment is the response to a successful
Confirmed Private Transfer service request.
  - [BACnet.Protocol.Services.Ack.CreateObjectAck](BACnet.Protocol.Services.Ack.CreateObjectAck.md): The Create Object Acknowledgment is returned by a server after successfully
creating a new object in response to a Create Object service request.
  - [BACnet.Protocol.Services.Ack.GetAlarmSummaryAck](BACnet.Protocol.Services.Ack.GetAlarmSummaryAck.md): The Get Alarm Summary Acknowledgment is the response to a Get Alarm Summary
service request. It returns a list of Alarm Summary records, one for each
object in the device that is currently in an alarm or fault state and that
the requesting client is authorized to observe.
  - [BACnet.Protocol.Services.Ack.GetEnrollmentSummaryAck](BACnet.Protocol.Services.Ack.GetEnrollmentSummaryAck.md): The Get Enrollment Summary Acknowledgment returns the list of objects that
have been configured to generate event notifications to a particular
recipient or notification class.
  - [BACnet.Protocol.Services.Ack.GetEventInformationAck](BACnet.Protocol.Services.Ack.GetEventInformationAck.md): The Get Event Information Acknowledgment is the response to a Get Event
Information service request. It provides a detailed snapshot of every object
in the device that is configured for event reporting.
  - [BACnet.Protocol.Services.Ack.ReadPropertyAck](BACnet.Protocol.Services.Ack.ReadPropertyAck.md): The Read Property Acknowledgment is the successful response returned when a
client issues a Read Property service request.
  - [BACnet.Protocol.Services.Ack.ReadPropertyMultipleAck](BACnet.Protocol.Services.Ack.ReadPropertyMultipleAck.md): The Read Property Multiple Acknowledgment is the response to a successful
Read Property Multiple service request.
  - [BACnet.Protocol.Services.Ack.ReadRangeAck](BACnet.Protocol.Services.Ack.ReadRangeAck.md): The Read Range Acknowledgment is the response to a successful Read Range
service request against a Trend Log, Event Log, or other log object.
  - [BACnet.Protocol.Services.Error.AddListElementError](BACnet.Protocol.Services.Error.AddListElementError.md): The Add List Element Error is returned when an Add List Element service
request fails.
  - [BACnet.Protocol.Services.Error.ConfirmedPrivateTransferError](BACnet.Protocol.Services.Error.ConfirmedPrivateTransferError.md): The Confirmed Private Transfer Error is returned when a Confirmed Private
Transfer service request fails.
  - [BACnet.Protocol.Services.Error.CreateObjectError](BACnet.Protocol.Services.Error.CreateObjectError.md): The Create Object Error is returned when a Create Object service request
fails.
  - [BACnet.Protocol.Services.Error.DeleteObjectError](BACnet.Protocol.Services.Error.DeleteObjectError.md): The Delete Object Error is returned when a Delete Object service request
fails.
  - [BACnet.Protocol.Services.Error.RemoveListElementError](BACnet.Protocol.Services.Error.RemoveListElementError.md): The Remove List Element Error is returned when a Remove List Element service
request fails.
  - [BACnet.Protocol.Services.Error.WritePropertyMultipleError](BACnet.Protocol.Services.Error.WritePropertyMultipleError.md): The Write Property Multiple Error is returned when a Write Property Multiple
service request fails.

- Protocol: Alarm &amp; Event Subscription
  - [BACnet.Protocol.EventAlgorithms](BACnet.Protocol.EventAlgorithms.md): BACnet has various different types of event algorithms.
Each of them is implemented by a different module.
  - [BACnet.Protocol.EventParameters](BACnet.Protocol.EventParameters.md): BACnet event parameters describe the specific configuration and thresholds
used by each event algorithm (see `BACnet.Protocol.EventAlgorithms`).
  - [BACnet.Protocol.FaultAlgorithms](BACnet.Protocol.FaultAlgorithms.md): BACnet has various different types of fault algorithms.
Each of them is implemented by a different module.
  - [BACnet.Protocol.FaultParameters](BACnet.Protocol.FaultParameters.md): BACnet fault parameters configure the conditions under which an object
should report a FAULT event state (as opposed to NORMAL or OFFNORMAL).
  - [BACnet.Protocol.NotificationParameters](BACnet.Protocol.NotificationParameters.md): BACnet notification parameters define the additional data that is included
in ConfirmedEventNotification and UnconfirmedEventNotification messages.
  - [BACnet.Protocol.EventAlgorithms.BufferReady](BACnet.Protocol.EventAlgorithms.BufferReady.md): Implements the BACnet event algorithm `BufferReady`.
  - [BACnet.Protocol.EventAlgorithms.ChangeOfBitstring](BACnet.Protocol.EventAlgorithms.ChangeOfBitstring.md): Implements the BACnet event algorithm `ChangeOfBitstring`.
  - [BACnet.Protocol.EventAlgorithms.ChangeOfCharacterString](BACnet.Protocol.EventAlgorithms.ChangeOfCharacterString.md): Implements the BACnet event algorithm `ChangeOfCharacterString`.
  - [BACnet.Protocol.EventAlgorithms.ChangeOfLifeSafety](BACnet.Protocol.EventAlgorithms.ChangeOfLifeSafety.md): Implements the BACnet event algorithm `ChangeOfLifeSafety`.
  - [BACnet.Protocol.EventAlgorithms.ChangeOfState](BACnet.Protocol.EventAlgorithms.ChangeOfState.md): Implements the BACnet event algorithm `ChangeOfState`.
  - [BACnet.Protocol.EventAlgorithms.ChangeOfStatusFlags](BACnet.Protocol.EventAlgorithms.ChangeOfStatusFlags.md): Implements the BACnet event algorithm `ChangeOfStatusFlags`.
  - [BACnet.Protocol.EventAlgorithms.ChangeOfValue](BACnet.Protocol.EventAlgorithms.ChangeOfValue.md): Implements the BACnet event algorithm `ChangeOfValue`.
  - [BACnet.Protocol.EventAlgorithms.CommandFailure](BACnet.Protocol.EventAlgorithms.CommandFailure.md): Implements the BACnet event algorithm `CommandFailure`.
  - [BACnet.Protocol.EventAlgorithms.ComplexEventType](BACnet.Protocol.EventAlgorithms.ComplexEventType.md): Implements the BACnet event algorithm `ComplexEventType`.
  - [BACnet.Protocol.EventAlgorithms.DoubleOutOfRange](BACnet.Protocol.EventAlgorithms.DoubleOutOfRange.md): Implements the BACnet event algorithm `DoubleOutOfRange`.
  - [BACnet.Protocol.EventAlgorithms.Extended](BACnet.Protocol.EventAlgorithms.Extended.md): Implements the BACnet event algorithm `Extended`.
  - [BACnet.Protocol.EventAlgorithms.FloatingLimit](BACnet.Protocol.EventAlgorithms.FloatingLimit.md): Implements the BACnet event algorithm `FloatingLimit`.
  - [BACnet.Protocol.EventAlgorithms.None](BACnet.Protocol.EventAlgorithms.None.md): Implements the BACnet event algorithm `None`.
  - [BACnet.Protocol.EventAlgorithms.OutOfRange](BACnet.Protocol.EventAlgorithms.OutOfRange.md): Implements the BACnet event algorithm `OutOfRange`.
  - [BACnet.Protocol.EventAlgorithms.SignedOutOfRange](BACnet.Protocol.EventAlgorithms.SignedOutOfRange.md): Implements the BACnet event algorithm `SignedOutOfRange`.
  - [BACnet.Protocol.EventAlgorithms.UnsignedOutOfRange](BACnet.Protocol.EventAlgorithms.UnsignedOutOfRange.md): Implements the BACnet event algorithm `UnsignedOutOfRange`.
  - [BACnet.Protocol.EventAlgorithms.UnsignedRange](BACnet.Protocol.EventAlgorithms.UnsignedRange.md): Implements the BACnet event algorithm `UnsignedRange`.
  - [BACnet.Protocol.EventParameters.BufferReady](BACnet.Protocol.EventParameters.BufferReady.md): Represents the BACnet event algorithm `BufferReady` parameters.
  - [BACnet.Protocol.EventParameters.ChangeOfBitstring](BACnet.Protocol.EventParameters.ChangeOfBitstring.md): Represents the BACnet event algorithm `ChangeOfBitstring` parameters.
  - [BACnet.Protocol.EventParameters.ChangeOfCharacterString](BACnet.Protocol.EventParameters.ChangeOfCharacterString.md): Represents the BACnet event algorithm `ChangeOfCharacterString` parameters.
  - [BACnet.Protocol.EventParameters.ChangeOfLifeSafety](BACnet.Protocol.EventParameters.ChangeOfLifeSafety.md): Represents the BACnet event algorithm `ChangeOfLifeSafety` parameters.
  - [BACnet.Protocol.EventParameters.ChangeOfState](BACnet.Protocol.EventParameters.ChangeOfState.md): Represents the BACnet event algorithm `ChangeOfState` parameters.
  - [BACnet.Protocol.EventParameters.ChangeOfStatusFlags](BACnet.Protocol.EventParameters.ChangeOfStatusFlags.md): Represents the BACnet event algorithm `ChangeOfStatusFlags` parameters.
  - [BACnet.Protocol.EventParameters.ChangeOfValue](BACnet.Protocol.EventParameters.ChangeOfValue.md): Represents the BACnet event algorithm `ChangeOfValue` parameters.
  - [BACnet.Protocol.EventParameters.CommandFailure](BACnet.Protocol.EventParameters.CommandFailure.md): Represents the BACnet event algorithm `CommandFailure` parameters.
  - [BACnet.Protocol.EventParameters.DoubleOutOfRange](BACnet.Protocol.EventParameters.DoubleOutOfRange.md): Represents the BACnet event algorithm `DoubleOutOfRange` parameters.
  - [BACnet.Protocol.EventParameters.Extended](BACnet.Protocol.EventParameters.Extended.md): Represents the BACnet event algorithm `Extended` parameters.
  - [BACnet.Protocol.EventParameters.FloatingLimit](BACnet.Protocol.EventParameters.FloatingLimit.md): Represents the BACnet event algorithm `FloatingLimit` parameters.
  - [BACnet.Protocol.EventParameters.None](BACnet.Protocol.EventParameters.None.md): Represents the BACnet event algorithm `None` parameters.
  - [BACnet.Protocol.EventParameters.OutOfRange](BACnet.Protocol.EventParameters.OutOfRange.md): Represents the BACnet event algorithm `OutOfRange` parameters.
  - [BACnet.Protocol.EventParameters.SignedOutOfRange](BACnet.Protocol.EventParameters.SignedOutOfRange.md): Represents the BACnet event algorithm `SignedOutOfRange` parameters.
  - [BACnet.Protocol.EventParameters.UnsignedOutOfRange](BACnet.Protocol.EventParameters.UnsignedOutOfRange.md): Represents the BACnet event algorithm `UnsignedOutOfRange` parameters.
  - [BACnet.Protocol.EventParameters.UnsignedRange](BACnet.Protocol.EventParameters.UnsignedRange.md): Represents the BACnet event algorithm `UnsignedRange` parameters.
  - [BACnet.Protocol.FaultAlgorithms.FaultCharacterString](BACnet.Protocol.FaultAlgorithms.FaultCharacterString.md): Represents the BACnet fault algorithm `FaultCharacterString`.
  - [BACnet.Protocol.FaultAlgorithms.FaultExtended](BACnet.Protocol.FaultAlgorithms.FaultExtended.md): Represents the BACnet fault algorithm `FaultExtended`.
  - [BACnet.Protocol.FaultAlgorithms.FaultLifeSafety](BACnet.Protocol.FaultAlgorithms.FaultLifeSafety.md): Represents the BACnet fault algorithm `FaultLifeSafety`.
  - [BACnet.Protocol.FaultAlgorithms.FaultState](BACnet.Protocol.FaultAlgorithms.FaultState.md): Represents the BACnet fault algorithm `FaultState`.
  - [BACnet.Protocol.FaultAlgorithms.FaultStatusFlags](BACnet.Protocol.FaultAlgorithms.FaultStatusFlags.md): Represents the BACnet fault algorithm `FaultStatusFlags`.
  - [BACnet.Protocol.FaultParameters.FaultCharacterString](BACnet.Protocol.FaultParameters.FaultCharacterString.md): Represents the BACnet fault algorithm `FaultCharacterString` parameters.
  - [BACnet.Protocol.FaultParameters.FaultExtended](BACnet.Protocol.FaultParameters.FaultExtended.md): Represents the BACnet fault algorithm `FaultExtended` parameters.
  - [BACnet.Protocol.FaultParameters.FaultLifeSafety](BACnet.Protocol.FaultParameters.FaultLifeSafety.md): Represents the BACnet fault algorithm `FaultLifeSafety` parameters.
  - [BACnet.Protocol.FaultParameters.FaultState](BACnet.Protocol.FaultParameters.FaultState.md): Represents the BACnet fault algorithm `FaultState` parameters.
  - [BACnet.Protocol.FaultParameters.FaultStatusFlags](BACnet.Protocol.FaultParameters.FaultStatusFlags.md): Represents the BACnet fault algorithm `FaultStatusFlags` parameters.
  - [BACnet.Protocol.FaultParameters.None](BACnet.Protocol.FaultParameters.None.md): Represents the BACnet fault algorithm `None` parameters.
  - [BACnet.Protocol.NotificationParameters.BufferReady](BACnet.Protocol.NotificationParameters.BufferReady.md): Represents the BACnet event algorithm `BufferReady` notification parameters.
  - [BACnet.Protocol.NotificationParameters.ChangeOfBitstring](BACnet.Protocol.NotificationParameters.ChangeOfBitstring.md): Represents the BACnet event algorithm `ChangeOfBitstring` notification parameters.
  - [BACnet.Protocol.NotificationParameters.ChangeOfCharacterString](BACnet.Protocol.NotificationParameters.ChangeOfCharacterString.md): Represents the BACnet event algorithm `ChangeOfCharacterString` notification parameters.
  - [BACnet.Protocol.NotificationParameters.ChangeOfLifeSafety](BACnet.Protocol.NotificationParameters.ChangeOfLifeSafety.md): Represents the BACnet event algorithm `ChangeOfLifeSafety` notification parameters.
  - [BACnet.Protocol.NotificationParameters.ChangeOfReliability](BACnet.Protocol.NotificationParameters.ChangeOfReliability.md): Represents the BACnet event algorithm `ChangeOfReliability` notification parameters.
  - [BACnet.Protocol.NotificationParameters.ChangeOfState](BACnet.Protocol.NotificationParameters.ChangeOfState.md): Represents the BACnet event algorithm `ChangeOfState` notification parameters.
  - [BACnet.Protocol.NotificationParameters.ChangeOfStatusFlags](BACnet.Protocol.NotificationParameters.ChangeOfStatusFlags.md): Represents the BACnet event algorithm `ChangeOfStatusFlags` notification parameters.
  - [BACnet.Protocol.NotificationParameters.ChangeOfValue](BACnet.Protocol.NotificationParameters.ChangeOfValue.md): Represents the BACnet event algorithm `ChangeOfValue` notification parameters.
  - [BACnet.Protocol.NotificationParameters.CommandFailure](BACnet.Protocol.NotificationParameters.CommandFailure.md): Represents the BACnet event algorithm `CommandFailure` notification parameters.
  - [BACnet.Protocol.NotificationParameters.ComplexEventType](BACnet.Protocol.NotificationParameters.ComplexEventType.md): Represents the BACnet event algorithm `ComplexEventType` notification parameters.
  - [BACnet.Protocol.NotificationParameters.DoubleOutOfRange](BACnet.Protocol.NotificationParameters.DoubleOutOfRange.md): Represents the BACnet event algorithm `DoubleOutOfRange` notification parameters.
  - [BACnet.Protocol.NotificationParameters.Extended](BACnet.Protocol.NotificationParameters.Extended.md): Represents the BACnet event algorithm `Extended` notification parameters.
  - [BACnet.Protocol.NotificationParameters.FloatingLimit](BACnet.Protocol.NotificationParameters.FloatingLimit.md): Represents the BACnet event algorithm `FloatingLimit` notification parameters.
  - [BACnet.Protocol.NotificationParameters.OutOfRange](BACnet.Protocol.NotificationParameters.OutOfRange.md): Represents the BACnet event algorithm `OutOfRange` notification parameters.
  - [BACnet.Protocol.NotificationParameters.SignedOutOfRange](BACnet.Protocol.NotificationParameters.SignedOutOfRange.md): Represents the BACnet event algorithm `SignedOutOfRange` notification parameters.
  - [BACnet.Protocol.NotificationParameters.UnsignedOutOfRange](BACnet.Protocol.NotificationParameters.UnsignedOutOfRange.md): Represents the BACnet event algorithm `UnsignedOutOfRange` notification parameters.
  - [BACnet.Protocol.NotificationParameters.UnsignedRange](BACnet.Protocol.NotificationParameters.UnsignedRange.md): Represents the BACnet event algorithm `UnsignedRange` notification parameters.

- Protocol: BACnet/IP
  - [BACnet.Protocol.BroadcastDistributionTableEntry](BACnet.Protocol.BroadcastDistributionTableEntry.md): A Broadcast Distribution Table Entry describes one peer BBMD (BACnet Broadcast
Management Device) or peer network that participates in the distribution of
BACnet broadcasts across an IP network. The table as a whole defines the
mesh of BBMDs that collectively provide broadcast emulation for an entire site
and includes entries to local networks the BBMD should broadcast to.
  - [BACnet.Protocol.BvlcForwardedNPDU](BACnet.Protocol.BvlcForwardedNPDU.md): Represents a Forwarded NPDU BVLC function (BVLC function 0x04) used in BACnet/IP
to forward a message from a foreign device or across a BBMD (ASHRAE 135 Annex J).
  - [BACnet.Protocol.BvlcFunction](BACnet.Protocol.BvlcFunction.md): A BVLC Function is the payload of a BACnet Virtual Link Layer (BVLL) message
used on BACnet/IP networks (ASHRAE 135 Annex J). Each function code corresponds
to a different operation: Register-Foreign-Device, Read-Broadcast-Distribution-Table,
Write-Broadcast-Distribution-Table, and several others used for BBMD and
Foreign Device management.
  - [BACnet.Protocol.BvlcResult](BACnet.Protocol.BvlcResult.md): Represents the result of a BVLC operation (BVLC function 0x00, BVLC-Result) in BACnet/IP
(ASHRAE 135 Annex J.2.1). The single-byte result code indicates success or the reason for failure.
  - [BACnet.Protocol.ForeignDeviceTableEntry](BACnet.Protocol.ForeignDeviceTableEntry.md): A Foreign Device Table Entry represents one foreign device that has registered
with a BACnet/IP Broadcast Management Device (BBMD). Foreign devices use this
registration mechanism to participate in BACnet broadcasts even when they are
not on the same IP subnet as the devices they need to communicate with.

- Stack
  - [BACnet.Stack.BBMD](BACnet.Stack.BBMD.md): The BBMD module is responsible for acting as a BACnet/IPv4 Broadcast Management Device (BBMD).
  - [BACnet.Stack.Client](BACnet.Stack.Client.md): The BACnet client is responsible for connecting the application to the BACnet transport protocol
and vice versa - it interfaces with the BACnet transport protocol, using the transport behaviour.
The client will take requests and send them to the BACnet transport protocol and ultimately listen for
frames from the BACnet transport protocol.
  - [BACnet.Stack.ClientHelper](BACnet.Stack.ClientHelper.md): BACnet stack client helper functions for executing commands/queries.

  - [BACnet.Stack.EncoderProtocol](BACnet.Stack.EncoderProtocol.md): This protocol is used inside the BACnet stack (transport modules) to encode APDU structs into binary BACnet APDUs,
which then are sent through the transport layer.

  - [BACnet.Stack.ForeignDevice](BACnet.Stack.ForeignDevice.md): The Foreign Device module is a server process that takes care of registering the application
(client/transport) as a Foreign Device in a BACnet/IPv4 Broadcast Management Device (BBMD).
  - [BACnet.Stack.LogBuffer](BACnet.Stack.LogBuffer.md): Simple log buffer implementation for event and trend logs.
The type of the item is not enforced.
  - [BACnet.Stack.LogBufferBehaviour](BACnet.Stack.LogBufferBehaviour.md): A behaviour for log buffer implementations, most notably for the `BACnet.Stack.TrendLogger` module.
  - [BACnet.Stack.Segmentator](BACnet.Stack.Segmentator.md): The Segmentator module is responsible for sending segmented requests or responses.
Incoming segments need to be handled manually or through the `BACnet.Stack.SegmentsStore` module.
  - [BACnet.Stack.SegmentsStore](BACnet.Stack.SegmentsStore.md): The Segments Store module handles incoming segments of a segmented request or response.
Outgoing segments need to be handled manually or through the `BACnet.Stack.Segmentator` module.
  - [BACnet.Stack.Telemetry](BACnet.Stack.Telemetry.md): Contains functions for easier interaction with telemetry.
  - [BACnet.Stack.TransportBehaviour](BACnet.Stack.TransportBehaviour.md): Defines the BACnet transport protocol behaviour.
  - [BACnet.Stack.TrendLogger](BACnet.Stack.TrendLogger.md): The Trend Logger module is responsible for handling event and trend logging
and keeping a log buffer.
  - [BACnet.Stack.Transport.EthernetTransport](BACnet.Stack.Transport.EthernetTransport.md): The BACnet transport for BACnet/Ethernet.
  - [BACnet.Stack.Transport.IPv4Transport](BACnet.Stack.Transport.IPv4Transport.md): The BACnet transport for BACnet/IP on IPv4.
  - [BACnet.Stack.Transport.MstpTransport](BACnet.Stack.Transport.MstpTransport.md): The BACnet transport for BACnet MS/TP (Master-Slave/Token Passing)
on a physical two wire electrical bus system called EIA-485 (RS485).

- BACstack Internals
  - [BACnet.BeamTypes](BACnet.BeamTypes.md): Contains functions to resolve typespecs and types from BEAM bytecode
into a type declaration and functions to validate those types against values.
  - [BACnet.Protocol.ObjectsMacro](BACnet.Protocol.ObjectsMacro.md): This is an internal module for defining BACnet objects.
  - [BACnet.Protocol.Utility](BACnet.Protocol.Utility.md): Various utility functions to help with the BACnet protocol.

  - [BACnet.Protocol.Services.Behaviour](BACnet.Protocol.Services.Behaviour.md): Behaviour for BACnet confirmed and unconfirmed services.
  - [BACnet.Protocol.Services.Common](BACnet.Protocol.Services.Common.md): This module implements the parsing for some services, which are available as both confirmed
and unconfirmed. So instead of implementing the same parsing and encoding twice, this module
is the common ground for these services.

  - [BACnet.Protocol.Services.Protocol](BACnet.Protocol.Services.Protocol.md): This protocol defines the common interface that all BACnet service modules
(both confirmed and unconfirmed) must implement.
  - [BACnet.Stack.BBMD.ClientRef](BACnet.Stack.BBMD.ClientRef.md): Internal module for `BACnet.Stack.BBMD`.
  - [BACnet.Stack.BBMD.Registration](BACnet.Stack.BBMD.Registration.md): Internal module for `BACnet.Stack.BBMD`.
  - [BACnet.Stack.BBMD.State](BACnet.Stack.BBMD.State.md): Internal module for `BACnet.Stack.BBMD`.
  - [BACnet.Stack.Client.ApduTimer](BACnet.Stack.Client.ApduTimer.md): Internal module for `BACnet.Stack.Client`.
  - [BACnet.Stack.Client.ReplyTimer](BACnet.Stack.Client.ReplyTimer.md): Internal module for `BACnet.Stack.Client`.
  - [BACnet.Stack.Client.State](BACnet.Stack.Client.State.md): Internal module for `BACnet.Stack.Client`.
  - [BACnet.Stack.ForeignDevice.Registration](BACnet.Stack.ForeignDevice.Registration.md): Internal module for `BACnet.Stack.ForeignDevice`.
  - [BACnet.Stack.ForeignDevice.State](BACnet.Stack.ForeignDevice.State.md): Internal module for `BACnet.Stack.ForeignDevice`.
  - [BACnet.Stack.Segmentator.Sequence](BACnet.Stack.Segmentator.Sequence.md): Internal module for `BACnet.Stack.Segmentator`.
  - [BACnet.Stack.Segmentator.State](BACnet.Stack.Segmentator.State.md): Internal module for `BACnet.Stack.Segmentator`.
  - [BACnet.Stack.SegmentsStore.Sequence](BACnet.Stack.SegmentsStore.Sequence.md): Internal module for `BACnet.Stack.SegmentsStore`.
  - [BACnet.Stack.SegmentsStore.State](BACnet.Stack.SegmentsStore.State.md): Internal module for `BACnet.Stack.SegmentsStore`.
  - [BACnet.Stack.TrendLogger.Log](BACnet.Stack.TrendLogger.Log.md): Internal module for `BACnet.Stack.TrendLogger`.
  - [BACnet.Stack.TrendLogger.State](BACnet.Stack.TrendLogger.State.md): Internal module for `BACnet.Stack.TrendLogger`.

- Exceptions
  - [BACnet.Protocol.ApplicationTags.Encoding.Error](BACnet.Protocol.ApplicationTags.Encoding.Error.md): Exception raised for low-level application tag encoding/decoding failures.
Usually wrapped by higher-level error types.

  - [BACnet.Protocol.Constants.ConstantError](BACnet.Protocol.Constants.ConstantError.md): Constants exception.

