Install
openclaw skills install asl-controlMonitor and control AllStar Link amateur radio nodes via REST API
openclaw skills install asl-controlControl and monitor your AllStar Link node through the ASL Agent REST API.
This skill is a client. It talks to an ASL3 agent backend that must be running independently on a Raspberry Pi (or any host reachable over your network).
You need:
asl-agent FastAPI service (see backend/ in this repo for the server code)config.yaml (at /opt/asl-agent/config.yaml) contains your API key and node numberEnvironment variables (set in your secrets file, e.g. ~/.config/secrets/api-keys.env):
ASL_PI_IP -- IP address of the Pi (Tailscale IP preferred, works from anywhere)ASL_API_KEY -- Bearer token from the Pi's config.yamlASL_API_BASE -- (optional) override the full base URL if you're not on port 8073. Format: http://host:portASL_STATE_DIR -- (optional) override where favorites/net state files are stored. Default: ~/.openclaw/state/asl-control/All commands go through the Python client. Always source your secrets first:
source ~/.config/secrets/api-keys.env
python3 {baseDir}/scripts/asl-tool.py <command> [flags]
Every command supports --out json (default, machine-readable) or --out text (human-readable one-liner).
# Status & monitoring
python3 {baseDir}/scripts/asl-tool.py status --out text
python3 {baseDir}/scripts/asl-tool.py nodes --out text
python3 {baseDir}/scripts/asl-tool.py report --out text
python3 {baseDir}/scripts/asl-tool.py audit --lines 20
# Connect / disconnect
python3 {baseDir}/scripts/asl-tool.py connect 55553 --out text
python3 {baseDir}/scripts/asl-tool.py connect 55553 --monitor-only --out text
python3 {baseDir}/scripts/asl-tool.py disconnect 55553 --out text
# Favorites
python3 {baseDir}/scripts/asl-tool.py favorites list
python3 {baseDir}/scripts/asl-tool.py favorites set mynet 55553
python3 {baseDir}/scripts/asl-tool.py favorites remove mynet
python3 {baseDir}/scripts/asl-tool.py connect-fav mynet --out text
# Net profiles (timed sessions, auto-disconnect default)
python3 {baseDir}/scripts/asl-tool.py net list
python3 {baseDir}/scripts/asl-tool.py net set ares 55553 --duration-minutes 90
python3 {baseDir}/scripts/asl-tool.py net start ares --out text
python3 {baseDir}/scripts/asl-tool.py net status --out text
python3 {baseDir}/scripts/asl-tool.py net tick --out text
python3 {baseDir}/scripts/asl-tool.py net stop --out text
python3 {baseDir}/scripts/asl-tool.py net remove ares
# Watch (JSON-line event stream)
python3 {baseDir}/scripts/asl-tool.py watch --interval 5 --emit-initial
Favorites and net session state live outside the repo, so they survive updates:
~/.openclaw/state/asl-control/favorites.json~/.openclaw/state/asl-control/net-profiles.json~/.openclaw/state/asl-control/net-session.jsonAuto-disconnect only fires when net tick runs. Wire it to cron for enforcement:
* * * * * /bin/bash -c 'source ~/.config/secrets/api-keys.env && python3 /path/to/asl-tool.py net tick --out text >> ~/.openclaw/state/asl-control/tick.log 2>&1'
When the user asks in natural language, translate to the Python client:
asl-tool.py report --out textasl-tool.py nodes --out textasl-tool.py connect 55553 --out textasl-tool.py connect 55553 --monitor-only --out textasl-tool.py connect-fav "<name>" --out textasl-tool.py disconnect 55553 --out textasl-tool.py favorites list --out textasl-tool.py net start <name> --out textasl-tool.py net status --out textasl-tool.py audit --lines 20 --out textASL_PI_IP (works from anywhere on the mesh)/opt/asl-agent/audit.log