The idea I cannot shake is why is there not a free building automation system (BAS) supervisory framework for starters and why not make it fun?!
MIT License
Welcome to Easy ASO, the ultimate command tool for Automated Supervisory Optimization (ASO) of BACnet systems. Much like commanding units in a strategy game, Easy ASO puts you at the helm of your building systems, empowering you to optimize performance, reduce energy consumption, and maintain comfort with ease.
With intuitive controls and streamlined BACnet property reads and writes, Easy ASO is your base of operations. By automating complex routines, you can deploy your control strategies with precision and efficiency, much like bot scripting in the gaming industry. The best part? The battle for energy efficiency doesn't require long scriptsbasic examples are always under 100 lines of code!
Every bot you create to control BACnet systems follows this simple on_start
and on_step
structure, ready to deploy your strategy in real-time, very inspired by the StarCraft II API Client for Python 3:
class CustomHvacBot(EasyASO):
async def on_start(self):
# Custom start logic - BACnet read request
sensor = await self.bacnet_read(BACNET_ADDR, BACNET_OBJ_ID)
print("CustomBot is deploying! Read in some value")
async def on_step(self):
# Custom step logic - BACnet write request
sensor_value_best = sensor + 5.0
await self.bacnet_write(BACNET_ADDR, BACNET_OBJ_ID, sensor_value_best)
print("Executing step actions... The system is being optimized!")
await asyncio.sleep(60)
async def on_stop(self):
# Custom stop logic - BACnet release request
await self.bacnet_write(BACNET_ADDR, BACNET_OBJ_ID, 'null')
print("Executing stop actions... The system is released back to normal!")
** WARNING** - This repo is new and under construction, so some features are not fully developed yet but stay tuned!
tester.py
The tester.py
script, located in the scripts directory, provides a utility for exploring a remote BACnet site via the bacpypes3 console.
This tool is designed to assist in the setup and configuration of the easy-aso
project, streamlining the integration process.
For detailed information and instructions on using the Tester.py
script, please refer to the setup_scripts
directory README for more information.
read_property
)write_property
)read_property_multiple
)read_property
with priority-array
)who-is
)who-has
)do_point_discovery
)who_is_router_to_network
)Why can't a BAS be free?
Can ASO be easy?
Easy-aso always operates behind the firewall and can operate with an IoT integration to the building systems.
Easy-aso can also operate just fine without an IoT integration to the building systems which would just be traditional operations (OT) technology systems that do not have access to the internet.
Follow the instructions below to set up the easy-aso
project on your local Linux machine.
Until the project is available on PyPI, you can install it locally by following these steps.
After the scripts are thoroughly tested and commissioned, they can be run long-term in a Docker container.
See the sub-directory docker_setup
for more information.
First, clone the easy-aso
repository to your local machine:
git clone https://github.com/bbartling/easy-aso
Navigate into the project directory and install it using pip
. This will make the easy-aso
package available in your Python environment.
cd easy-aso
pip install .
examples
directory for sample applications.easy-aso
API documentation README for method call specifics when creating apps.tester.py
in a sandbox environment. Note that both require two Linux devices I use an Ubuntu VM and a Raspberry Pi for the fake BACnet device, which acts as another BACnet device on the LAN.Easy ASO is designed as an operations technology (OT) application with no built-in cloud connectivity, but it is fully capable of anything programmed in Python. Any implementation of cloud connectivity for this app is the responsibility of the user. It is crucial to understand the cybersecurity implications of sending bi-directional signals to building systems.
Security Best Practices:
PRs, git issues, and discussions are highly encouraged! Please reference the README for more information.
MIT License Copyright 2024 Ben Bartling
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.