Squeezebox (Lyrion Music Server) call_method 动作完全指南:在 Home Assistant 中调用任意 LMS JSON-RPC 命令
2026/9/17 11:04:51 网站建设 项目流程

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 里填写的commandparameters原样交给 LMS,command对应 CLI 文档中的p0parameters列表对应p1pN。这样一来,"几乎任何 Squeezebox 命令"都可以被接线进自动化或脚本,而不必等待官方集成逐个封装。

命令清单:所有可用命令都在 LMS 自带的 CLI API 文档中,地址格式为http://HOST:PORT/html/docs/cli-api.html?player=,其中HOSTPORT是你的 Lyrion Music Server 的主机名与端口。集成默认通过 LMS 的 Web 接口(默认端口 9000,即浏览器访问 LMS 的同一个端口)发送命令,详见 集成文档。

前置条件

使用本动作前,请确认已完成 Squeezebox 集成的基本配置:

  1. 至少有一个 Squeezebox 兼容的硬件或软件播放器(如 Squeezebox Radio、Boom、Transporter,或 Squeezelite 等软件模拟器);
  2. 至少有一个 Lyrion Music Server 或 Logitech Media Server,且播放器已接入该服务器;
  3. 在 Home Assistant 中通过配置流程添加 Squeezebox 集成(支持 DHCP 自动发现;发现失败时可手动填写 Host、Port 9000、用户名/密码、是否通过 HTTPS 反向代理连接)。

一条配置条目会把连接在同一 LMS 上的所有 Squeezebox 设备一并加入 Home Assistant。

从用户界面(UI)调用该动作

如果你更喜欢可视化构建,Home Assistant 会分步引导:

  1. 进入Settings>Automations & scenes(自动化与场景)。
  2. 打开现有的自动化或脚本,或选择Create automation>Create new automation(创建自动化 > 创建新自动化)。
  3. 如果是新建自动化,在When(当…时)部分添加触发器;脚本不需要触发器,脚本由其他流程调用时才运行。
  4. Then do(然后执行)部分选择Add action(添加操作)。
  5. 选择要控制的设备。在By target(按目标,参见下文 Targets)中选择要执行命令的 Squeezebox 播放器。
  6. 从该目标可用的动作中,选择Call method(调用方法)。
  7. 填写你要使用的选项。
  8. 选择Save(保存)。

UI 中的选项

选项说明
Command(命令)要传递给 Lyrion Music Server 的命令(对应 CLI 文档中的p0)。
Parameters(参数)传递给 Lyrion Music Server 的附加参数列表(对应 CLI 文档中的p1pN)。

可视化编辑器中,每个参数前必须以连字符加空格(-)开头,才能正确填充为列表项。

在 YAML 中使用该动作

在 YAML 中,动作名称为squeezebox.call_method。集成文档中的基础示例如下:

action: squeezebox.call_method target: entity_id: media_player.squeezebox_radio data: command: mixer parameters: - muting

这个例子通过调用mixer命令并传入muting参数,切换播放器的静音状态。

YAML 选项参考

字段必填类型说明
commandstring要传递给 Lyrion Music Server 的命令(对应 CLI 文档中的p0)。
parameterslist传递给 Lyrion Music Server 的附加参数列表(对应 CLI 文档中的p1pN)。

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

两个动作共用同一套commandp0)/parametersp1~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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询