Automated Supervisory Optimization (ASO) for BACnet building automation systems (BAS) and HVAC supervisory control
Project description
Easy ASO
Asyncio-first supervisory layer for BACnet building automation — think lightweight BAS orchestration at the IoT edge: one BACnet/IP core, many small agents, optional REST/JSON-RPC, and room to grow toward MQTT and optimization loops without the weight of a full platform stack.
Documentation · diy-bacnet-server (BACnet core & discovery) · MIT License
Why Easy ASO?
- Edge-first: Docker Compose brings up a singleton BACnet core (UDP
47808) plus independent algorithm containers — same idea as a slimmed-down VOLTTRON-style deployment, tuned for gateways and Raspberry Pi–class hardware. - Event-driven control: Subclass
EasyASOand implementon_start→on_step→on_stopfor read/write cycles, kill-switch behavior, and clean override release. - Platform driver (supervisor): SQLite-backed devices/points, asyncio polling, hot reload, and a FastAPI surface — inspired by a platform driver mental model, without pretending to be VOLTTRON. See Supervisor workflows.
Quick start (Docker, IoT edge)
BACnet/IP and discovery (Who-Is, RPM, read/write, priority array, point discovery, etc.) are implemented by diy-bacnet-server — this repo vendors it under vendor/diy-bacnet-server/ and talks to it over JSON-RPC by default.
git clone https://github.com/bbartling/easy-aso.git
cd easy-aso
docker compose up -d --build
- Swagger (BACnet core):
http://localhost:8080/docs - Tune
BACNET_CORE_ARGS,DEVICE_INSTANCE, and agent env vars indocker-compose.ymlfor your site.
Agents use BACNET_BACKEND=diy_jsonrpc and DIY_BACNET_URL (see BACnet edge).
Local development
pip install -e ".[dev]"
pytest tests/test_abc.py tests/test_supervisor.py -v
Optional Docker integration test (two simulated BACnet peers):
pytest tests/test_bacnet.py -v
Documentation site
Full guides live in docs/. On master (same as open-fdd workflows), Actions run docs-pages.yml (Jekyll → Pages — set Settings → Pages → Source: GitHub Actions once), docs-pdf.yml (PDF + text bundle via PR), and tags trigger publish-pypi.yml (Python 3.14 like open-fdd engine publish; upload easy-aso to PyPI on tags v*). Maintainer notes: PyPI publishing.
Build locally (Ruby + Bundler):
cd docs
bundle install
bundle exec jekyll serve --livereload
Browse http://127.0.0.1:4000/easy-aso/.
License
MIT — see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file easy_aso-0.1.3.tar.gz.
File metadata
- Download URL: easy_aso-0.1.3.tar.gz
- Upload date:
- Size: 46.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6c350e5540bd7d2a0c813a4261d08f8f479c03666829e22059a67c426fc9f49
|
|
| MD5 |
338a203a74d5de0af1e12100d9de2e0c
|
|
| BLAKE2b-256 |
1d9c0f715abeb10012089e3ed524825f1e65d85972df385e773ea1424e2879b4
|
Provenance
The following attestation bundles were made for easy_aso-0.1.3.tar.gz:
Publisher:
publish-pypi.yml on bbartling/easy-aso
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
easy_aso-0.1.3.tar.gz -
Subject digest:
f6c350e5540bd7d2a0c813a4261d08f8f479c03666829e22059a67c426fc9f49 - Sigstore transparency entry: 1287059157
- Sigstore integration time:
-
Permalink:
bbartling/easy-aso@d62c9facb10194c5e6baa546e656fc19ea9986a8 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/bbartling
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@d62c9facb10194c5e6baa546e656fc19ea9986a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file easy_aso-0.1.3-py3-none-any.whl.
File metadata
- Download URL: easy_aso-0.1.3-py3-none-any.whl
- Upload date:
- Size: 34.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f77bb691ed413ce4de70c3fdc7f0223fdb36abc79846a2b0c9ccce3faced365f
|
|
| MD5 |
4308d8da94d116a07df2cb6fb9bb1f33
|
|
| BLAKE2b-256 |
009e8d49e9be033977027450af8688a7dcb1734aae16a915d84e861ba0fd07ee
|
Provenance
The following attestation bundles were made for easy_aso-0.1.3-py3-none-any.whl:
Publisher:
publish-pypi.yml on bbartling/easy-aso
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
easy_aso-0.1.3-py3-none-any.whl -
Subject digest:
f77bb691ed413ce4de70c3fdc7f0223fdb36abc79846a2b0c9ccce3faced365f - Sigstore transparency entry: 1287059386
- Sigstore integration time:
-
Permalink:
bbartling/easy-aso@d62c9facb10194c5e6baa546e656fc19ea9986a8 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/bbartling
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@d62c9facb10194c5e6baa546e656fc19ea9986a8 -
Trigger Event:
push
-
Statement type: