API surface
Easy ASO exposes a few HTTP surfaces; pick the one that matches how you deploy.
diy-bacnet-server (BACnet core)
- JSON-RPC (+ OpenAPI/Swagger) on the core container — the source of truth for client BACnet operations.
- Base URL set via
DIY_BACNET_URLon agents (defaulthttp://127.0.0.1:8080in Compose).
Legacy BACnet gateway (easy_aso.gateway.app)
- Small FastAPI app wrapping a direct bacpypes3 client (
/read,/write,/rpm). - Use when you want the old “gateway owns UDP” pattern with REST instead of JSON-RPC.
- Set
BACNET_BACKEND=easy_gatewayon consumers and point them at that service.
Agent runner (easy-aso-agent)
- Installed with the base package (
[project.scripts]inpyproject.toml). easy-aso-agent runloadsEASY_ASO_AGENT_MODULE/EASY_ASO_AGENT_CLASS(or--module/--class) and runs the standardEasyASOasyncio lifecycle.- Use
RpcDockedEasyASO(easy_aso.runtime.rpc_docked) when BACnet I/O should go throughJsonRpcBacnetClient(no second UDP47808bind). See Multi-agent (RPC-docked).
Supervisor (easy_aso.supervisor.app)
- FastAPI app for platform-style configuration:
- CRUD devices and points (SQLite).
- Latest values + per-device health from asyncio polling.
- Hot reload of poll tasks when config changes (no full restart).
- Default DB path:
SUPERVISOR_DB_PATH(see Supervisor workflows).
Design cue
Operational BACnet → diy-bacnet-server. Application config + snapshots → supervisor. Control algorithms → EasyASO subclasses (anywhere they can get a BacnetClient).