Plex 媒体服务器
Plex 集成允许您将 Home Assistant 连接到 Plex 媒体服务器
关于在链接的 Sonos扬声器上直接播放音乐的支持在 Sonos 播放 部分可用。
当前支持以下设备类型在 Home Assistant 中:
如果一个 Plex 服务器已通过 声明接口
配置
要将 Plex 媒体服务器 integration 添加到您的 Home Assistant 实例中,请使用此 My 按钮:
Plex 媒体服务器 可以被 Home Assistant 自动发现。如果发现了实例, 它将显示为 已发现。您可以立即进行设置。
手动配置步骤
如果没有自动发现,请不要担心!您可以设置一个 手动集成条目:
-
浏览到您的 Home Assistant 实例。
-
转到
设置 > 设备与服务。 -
在右下角,选择
Add Integration 按钮。 -
从列表中选择 Plex 媒体服务器。
-
按照屏幕上的说明完成设置。
在设置过程中,您需要以服务器管理员身份登录。该集成将检查连接到 Plex 服务器的所有可能方式 - 即,本地或公共地址,HTTP 或 HTTPS,通过 IP 或使用 plex.direct
的子域名,或者如果所有其他方法都失败,则通过使用 Plex 中继。集成将优先考虑本地而非公共,安全而非不安全,依此顺序。所选地址显示在集成页面的 Plex 卡上。
如果您的路由器强制执行 DNS 重新绑定保护,可能会导致连接到本地 plex.direct
主机名失败(请参见 Plex 文档plex.direct
进行 DNS 重新绑定。
集成选项
提供几个选项以调整 media_player
实体的行为。可以在集成页面的 Plex -> 选项 更改这些选项。
使用剧集艺术:显示电视剧集艺术而非电视节目艺术。
监控用户:具有访问 Plex 服务器权限的帐户列表。仅选定用户将创建 media_player
实体。
忽略新的受管/共享用户:启用以忽略新的获得服务器访问权限的 Plex 帐户。
忽略 Plex Web 客户端:不为 Plex Web 客户端创建 media_player
实体。
手动配置
或者,您可以通过在配置 Plex 集成时选择“手动配置 Plex 服务器”手动配置 Plex 服务器连接。此选项仅对“高级模式”的用户可用。这将允许您指定将在设置完成之前进行验证的服务器连接选项。可用选项如下所述:
主机:您的 Plex 服务器的 IP 地址或主机名。如果提供了“令牌”,则为可选。
端口:您的 Plex 服务器的端口。
使用 SSL:使用 HTTPS 连接到 Plex 服务器。
验证 SSL 证书:验证您的 Plex 服务器的 SSL 证书。如果通过 IP 连接或使用自签名证书时,可能会使用此选项。
令牌:您 Plex 服务器的有效授权令牌。如果在没有“主机”的情况下提供,将从 Plex 检索连接 URL。
传感器
活动传感器提供当前观看来自 Plex 服务器媒体的用户计数。单击传感器可查看活跃用户和媒体流的详细信息。
库传感器显示每个库中的项目数量。根据库内容,传感器将在其属性中显示额外的详细信息。例如,电视节目的库传感器将表示库中的剧集总数,其属性还将报告其包含的节目和季数。还提供最后添加的媒体项(电影、专辑或剧集)及其添加到各自库的时间戳。
除了项目计数外,最后添加的媒体项(电影、专辑或剧集)及其添加的时间戳也随每个库传感器提供。
使用库传感器上的 last_added_item
属性通知新媒体已添加的示例自动化:
alias: "Plex - 新媒体添加"
triggers:
- trigger: state
entity_id: sensor.plex_library_movies
id: movie
- trigger: state
entity_id: sensor.plex_library_music
id: album
- trigger: state
entity_id: sensor.plex_library_tv_shows
id: episode
actions:
- action: notify.mobile_app_phone
data:
title: "新 已添加"
message: ""
库传感器默认是禁用的,但可以通过 Plex 集成页面启用。
按钮
可用 button.scan_clients
实体来发现新的可控 Plex 客户端。这可能在控制 Plex 客户端应用的脚本或自动化中是必要的,但必须先开启基础设备。此按钮优于传统的 plex.scan_for_clients
操作。
示例脚本:
play_plex_on_tv:
sequence:
- action: media_player.select_source
target:
entity_id: media_player.smart_tv
data:
source: "Plex"
- wait_for_trigger:
- trigger: state
entity_id: media_player.smart_tv
to: "on"
timeout:
seconds: 10
- action: button.press
target:
entity_id: button.scan_clients_plex
- wait_template: "{{ not is_state('media_player.plex_smart_tv', 'unavailable') }}"
timeout: "00:00:10"
continue_on_timeout: false
- action: media_player.play_media
target:
entity_id: media_player.plex_smart_tv
data:
media_content_id: "{"library_name": "Movies", "title": "Zoolander"}"
media_content_type: movie
更新
Plex 媒体服务器的新版本通知使用更新实体显示。提供详细的发布说明。
某些安装类型(如 Windows 和某些 NAS 设备)可以触发 Plex 媒体服务器的自动升级。
媒体播放器
Plex 媒体播放器平台将为每个连接的客户端设备创建媒体播放器实体。这些实体将显示媒体信息、播放进度和播放控件(如果流媒体设备支持的话)。
默认情况下,Plex 集成将为 Plex 服务器上的所有本地、受管和共享用户创建媒体播放器实体。要自定义监控哪些用户或客户端类型,请调整 集成选项 中描述的 “监控用户”,“忽略新的受管/共享用户”和 “忽略 Plex Web 客户端” 选项。
操作 media_player.play_media
在 Plex 客户端或其他支持的设备上播放托管在 Plex 服务器上的媒体。
media_content_id
有效负载中的必需字段标记为必需,其他字段为可选。可以在任何查询中添加特殊参数:
-
shuffle
:打乱媒体的播放顺序。接受1
或true
以启用。 -
resume
:如果可用,恢复播放到最后部分观看位置,否则从头开始播放。 -
offset
:期望的播放开始位置(以秒为单位)。 -
allow_multiple
:搜索必须找到一个特定项才能成功。此参数在搜索中接受多个匹配项并将所有找到的项目排队用于播放。接受1
或true
以启用。 -
username
:本地 Plex 用户帐户的用户名。仅当 Plex 服务器有多个用户,并希望为特定用户播放媒体时才需要。
关于 音乐 、电视剧集 和 电影 的简化示例可供参考。有关复杂/智能搜索功能,请参见 高级搜索。
必须使用令牌配置集成,以使播放命令生效。如果在 Plex 服务器上使用“没有身份验证的允许 IP 地址和网络列表”选项,则可能发生这种情况。如果需要该功能,建议在暂时禁用该功能的情况下配置集成。
音乐
数据属性 | 描述 |
---|---|
entity_id |
客户端的 entity_id
|
media_content_id |
包含引号的 JSON:
|
media_content_type |
MUSIC |
示例:
从 Adele 的专辑 25 中播放 Hello
entity_id: media_player.plex_player
media_content_type: MUSIC
media_content_id: '{ "library_name": "Music", "artist_name": "Adele", "album_name": "25", "track_name": "Hello" }'
从 Stevie Wonder 的专辑中播放随机曲目
entity_id: media_player.plex_player
media_content_type: MUSIC
media_content_id: '{ "library_name": "Music", "artist_name": "Stevie Wonder", "shuffle": "1" }'
播放列表
数据属性 | 描述 |
---|---|
entity_id |
客户端的 entity_id
|
media_content_id |
包含引号的 JSON:
|
media_content_type |
PLAYLIST |
示例:
播放播放列表 The Best of Disco,并启用随机播放
entity_id: media_player.plex_player
media_content_type: PLAYLIST
media_content_id: '{ "playlist_name": "The Best of Disco", "shuffle": "1" }'
电视剧集
数据属性 | 描述 |
---|---|
entity_id |
客户端的 entity_id
|
media_content_id |
包含引号的 JSON:
|
media_content_type |
EPISODE |
示例:
从 Adult TV 的库中播放 Rick and Morty S2E5
entity_id: media_player.plex_player
media_content_type: EPISODE
media_content_id: '{ "library_name": "Adult TV", "show_name": "Rick and Morty", "season_number": 2, "episode_number": 5 }'
从 Kids TV 的库中播放随机剧集 Sesame Street
entity_id: media_player.plex_player
media_content_type: EPISODE
media_content_id: '{ "library_name": "Kids TV", "show_name": "Sesame Street", "shuffle": "1" }'
恢复从 News TV 的库中未完成剧集 60 Minutes
entity_id: media_player.plex_player
media_content_type: EPISODE
media_content_id: '{ "library_name": "News TV", "show_name": "60 Minutes", "episode.unwatched": true, "episode.inProgress": [true, false], "resume": 1, "sort": "addedAt:asc", "maxresults": 1 }'
电影
数据属性 | 描述 |
---|---|
entity_id |
客户端的 entity_id
|
media_content_id |
包含引号的 JSON:
|
media_content_type |
movie |
示例:
从 Adult Movies 的库中播放 Blade
entity_id: media_player.plex_player
media_content_type: movie
media_content_id: '{ "library_name": "Adult Movies", "title": "Blade" }'
高级搜索
不必搜索特定已知媒体,可以使用许多附加参数进行更强大的搜索。当简单搜索标题有多个匹配项,例如电影重拍时,也可以使用此功能。
以下是可以包含在 media_content_id
JSON 有效负载中的可选键的示例,用于自定义搜索:
-
unwatched
:仅限制搜索未观看的项目(true
,false
) -
actor
:限制搜索包括特定演员的电影 -
collection
:限制在命名 Plex 集合中进行搜索(“回到未来”,“印地安纳琼斯”) -
contentRating
:限制搜索到特定内容评级(“PG”,“R”) -
country
:限制搜索到特定原产国 -
decade
:限制搜索到特定年代(“1960”,“2010”) -
director
:限制搜索到特定导演 -
genre
:限制搜索到特定类型(“动画”,“剧情”,“科幻”) -
resolution
:限制搜索到特定视频分辨率(480,720,1080,“4k”) -
year
:限制搜索到特定年份
有关更多参数和附加详细信息,请查阅 plexapi
库的 文档
示例
以下是高级搜索的示例。所有示例显示可以在 media_content_id
参数中发送的内容。
请注意,某些搜索可能需要 "maxresults": 1
来限制结果为单个项目。然而,一个“项目”可能是媒体组,例如专辑、季节、艺术家、节目等。
搜索将尝试基于搜索参数猜测媒体类型,通过使用提供的最特定的媒体类型。例如,使用 artist.title
和 album.year
的搜索将搜索该艺术家的专辑,这些专辑是在特定年份发行的。如果您在搜索中添加 track.title
,它将尝试查找该曲目。您可以使用 libtype
参数指定要搜索的媒体类型,可能是 movie
、episode
、season
、show
、track
、album
或 artist
。如果仅了解特定曲目的名称,这可能在搜索专辑时非常有用(见下面的示例)。
# 播放原版而不是 2004 年重拍版:
{ "library_name": "Movies", "title": "The Manchurian Candidate", "year": 1962 }
# 也可以进行“懒惰”搜索(会找到续集“终极警探:暴力反击”):
{ "library_name": "Movies", "title": "die hard", "year": 1995 }
# 播放仅知道曲名的艺术家的专辑:
{ "library_name": "Music", "artist.title": "Stevie", "track.title": "Higher Ground" }
# 播放所有标题包含“orange”的专辑:
{ "library_name": "Music", "album.title": "orange", "allow_multiple": true }
# 观看最近添加的电影
{ "library_name": "Movies", "sort": "addedAt:desc", "maxresults": 1 }
# 播放 2000 年代发行的尚未观看的“邦德”集合中的电影
{ "library_name": "Movies", "collection": "Bond", "decade": 2000, "unwatched": true }
# 播放最近添加的部分观看的电视剧
{ "library_name": "TV Shows", "inProgress": true, "sort": "addedAt:desc", "maxresults": 1 }
# 收听 3 年前添加但至少 3 个月未收听的随机电子专辑
{ "library_name": "Music", "addedAt<<": "3y", "album.genre": "Electronic", "album.lastViewedAt<<": "3mon", "sort": "random", "maxresults": 1 }
# 观看 2000 年代中尼icolas Cage 或 Danny DeVito 主演的评分最低的电影
{ "library_name": "Movies", "actor": ["Nicolas Cage", "Danny DeVito"], "decade": 2000, "sort": "audienceRating:asc", "maxresults": 1 }
兼容性
客户端 | 限制 |
---|---|
远程客户端 | 控件不可用 |
Apple TV | 无 |
iOS | 无 |
NVidia Shield | 无 |
Plexamp | 无(仅支持音乐播放) |
Plex 桌面和 Web | 控件不可用(截至 2022 年 6 月) |
Plex HTPC | 无 |
Sonos 播放
要将 Plex 音乐直接播放到 Sonos 扬声器,必须满足以下要求:
使用 Sonos 集成设备的 entity_id
调用 media_player.play_media
操作,并在 media_content_type
前加上 plex://
。同时支持 音乐 和 播放列表 的 media_content_type
值。
示例:
在 Sonos 扬声器上播放具有高级过滤的曲目
entity_id: media_player.sonos_speaker
media_content_type: music
media_content_id: 'plex://{ "library_name": "Music", "artist_name": "Adele", "album_name": "25", "track_name": "Hello" }'
在 Sonos 扬声器上播放播放列表
entity_id: media_player.sonos_speaker
media_content_type: playlist
media_content_id: 'plex://{ "playlist_name": "Party Mix" }'
其他操作
操作 plex.refresh_library
刷新 Plex 库以扫描新添加和更新的媒体。
数据属性 | 必需 | 描述 | 示例 |
---|---|---|---|
server_name |
否 | 如果配置了多个服务器,则使用的 Plex 服务器的名称。 | “My Plex Server” |
library_name |
是 | 要更新的 Plex 库的名称。 | “TV Shows” |
注意事项
- Plex 集成支持多个 Plex 服务器。可以在 设置 -> 设备与服务 下配置其他连接。
- 电影必须位于 Plex 库的“电影”部分下才能正确查看“正在播放”的状态。