puterjam

Roon Controller

設計創意v1.0.3
作者:puterjam更新於 2026-05-11共 4 個版本 · 最新版本釋出於 2026-01-29roon-controller@clawhub_puterjam/roon-controller
音訊處理#Music

據 AlphaMoat 統計,截至 2026-09,Roon Controller 累計下載 3,047 次、獲 3 個星標,在全部 5,078 個 AI 技能中排名第 3,695 位,在「設計創意」分類(512 個)中排名第 348 位。

累計安裝
121
累計下載
3047
星標
3
全站排名
#3,695
全站前 73% · 「設計創意」前 68%
平台累計安裝累計下載星標評論
ClawHub ↗9929763-
SkillHub ↗12130473—

各平台的計數口徑不同,統計時間不一致。

這個技能是做什麼的

主文列出播放、暫停、切換曲目、獲取當前曲目、列出區域和切換區域等 Python 與命令列示例;首次使用需要在 Roon 中授權擴充套件,執行指令碼的裝置須能透過網路訪問 Roon Core。該技能能控制本地網路中的播放裝置,只應在可信且預期會控制目標 Core 的裝置和網路上使用。授權令牌會儲存在本地檔案中,應限制檔案許可權;停止使用後撤銷 Roon 擴充套件授權,並考慮在虛擬環境中安裝和固定依賴版本。

資料釋出於 2026-10-29

可以用來做什麼

  • 規劃查詢 Roon Core 和選擇播放區域的步驟
  • 設計播放控制與當前曲目查詢的命令流程
  • 審查本地授權令牌、網路訪問和依賴版本的保護方式

什麼時候用

  • 需要透過授權的 Roon Core 管理播放區域或查詢曲目,並確認裝置位於可信網路時

示例提示詞

以下是根據技能文件生成的示例,不代表實際執行結果。

不實際控制播放器,列出初次授權、區域確認和令牌保護的準備事項。
為停止使用 Roon Controller 制定本地授權令牌保護與撤銷擴充套件授權的清理步驟。

月度資料趨勢

累計下載3047
2120261831162026-03 · 累計下載 21892026-05 · 累計下載 25002026-06 · 累計下載 26112026-07 · 累計下載 27972026-08 · 累計下載 28792026-09 · 累計下載 304726-0326-09
星標3
2342026-03 · 星標 32026-05 · 星標 32026-06 · 星標 32026-07 · 星標 32026-08 · 星標 32026-09 · 星標 326-0326-09

2026-09 起統計方法調整:同名技能按作者分別統計,並覆蓋全部技能。圖中虛線為調整前的月份,與之後的資料不直接比較,也不計算跨越調整的增長。

月份累計下載環比星標
2026-093047—3
2026-082879+2.9%3
2026-072797+7.1%3
2026-062611+4.4%3
2026-052500—3
2026-032189—3

SKILL.md 原文

以下是作者釋出的原始檔案,按純文字顯示,本站未做修改或稽核;其中的連結不可點選,命令請核實後再執行。抓取於 2026-10-23。

4.8 KB · ClawHub v1.0.3
---
name: roon-controller
description: Control Roon music player through Roon API with automatic Core discovery and zone filtering. Supports play/pause, next/previous track, and current track query. Automatically finds Muspi zones. Supports Chinese commands.
---

# Roon Control Skill

Control the Roon music player with Chinese command support.

## Quick Start
展開全部(共 204 行)

### Install Dependencies

```bash
pip install roonapi
```

### Usage Examples

```python
from roon_controller import RoonController

# Create controller (token will be saved automatically)
controller = RoonController(verbose=True)

# Play/Pause
result = controller.play_pause()

# Next track
result = controller.next()

# Get current track
track_info = controller.get_current_track()
print(f"Now playing: {track_info['track']}")
```

## Core Features

### 1. Automatic Discovery and Connection
- Automatic Roon Core discovery
- Token automatically saved to `~/clawd/roon_config.json`
- Auto-reconnect after restart, no re-authorization needed

