Network Radio
SkillDev toolsUse this skill when the user asks to play, switch, adjust volume, query status, or stop a network radio station.
Use Network Radio in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Network Radio and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Network Radio skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
ESP-Claw Skills Lab
What this skill tells your AI
The instructions your AI receives, as published by espressif/esp-claw-skills-lab in skills/network_radio/SKILL.md and read by Ahel’s review.
Use this skill when the user asks to play, switch, adjust volume, query status, or stop a network radio station.
Always call the synchronous control script. It starts and controls a background radio player daemon when needed. Do not call the daemon script directly.
The radio uses the board audio output named audio_dac by default.
Available Stations
- 崂山921
- 长沙101.7城市之声
- 上海经典947
- 湖北经典音乐广播
- 成都年代音乐怀旧好声音
- 山东经典音乐广播
- 杭州90.7
- 天津TIKI 100.5
Control Args Schema
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": ["play", "switch", "volume", "stop", "status"],
"default": "status"
},
"station": {
"type": "string",
"description": "Station title or a distinctive title fragment. Use one of the available station names unless the user provides a direct URL."
},
"url": {
"type": "string",
"description": "Optional direct http or https MP3 stream URL. If set, it overrides station."
},
"title": {
"type": "string",
"description": "Display title used when url is provided directly."
},
"volume": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"codec_name": {
"type": "string",
"default": "audio_dac",
"description": "Board manager audio output codec name."
},
"wait_ms": {
"type": "integer",
"default": 8000,
"minimum": 1000
}
},
"required": ["action"]
}
Tool Call Inputs
Play 上海经典947:
{
"path": "{CUR_SKILL_DIR}/scripts/control_network_radio.lua",
"args": {
"action": "play",
"station": "上海经典947",
"volume": 70
},
"timeout_ms": 12000
}
Switch to 杭州90.7 without changing volume:
{
"path": "{CUR_SKILL_DIR}/scripts/control_network_radio.lua",
"args": {
"action": "switch",
"station": "杭州90.7"
},
"timeout_ms": 12000
}
Set volume to 35 without restarting playback:
{
"path": "{CUR_SKILL_DIR}/scripts/control_network_radio.lua",
"args": {
"action": "volume",
"volume": 35
},
"timeout_ms": 12000
}
Play a direct stream URL:
{
"path": "{CUR_SKILL_DIR}/scripts/control_network_radio.lua",
"args": {
"action": "play",
"title": "自定义电台",
"url": "http://example.com/live.mp3",
"volume": 70
},
"timeout_ms": 12000
}
Query current status:
{
"path": "{CUR_SKILL_DIR}/scripts/control_network_radio.lua",
"args": {
"action": "status"
},
"timeout_ms": 12000
}
Stop the radio:
{
"path": "{CUR_SKILL_DIR}/scripts/control_network_radio.lua",
"args": {
"action": "stop"
},
"timeout_ms": 12000
}
Behavior
playstarts the background daemon when needed, opensaudio_dac, and plays the selected station.switchreuses the daemon, stops the current stream, and starts the new station.volumecallsoutput:set_volume()in the daemon and does not restart playback.statusreads the last daemon status and does not start playback.stopsends a stop command to the daemon; the daemon stops playback, closes audio resources, records the radio as stopped, and exits.- The daemon job name is
network_radio_playerand its exclusive group isaudio_output. - Runtime commands use
thread.syncqueues namednetwork_radio_cmdandnetwork_radio_reply; the last status snapshot is stored in RAMFS under/ramfs/network_radio/status.json.
Recommended Flow
- For play or switch requests, choose the closest station from
Available Stations. - If no close match exists and the user did not provide a URL, ask the user to choose a station.
- Always run
{CUR_SKILL_DIR}/scripts/control_network_radio.luawithlua_run_scriptandtimeout_ms: 12000. - Use
action: "play"when starting radio from idle or when the user simply says to play a station. - Use
action: "switch"when the user asks to change station while radio may already be playing. - Use
action: "volume"when the user asks to set, raise, lower, or adjust volume. Pass an absolutevolumevalue from 0 to 100. - Use
action: "status"when the user asks what is playing or current volume. - Use
action: "stop"when the user asks to stop, pause, cancel, quit, close, or turn off the radio. - Report the script output directly. If the script returns an error, report that error directly to the user.
Signals
- GitHub stars
- 34
- Forks
- 17
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
network-radio- Source
- github.com/espressif/esp-claw-skills-lab
github.com/espressif/esp-claw-skills-lab