Skip to main content

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 EasyASO and implement on_starton_stepon_stop for 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 in docker-compose.yml for 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

easy_aso-0.1.3.tar.gz (46.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

easy_aso-0.1.3-py3-none-any.whl (34.1 kB view details)

Uploaded Python 3

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

Hashes for easy_aso-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f6c350e5540bd7d2a0c813a4261d08f8f479c03666829e22059a67c426fc9f49
MD5 338a203a74d5de0af1e12100d9de2e0c
BLAKE2b-256 1d9c0f715abeb10012089e3ed524825f1e65d85972df385e773ea1424e2879b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for easy_aso-0.1.3.tar.gz:

Publisher: publish-pypi.yml on bbartling/easy-aso

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for easy_aso-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f77bb691ed413ce4de70c3fdc7f0223fdb36abc79846a2b0c9ccce3faced365f
MD5 4308d8da94d116a07df2cb6fb9bb1f33
BLAKE2b-256 009e8d49e9be033977027450af8688a7dcb1734aae16a915d84e861ba0fd07ee

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page