Easy-to-follow Automated Supervisory Optimization (ASO) event-driven logic combined with an asyncio-first supervisory layer for BACnet building automation — lightweight BAS orchestration at the IoT edge with one BACnet/IP core, small agents, optional REST/JSON-RPC, and room to grow without a full platform stack.
pip install easy-aso- Docs: bbartling.github.io/easy-aso
- BACnet core: diy-bacnet-server
Subclass EasyASO and implement on_start, on_step, and on_stop — same pattern for reads, writes, and releasing overrides:
import asyncio
from easy_aso import EasyASO
class CustomHvacAso(EasyASO):
async def on_start(self):
print("Custom ASO is deploying! Let's do something!")
async def on_step(self):
# BACnet read request
sensor = await self.bacnet_read("192.168.0.122", "analog-input,1")
# Custom step logic - BACnet write request
override_valve = sensor + 5.0
await self.bacnet_write("192.168.0.122", "analog-output,2", override_valve)
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("192.168.0.122", "analog-output,2", "null")
print("Executing stop actions... The system is released back to normal!")MIT — see LICENSE.