Squeezebox (Lyrion Music Server) call_method 动作完全指南:在 Home Assistant 中调用任意 LMS JSON-RPC 命令
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
squeezebox.call_method 是 Home Assistant Squeezebox(Lyrion Music Server,简称 LMS)集成提供的高级动作,用于把任意 Squeezebox JSON-RPC API 命令接入自动化与脚本。本指南以 source/_actions/squeezebox.call_method.markdown 为骨架,结合同域的 call_query 动作 与 Squeezebox 集成文档,完整讲解该动作的 UI 配置、YAML 写法、参数语义、Targets 机制及典型实战案例,读完即可用一条 action 触达 LMS 生态中几乎所有播放器能力。
为什么需要 call_method:让自动化直达 LMS CLI 层
Squeezebox 集成在 Home Assistant 中暴露的是 media_player 等标准实体,日常的播放、暂停、音量、切歌都有对应的标准动作。但 LMS(前身是 Logitech Media Server)的 JSON-RPC CLI 接口还提供了大量未封装成独立 Home Assistant 动作的功能,例如:
- 直接发送
mixer命令调节静音、音量; - 触发播放器特有指令;
- 调用插件或自定义服务暴露的 CLI 命令。
squeezebox.call_method就是为这种情况设计的"透传通道":它把你在 YAML 里填写的command与parameters原样交给 LMS,command对应 CLI 文档中的p0,parameters列表对应p1到pN。这样一来,"几乎任何 Squeezebox 命令"都可以被接线进自动化或脚本,而不必等待官方集成逐个封装。
命令清单:所有可用命令都在 LMS 自带的 CLI API 文档中,地址格式为
http://HOST:PORT/html/docs/cli-api.html?player=,其中HOST与PORT是你的 Lyrion Music Server 的主机名与端口。集成默认通过 LMS 的 Web 接口(默认端口 9000,即浏览器访问 LMS 的同一个端口)发送命令,详见 集成文档。
前置条件
使用本动作前,请确认已完成 Squeezebox 集成的基本配置:
- 至少有一个 Squeezebox 兼容的硬件或软件播放器(如 Squeezebox Radio、Boom、Transporter,或 Squeezelite 等软件模拟器);
- 至少有一个 Lyrion Music Server 或 Logitech Media Server,且播放器已接入该服务器;
- 在 Home Assistant 中通过配置流程添加 Squeezebox 集成(支持 DHCP 自动发现;发现失败时可手动填写 Host、Port 9000、用户名/密码、是否通过 HTTPS 反向代理连接)。
一条配置条目会把连接在同一 LMS 上的所有 Squeezebox 设备一并加入 Home Assistant。
从用户界面(UI)调用该动作
如果你更喜欢可视化构建,Home Assistant 会分步引导:
- 进入Settings>Automations & scenes(自动化与场景)。
- 打开现有的自动化或脚本,或选择Create automation>Create new automation(创建自动化 > 创建新自动化)。
- 如果是新建自动化,在When(当…时)部分添加触发器;脚本不需要触发器,脚本由其他流程调用时才运行。
- 在Then do(然后执行)部分选择Add action(添加操作)。
- 选择要控制的设备。在By target(按目标,参见下文 Targets)中选择要执行命令的 Squeezebox 播放器。
- 从该目标可用的动作中,选择Call method(调用方法)。
- 填写你要使用的选项。
- 选择Save(保存)。
UI 中的选项
| 选项 | 说明 |
|---|---|
| Command(命令) | 要传递给 Lyrion Music Server 的命令(对应 CLI 文档中的p0)。 |
| Parameters(参数) | 传递给 Lyrion Music Server 的附加参数列表(对应 CLI 文档中的p1到pN)。 |
可视化编辑器中,每个参数前必须以连字符加空格(-)开头,才能正确填充为列表项。
在 YAML 中使用该动作
在 YAML 中,动作名称为squeezebox.call_method。集成文档中的基础示例如下:
action: squeezebox.call_method target: entity_id: media_player.squeezebox_radio data: command: mixer parameters: - muting这个例子通过调用mixer命令并传入muting参数,切换播放器的静音状态。
YAML 选项参考
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
command | 是 | string | 要传递给 Lyrion Music Server 的命令(对应 CLI 文档中的p0)。 |
parameters | 否 | list | 传递给 Lyrion Music Server 的附加参数列表(对应 CLI 文档中的p1到pN)。 |
Good to know:两个容易踩坑的细节
- 在可视化编辑器中,每个参数必须以连字符和空格(
-)开头,这样它才会正确填充为列表项。 - 当某个参数是"增减量"时,请把数值放进引号。例如要把音量提高 5%,使用
mixer命令并传参volume与"+5":
action: squeezebox.call_method target: entity_id: media_player.squeezebox_radio data: command: mixer parameters: - volume - "+5"带引号可以防止 YAML 把+5解析为数值类型,确保 LMS 收到的是字符串形式的增减指令。
Targets:动作的目标机制
该动作要求一个目标。目标可以指向单个实体、设备、区域、楼层或标签,Home Assistant 会对目标背后的每一个media_player实体执行该动作:
- Entity(实体):一个具体的
media_player实体,例如media_player.squeezebox_radio。 - Device(设备):归属于某设备的所有
media_player实体。 - Area(区域):某房间/区域内的所有
media_player实体。 - Floor(楼层):某楼层上的所有
media_player实体。 - Label(标签):共享某标签的所有
media_player实体。
同一个动作里还可以混选不同目标类型,例如同时添加一个具体实体和一个区域,让动作同时对两者执行。
结合 call_query:既能发命令,也能取回查询结果
与squeezebox.call_method配套的同域动作是 squeezebox.call_query。两者的区别在于:call_method只负责把命令发给 LMS 并执行;而call_query会把查询结果保存在目标播放器的query_result属性中,供后续步骤通过模板读取。
例如,用call_query搜索专辑:
action: squeezebox.call_query target: entity_id: media_player.kitchen data: command: albums parameters: - "0" - "20" - "search:Revolver"该查询会向服务器请求匹配 "Revolver" 的专辑(前 20 条),结果存放在播放器的query_result属性中,之后可以用模板读取:
{{ state_attr('media_player.kitchen', 'query_result') }}因此,两者的搭配原则很清晰:
- 只想让播放器"做事"(如调静音、调音量)→ 用
call_method; - 想从 LMS "读数据"并用于后续逻辑(如查询结果、播放列表内容)→ 用
call_query。
两个动作共用同一套command(p0)/parameters(p1~pN)参数语义,学习成本为零。
尝试一下:开发者工具快速验证
想立刻验证某个命令是否可用?打开Settings>Tools>Actions(工具 > 操作),搜索squeezebox.call_method,填入字段后选择Perform action(执行操作),无需写任何 YAML 就能在真实实体上看到效果。这是排查命令拼写、参数格式最快捷的方式。
集成底层:命令是如何到达 LMS 的
从 Squeezebox 集成文档 可以确认以下实现事实,帮助你理解动作的行为边界:
- 该集成通过 LMS 的Web 接口发送命令,默认端口 9000,与浏览器访问 LMS 的端口相同;集成采用**轮询(Local Polling)**方式从 LMS 获取更新。
- 集成提供的功能面包括:媒体播放器实体、报警相关的开关(Alarm、Alarms Enabled)、二进制传感器(Alarm active、Alarm snoozed、Alarm upcoming、Library rescan、Needs restart)、按钮(Preset 1–6、Brightness/Bass/Treble 增减)、传感器(Last scan、Next alarm、Player count、Total albums/artists/songs 等)以及 LMS 与插件的更新通知。
- 已知限制:LMS API 目前无法覆盖或控制淡入与交叉淡化设置(Play or Resume fade-in duration),若播放器启用了淡入,播报(announcement)的开头可能因淡入而被截掉——使用播报功能时应考虑关闭或缩短淡入时长。
这些机制决定了call_method的本质:它复用的是同一条 LMS Web 接口通道,把 CLI 命令逐字透传,因此命令的可用性与参数语义以 LMS 侧 CLI API 文档为准。
相关动作
- Call query:调用自定义 Squeezebox JSON-RPC 查询,并把结果保存在播放器的
query_result属性中。
结语
squeezebox.call_method是打通 Home Assistant 自动化与 Squeezebox/LMS 完整 CLI 能力面的关键动作。配合 Targets 的实体/设备/区域/楼层/标签寻址能力,你可以在一条自动化里批量控制多个播放器执行任意 LMS 命令;再与call_query组合,还能实现"查询—判断—执行"的完整闭环。实际使用前,建议先在开发者工具里逐个验证命令与参数,再固化进自动化与脚本。
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考