Modules
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.
Contains functions to resolve typespecs and types from BEAM bytecode into a type declaration and functions to validate those types against values.
This module is mostly used for basic decoding of BACnet frames (Protocol Data Units - PDU).
This module provides decoding of Application Data Units (APDU).
Abort APDUs abruptly terminate an ongoing confirmed transaction.
Complex ACK APDUs return successful results that contain data.
Confirmed Service Request APDUs carry service invocations that require a reply.
Error APDUs report that a confirmed service request could not be completed.
Reject APDUs are sent when a confirmed service request cannot even be interpreted because of a protocol or syntactical error.
Segment ACK APDUs are used during segmented data transfer.
Simple ACK APDUs are the minimal successful reply to a confirmed service.
Unconfirmed Service Request APDUs carry one-way service invocations.
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.
Represents one property entry inside an Access Specification.
An Accumulator Record captures a single sample from an Accumulator object at a particular point in time.
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.
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.
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.
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.
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.
Helper types and functions for working with the decoded form of application
tags ({:null, nil}, {:unsigned_integer, 42}, {:constructed, {tag, value, len}}, etc.).
Exception raised for low-level application tag encoding/decoding failures. Usually wrapped by higher-level error types.
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.
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.
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).
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.).
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.
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.
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.
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.
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).
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.
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.
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 constants.
Constants exception.
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.
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.
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).
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.
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 object types need to be supported by the device, in order for a BACnet client to be able to handle them.
BACnet Services need to be supported by the device, in order for a BACnet client to be able to invoke them.
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.
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.
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 has various different types of event algorithms. Each of them is implemented by a different module.
Implements the BACnet event algorithm BufferReady.
Implements the BACnet event algorithm ChangeOfBitstring.
Implements the BACnet event algorithm ChangeOfCharacterString.
Implements the BACnet event algorithm ChangeOfLifeSafety.
Implements the BACnet event algorithm ChangeOfState.
Implements the BACnet event algorithm ChangeOfStatusFlags.
Implements the BACnet event algorithm ChangeOfValue.
Implements the BACnet event algorithm CommandFailure.
Implements the BACnet event algorithm ComplexEventType.
Implements the BACnet event algorithm DoubleOutOfRange.
Implements the BACnet event algorithm Extended.
Implements the BACnet event algorithm FloatingLimit.
Implements the BACnet event algorithm None.
Implements the BACnet event algorithm OutOfRange.
Implements the BACnet event algorithm SignedOutOfRange.
Implements the BACnet event algorithm UnsignedOutOfRange.
Implements the BACnet event algorithm UnsignedRange.
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.
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.
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 event parameters describe the specific configuration and thresholds
used by each event algorithm (see BACnet.Protocol.EventAlgorithms).
Represents the BACnet event algorithm BufferReady parameters.
Represents the BACnet event algorithm ChangeOfBitstring parameters.
Represents the BACnet event algorithm ChangeOfCharacterString parameters.
Represents the BACnet event algorithm ChangeOfLifeSafety parameters.
Represents the BACnet event algorithm ChangeOfState parameters.
Represents the BACnet event algorithm ChangeOfStatusFlags parameters.
Represents the BACnet event algorithm ChangeOfValue parameters.
Represents the BACnet event algorithm CommandFailure parameters.
Represents the BACnet event algorithm DoubleOutOfRange parameters.
Represents the BACnet event algorithm Extended parameters.
Represents the BACnet event algorithm FloatingLimit parameters.
Represents the BACnet event algorithm None parameters.
Represents the BACnet event algorithm OutOfRange parameters.
Represents the BACnet event algorithm SignedOutOfRange parameters.
Represents the BACnet event algorithm UnsignedOutOfRange parameters.
Represents the BACnet event algorithm UnsignedRange parameters.
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.
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 has various different types of fault algorithms. Each of them is implemented by a different module.
Represents the BACnet fault algorithm FaultCharacterString.
Represents the BACnet fault algorithm FaultExtended.
Represents the BACnet fault algorithm FaultLifeSafety.
Represents the BACnet fault algorithm FaultState.
Represents the BACnet fault algorithm FaultStatusFlags.
BACnet fault parameters configure the conditions under which an object should report a FAULT event state (as opposed to NORMAL or OFFNORMAL).
Represents the BACnet fault algorithm FaultCharacterString parameters.
Represents the BACnet fault algorithm FaultExtended parameters.
Represents the BACnet fault algorithm FaultLifeSafety parameters.
Represents the BACnet fault algorithm FaultState parameters.
Represents the BACnet fault algorithm FaultStatusFlags parameters.
Represents the BACnet fault algorithm None parameters.
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.
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.
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
This module is used to represent a segmented incomplete APDU.
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.).
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.
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.
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).
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.
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).
Network layer messages are used for prividing the basis for router auto-configuration, router maintenance and network layer congestion control.
The notification class priority BACnet array is used to convey the priority used for event notifications. A lower number indicates a higher priority.
BACnet notification parameters define the additional data that is included in ConfirmedEventNotification and UnconfirmedEventNotification messages.
Represents the BACnet event algorithm BufferReady notification parameters.
Represents the BACnet event algorithm ChangeOfBitstring notification parameters.
Represents the BACnet event algorithm ChangeOfCharacterString notification parameters.
Represents the BACnet event algorithm ChangeOfLifeSafety notification parameters.
Represents the BACnet event algorithm ChangeOfReliability notification parameters.
Represents the BACnet event algorithm ChangeOfState notification parameters.
Represents the BACnet event algorithm ChangeOfStatusFlags notification parameters.
Represents the BACnet event algorithm ChangeOfValue notification parameters.
Represents the BACnet event algorithm CommandFailure notification parameters.
Represents the BACnet event algorithm ComplexEventType notification parameters.
Represents the BACnet event algorithm DoubleOutOfRange notification parameters.
Represents the BACnet event algorithm Extended notification parameters.
Represents the BACnet event algorithm FloatingLimit notification parameters.
Represents the BACnet event algorithm OutOfRange notification parameters.
Represents the BACnet event algorithm SignedOutOfRange notification parameters.
Represents the BACnet event algorithm UnsignedOutOfRange notification parameters.
Represents the BACnet event algorithm UnsignedRange notification parameters.
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).
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
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.
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.
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.
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).
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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".
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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
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.
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.
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).
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.
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.
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).
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.
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.
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.
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).
This is an internal module for defining BACnet objects.
This module offers utility functions that work on all object types.
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.
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.
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.
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.).
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.
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).
Represents the result of reading one specific property as part of a Read Property Multiple response.
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).
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 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.
A BACnetRouterEntry describes one first-hop router that can be used to reach a remote BACnet network.
The Atomic Read File Acknowledgment is the response to a successful Atomic Read File service request.
The Atomic Write File Acknowledgment is the response to a successful Atomic Write File service request.
The Confirmed Private Transfer Acknowledgment is the response to a successful Confirmed Private Transfer service request.
The Create Object Acknowledgment is returned by a server after successfully creating a new object in response to a Create Object service request.
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.
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.
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.
The Read Property Acknowledgment is the successful response returned when a client issues a Read Property service request.
The Read Property Multiple Acknowledgment is the response to a successful Read Property Multiple service request.
The Read Range Acknowledgment is the response to a successful Read Range service request against a Trend Log, Event Log, or other log object.
This module represents the BACnet Acknowledge Alarm service.
This module represents the BACnet Add List Element service.
This module represents the BACnet Atomic Read File service.
This module represents the BACnet Atomic Write File service.
Behaviour for BACnet confirmed and unconfirmed services.
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.
This module represents the BACnet Confirmed COV Notification service.
This module represents the BACnet Confirmed Event Notification service.
This module represents the BACnet Confirmed Private Transfer service.
This module represents the BACnet Confirmed Text Message service.
This module represents the BACnet Create Object service.
This module represents the BACnet Delete Object service.
This module represents the BACnet Device Communication Control service.
The Add List Element Error is returned when an Add List Element service request fails.
The Confirmed Private Transfer Error is returned when a Confirmed Private Transfer service request fails.
The Create Object Error is returned when a Create Object service request fails.
The Delete Object Error is returned when a Delete Object service request fails.
The Remove List Element Error is returned when a Remove List Element service request fails.
The Write Property Multiple Error is returned when a Write Property Multiple service request fails.
This module represents the BACnet Get Alarm Summary service.
This module represents the BACnet Get Enrollment Summary service.
This module represents the BACnet Get Event Information service.
This module represents the BACnet I-Am service.
This module represents the BACnet I-Have service.
This module represents the BACnet Life Safety Operation service.
This protocol defines the common interface that all BACnet service modules (both confirmed and unconfirmed) must implement.
This module represents the BACnet Read Property service.
This module represents the BACnet Read Property Multiple service.
This module represents the BACnet Read Range service.
This module represents the BACnet Reinitialize Device service.
This module represents the BACnet Remove List Element service.
This module represents the BACnet Subscribe COV service.
This module represents the BACnet Subscribe COV Property service.
This module represents the BACnet Time Synchronization service.
This module represents the BACnet Unconfirmed COV Notification service (Change Of Value).
This module represents the BACnet Unconfirmed Event Notification service.
This module represents the BACnet Unconfirmed Private Transfer service.
This module represents the BACnet Unconfirmed Text Message service.
This module represents the BACnet UTC Time Synchronization service.
This module represents the BACnet Who-Has service.
This module represents the BACnet Who-Is service.
This module represents the BACnet Write Group service.
This module represents the BACnet Write Property service.
This module represents the BACnet Write Property Multiple service.
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.).
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 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.
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".
Various utility functions to help with the BACnet protocol.
A BACnetVMACEntry maps a virtual MAC address (VMAC) to the native MAC address used by the underlying data link.
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".
The BBMD module is responsible for acting as a BACnet/IPv4 Broadcast Management Device (BBMD).
Internal module for BACnet.Stack.BBMD.
Internal module for BACnet.Stack.BBMD.
Internal module for BACnet.Stack.BBMD.
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.
Internal module for BACnet.Stack.Client.
Internal module for BACnet.Stack.Client.
Internal module for BACnet.Stack.Client.
BACnet stack client helper functions for executing commands/queries.
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.
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).
Internal module for BACnet.Stack.ForeignDevice.
Internal module for BACnet.Stack.ForeignDevice.
Simple log buffer implementation for event and trend logs. The type of the item is not enforced.
A behaviour for log buffer implementations, most notably for the BACnet.Stack.TrendLogger module.
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.
Internal module for BACnet.Stack.Segmentator.
Internal module for BACnet.Stack.Segmentator.
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.
Internal module for BACnet.Stack.SegmentsStore.
Internal module for BACnet.Stack.SegmentsStore.
Contains functions for easier interaction with telemetry.
The BACnet transport for BACnet/Ethernet.
The BACnet transport for BACnet/IP on IPv4.
The BACnet transport for BACnet MS/TP (Master-Slave/Token Passing) on a physical two wire electrical bus system called EIA-485 (RS485).
Defines the BACnet transport protocol behaviour.
The Trend Logger module is responsible for handling event and trend logging and keeping a log buffer.
Internal module for BACnet.Stack.TrendLogger.
Internal module for BACnet.Stack.TrendLogger.