Welcome to BACØ - BACnet Test Tool
BAC0
BAC0 is an asynchronous Python 3 (3.10 and over) scripting application that uses BACpypes3 to process BACnet™ messages on an IP network. This library brings out simple commands to browse a BACnet network, read properties from BACnet devices, or write to them.
Python is a simple language to learn and a very powerful tool for data processing. Coupled with BACnet, it becomes a great tool to test devices and interact with controllers.
BAC0 takes its name from the default IP port used by BACnet/IP communication which is port 47808. In hexadecimal, it’s written 0xBAC0.
Test driven development (TDD) for DDC controls
BAC0 is made for building automation system (BAS) programmers. Controllers used in this field are commonly called DDC Controllers (Direct Digital Control).
Typical controllers can be programmed in different ways, depending on the manufacturer selling them (block programming, basic “kinda” scripts, C code, etc…). BAC0 is a unified way, using Python language and BACnet/IP communication, to interact with those controllers once their sequence is built.
BAC0 allows users to simply test an application even if sensors are not connected to the controller. Using the out_of_service property, it’s easy to write a value to the input so the controller will think an input is connected.
BAC0 is also a BACnet device
Every instance of BAC0 is a fully feature BACnet device. Add local objects to it, serve them to the network, and interact with other BACnet devices.
Table of contents
- Getting started
- How to start BAC0
- Intro
- How to run async code
- Define a bacnet application
- Dependencies and nice-to-have features
- Asynchronous programming
- Lite vs Complete vs connect vs start
- Use BAC0 on a different subnet (Foreign Device)
- BBMDs vs Foreign Devices (when and how)
- Operate as or with a BBMD using a BDT
- Discovering devices on a network
- How BACnet/IP broadcast works (and why subnets matter)
- Routing Table
- Manually declare a router (use_router)
- Multiple BAC0 instances on one machine
- Ping devices (monitoring feature)
- Read from network
- Write to network
- Time Sync
- How to define a device and interact with points
- Proprietary Objects
- 1) Numeric IDs (no imports)
- 2) Class-based registration (import vendor classes)
- Register vendor classes (bacpypes3 style)
- Proprietary objects
- Proprietary properties
- Vendor context for reads and writes
- Can proprietary objects be added to BAC0.device points?
- How to implement readMultiple with proprietary objects and properties
- How to find proprietary objects and properties
- Histories in BAC0
- TrendLog
- Trends
- Schedules in BAC0
- COV in BAC0
- Callback
- Saving your data
- Database
- Local Objects
- Models
- State Text
- Engineering units
- Logging and debugging