Skip to main content

Easy ASO

Discord CI MIT License Development Status Python PyPI

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, JSON-RPC, and room to grow without a full platform stack.


Install from PyPI

pip install easy-aso

Online Documentation

This application is part of a broader ecosystem that together forms the Open FDD AFDD Stack, enabling a fully orchestrated, edge-deployable analytics and optimization platform for building automation systems.

  • 🔗 DIY BACnet Server Lightweight BACnet server with JSON-RPC and MQTT support for IoT integrations. Documentation · GitHub

  • 📖 Open FDD AFDD Stack Full AFDD framework with Docker bootstrap, API services, drivers, and React web UI. Documentation · GitHub

  • 📘 Open FDD Fault Detection Engine Core rules engine with RuleRunner, YAML-based fault logic, and pandas workflows. Documentation · GitHub · PyPI

  • ⚙️ easy-aso Framework Lightweight framework for Automated Supervisory Optimization (ASO) algorithms at the IoT edge. Documentation · GitHub · PyPI


ASO made easy

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!")

Local security bootstrap

Generate local bearer tokens (diy JSON-RPC + supervisor API):

./scripts/bootstrap-secrets.sh
set -a && . ./.env.local && set +a
.\scripts\bootstrap-secrets.ps1
Get-Content .env.local | ForEach-Object { if ($_ -match '^(.*?)=(.*)$') { Set-Item -Path Env:\$($matches[1]) -Value $matches[2] } }

Then run your stack with:

  • BACNET_RPC_API_KEY for outbound calls to diy-bacnet-server JSON-RPC
  • SUPERVISOR_API_KEY for optional inbound auth on easy_aso.supervisor.app

Optional supervisor (Open-FDD-friendly default port):

pip install "easy-aso[platform]"
easy-aso-supervisor --host 0.0.0.0 --port 18090

License

MIT

Metadata

Release files for easy-aso 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for easy-aso 0.1.8
File Size Uploaded Provenance Actions
easy_aso-0.1.8.tar.gz 61.0 kB With provenance Details for easy_aso-0.1.8.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for easy-aso 0.1.8
File Interpreter ABI Platform Actions
easy_aso-0.1.8-py3-none-any.whl Python 3 none any Details for easy_aso-0.1.8-py3-none-any.whl

Total release size: 105.6 kB

Release files / easy_aso-0.1.8.tar.gz

Download URL easy_aso-0.1.8.tar.gz
Size 61.0 kB
Tags Source
SHA-256 checksum
How to use checksums
91747a8a9036bc9e1b308a15b17a37613ec09f903c4ae969a2e600722674538b
BLAKE2b-256 checksum
How to use checksums
ce4ea59674381c1307503767abbfa6f5a1c9f57611dd5800b692f06bb3f2e975
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 7, 2026.

Transparency log

Release files / easy_aso-0.1.8-py3-none-any.whl

Download URL easy_aso-0.1.8-py3-none-any.whl
Size 44.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a466b618e2b0a54e4e900fb1d6b5277fb17445264d611ed51527c1cbb5300e95
BLAKE2b-256 checksum
How to use checksums
394187e10c3107090e9d09965b69dad4632c53b01edafcfd6697e0b0c572fd62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 7, 2026.

Transparency log

Security for easy-aso 0.1.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for easy_aso-0.1.8.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 7, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page