ClawSkills logoClawSkills

Roon Controller

通过 Roon API 控制 Roon 音乐播放器,具有自动 Core 发现和区域过滤功能。支持播放/暂停、上一首/下一首曲目以及当前曲目查询。

介绍

# Roon Control Skill

通过中文命令支持控制 Roon 音乐播放器。

## 快速开始

### 安装依赖

```bash pip install roonapi ```

### 使用示例

```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']}") ```

## 核心功能

### 1. 自动发现和连接 - 自动发现 Roon Core - Token 自动保存到 `~/clawd/roon_config.json` - 重启后自动重连,无需重新授权

### 2. 区域选择和切换 - 支持切换任何可用区域 - 选定的区域保存在配置中,并在重启后保留 - 如果未选择区域,默认为以 "[roon]" 结尾的区域 - 使用 `set_zone()` 通过编程方式切换区域

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

**获取当前区域** ```python zone = controller.get_current_zone() # Returns zone info dict with zone_id and zone_data ```

### 3. 播放控制

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

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

**播放/暂停切换** ```python result = controller.play_pause() ```

**上一曲** ```python result = controller.previous() ```

**下一曲** ```python result = controller.next() ```

### 4. 获取当前曲目

```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. 列出所有区域

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

## 命令行工具

该脚本可用作命令行工具:

```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 ```

## 中文命令支持

该技能支持以下中文触发词:

| 命令 | 含义 | 示例 | |---------|---------|---------| | 音乐播放 / 播放音乐 | 开始播放 | "音乐播放" | | 暂停 / 暂停播放 | 暂停播放 | "暂停一下" | | 下一曲 / 切歌 | 下一首 | "下一曲" | | 上一曲 | 上一首 | "上一曲" | | 当前曲目 / 正在放什么 | 查看当前曲目 | "当前曲目" |

## 错误处理

所有方法返回统一的字典结构:

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

### 常见错误

- **Muspi zone not found**:检查 Roon 区域名称是否以 "muspi" 结尾 - **Failed to connect to Roon**:确保 Roon Core 正在运行且可从网络访问 - **Token load failed**:首次运行需要授权,确保授权顺利完成

## 注意事项

1. **首次运行**:需要在 Roon 中对扩展进行授权,请检查 Roon 界面中的扩展授权提示 2. **区域命名**:Muspi 区域名称必须以 "muspi" 结尾(不区分大小写) 3. **Token 存储**:Token 保存在 `~/clawd/roon_config.json` 中,请确保文件权限安全 4. **网络要求**:运行脚本的设备必须与 Roon Core 处于同一网络

## 技术详情

### 依赖项 - `roonapi>=0.1.6`:官方 Roon API Python 库

### Token 管理 - Token 存储路径:`~/clawd/roon_config.json` - 自动加载:每次启动时自动加载 - 自动保存:首次授权或更新时自动保存

### 区域查找算法 ```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] ```

更多产品