### 2. Zone Selection and Switching
- Supports switching between any available zone
- Selected zone is saved in config and persists across restarts
- If no zone is selected, defaults to zones ending with "[roon]"
- Use `set_zone()` to switch zones programmatically

**Switch Zone**
```python
result = controller.set_zone("Living Room")
# {"success": True, "message": "Switched to zone: Living Room", "zone": "Living Room"}
```

**Get Current Zone**
```python
zone = controller.get_current_zone()
# Returns zone info dict with zone_id and zone_data
```

### 3. Playback Control

**Play**
```python
result = controller.play()
# {"success": True, "message": "Playback started", "zone": "Living Room Muspi"}
```

**Pause**
```python
result = controller.pause()
# {"success": True, "message": "Paused", "zone": "Living Room Muspi"}
```

**Play/Pause Toggle**
```python
result = controller.play_pause()
```

**Previous Track**
```python
result = controller.previous()
```

**Next Track**
```python
result = controller.next()
```

### 4. Get Current Track

```python
track_info = controller.get_current_track()
# Returns:
# {
#   "success": True,
#   "is_playing": True,
#   "zone": "Living Room Muspi",
#   "track": "Bohemian Rhapsody",
#   "artist": "Queen",
#   "album": "A Night at the Opera",
#   "seek_position": 12345,  # milliseconds
#   "length": 354000        # milliseconds
# }
```

### 5. List All Zones

```python
zones = controller.list_zones()
# ["Living Room Muspi", "Kitchen", "Bedroom"]
```

## Command Line Tool

The script can be used as a command line tool:

```bash
# Play
python roon_controller.py play

# Pause
python roon_controller.py pause

# Previous track
python roon_controller.py prev

# Next track
python roon_controller.py next

# View current track
python roon_controller.py status

# List all zones
python roon_controller.py zones -v

# switch zone
python roon_controller.py switch zonename
```

## Chinese Command Support

The skill supports the following Chinese trigger words:

| Command | Meaning | Example |
|---------|---------|---------|
| 音乐播放 / 播放音乐 | Start playback | "音乐播放" |
| 暂停 / 暂停播放 | Pause playback | "暂停一下" |
| 下一曲 / 切歌 | Next track | "下一曲" |
| 上一曲 | Previous track | "上一曲" |
| 当前曲目 / 正在放什么 | View current track | "当前曲目" |

## Error Handling

All methods return a unified dictionary structure:

```python
{
    "success": True/False,
    "message": "Operation result description",
    "zone": "Zone name (optional)"
}
```

### Common Errors

- **Muspi zone not found**: Check if the Roon zone name ends with "muspi"
- **Failed to connect to Roon**: Ensure Roon Core is running and network-accessible
- **Token load failed**: First run requires authorization, ensure authorization completes successfully

## Notes

1. **First Run**: Extension authorization required in Roon, check for the extension authorization prompt in Roon interface
2. **Zone Naming**: Muspi zone names must end with "muspi" (case-insensitive)
3. **Token Storage**: Token is saved in `~/clawd/roon_config.json`, ensure secure file permissions
4. **Network Requirements**: The device running the script must be on the same network as Roon Core

## Technical Details

### Dependencies
- `roonapi>=0.1.6`: Official Roon API Python library

### Token Management
- Token storage path: `~/clawd/roon_config.json`
- Auto-load: Automatically loaded on each startup
- Auto-save: Automatically saved on first authorization or update

### Zone Finding Algorithm
```python
# Find all zones
zones = roon.zones

# Filter zones with muspi suffix
muspi_zones = [
    (zone_id, zone_data)
    for zone_id, zone_data in zones.items()
    if zone_data['display_name'].lower().endswith('muspi')
]

# Use the first matching zone
zone_id, zone_data = muspi_zones[0]
```

「設計創意」分類下的熱門技能

資料月份:2026-09 · 下載/星標/安裝數聚合自公開技能註冊庫(ClawHub、SkillHub),按月更新。口徑說明見資料方法。