Multi-agent deployments (RPC-docked EasyASO)

When you run more than one supervisory loop, keep one BACnet/IP listener on UDP 47808 (typically diy-bacnet-server in Docker) and run each custom algorithm in its own process or container.

This package ships:

Piece Location
RPC-docked base class easy_aso.runtime.rpc_docked.RpcDockedEasyASO
Env → config helper easy_aso.runtime.env.load_rpc_config_from_env, BacnetRpcConfig
Programmatic runner easy_aso.runtime.runner.run_agent_class
Console entry point easy-aso-agent run (see --help)
Default sample agent easy_aso.runtime.sample_agent.SampleAgent

Why not plain EasyASO.run() in every container?

EasyASO with a local BACnet stack calls Application.from_args and expects to participate on the wire. On a single host, only one process should bind 47808. RPC-docked agents call JsonRpcBacnetClient instead so all I/O goes through the gateway’s JSON-RPC surface.

Environment variables

Same names as the supervisor and common demo stacks:

Variable Role
SUPERVISOR_BACNET_RPC_URL Base URL (default http://127.0.0.1:8080)
SUPERVISOR_BACNET_RPC_ENTRYPOINT Path prefix (default /api)
BACNET_RPC_API_KEY Optional Bearer token for RPC

Agent runner (easy-aso-agent run or run_agent_class):

Variable Role
EASY_ASO_AGENT_MODULE Dotted import path (default easy_aso.runtime.sample_agent)
EASY_ASO_AGENT_CLASS Class name (default SampleAgent)
EASY_ASO_STEP_SEC Sleep between steps in the bundled sample (seconds; minimum sleep clamp in sample is 0.05 s)
EASY_ASO_DEMO_READ_DEVICE / EASY_ASO_DEMO_READ_OBJECT Optional demo read each step

JsonRpcBacnetClient addressing

For diy-bacnet-server, the address argument to read/write/RPM is a device instance string (see the client docstring), not necessarily an IP address.

Example Docker CMD

CMD ["easy-aso-agent", "run"]

Override module/class via EASY_ASO_AGENT_MODULE and EASY_ASO_AGENT_CLASS in the container environment.

See also


MIT · easy-aso · BACnet edge + asyncio supervisor

This site uses Just the Docs, a documentation theme for Jekyll.