Plex 媒体服务器

Plex 集成允许您将 Home Assistant 连接到 Plex 媒体服务器。配置完成后,积极流媒体的 Plex 客户端 显示为 媒体播放器,并通过 Home Assistant 的 传感器 报告播放状态和库大小。媒体播放器将允许您控制媒体播放并查看当前播放的项目。

关于在链接的 Sonos扬声器上直接播放音乐的支持在 Sonos 播放 部分可用。

当前支持以下设备类型在 Home Assistant 中:

如果一个 Plex 服务器已通过 声明接口 被 Plex 帐户声明,Home Assistant 将需要身份验证才能连接。

配置

要将 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: ""

Important

库传感器默认是禁用的,但可以通过 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:打乱媒体的播放顺序。接受 1true 以启用。
  • resume:如果可用,恢复播放到最后部分观看位置,否则从头开始播放。
  • offset:期望的播放开始位置(以秒为单位)。
  • allow_multiple:搜索必须找到一个特定项才能成功。此参数在搜索中接受多个匹配项并将所有找到的项目排队用于播放。接受 1true 以启用。
  • username:本地 Plex 用户帐户的用户名。仅当 Plex 服务器有多个用户,并希望为特定用户播放媒体时才需要。

关于 音乐电视剧集电影 的简化示例可供参考。有关复杂/智能搜索功能,请参见 高级搜索

Note

如果要向非 Plex 播放器投射,请参考以下链接:

Important

必须使用令牌配置集成,以使播放命令生效。如果在 Plex 服务器上使用“没有身份验证的允许 IP 地址和网络列表”选项,则可能发生这种情况。如果需要该功能,建议在暂时禁用该功能的情况下配置集成。

音乐

数据属性 描述
entity_id 客户端的 entity_id
media_content_id 包含引号的 JSON:
  • library_name(必需)
  • artist_nameartist.title
  • album_namealbum.title
  • track_nametrack.title
  • track_numbertrack.index
  • shuffle(0 或 1)
  • allow_multiple(0 或 1)
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:
  • playlist_name(必需)
  • shuffle(0 或 1)
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:
  • library_name(必需)
  • show_nameshow.title
  • season_numberseason.index
  • episode_numberepisode.index
  • shuffle(0 或 1)
  • resume(0 或 1)
  • offset(以秒为单位)
  • allow_multiple(0 或 1)
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:
  • library_name(必需)
  • title
  • resume(0 或 1)
  • offset(以秒为单位)
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:仅限制搜索未观看的项目(truefalse
  • 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.titlealbum.year 的搜索将搜索该艺术家的专辑,这些专辑是在特定年份发行的。如果您在搜索中添加 track.title,它将尝试查找该曲目。您可以使用 libtype 参数指定要搜索的媒体类型,可能是 movieepisodeseasonshowtrackalbumartist。如果仅了解特定曲目的名称,这可能在搜索专辑时非常有用(见下面的示例)。

# 播放原版而不是 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 扬声器,必须满足以下要求:

  1. 为您的 Plex 服务器启用远程访问。
  2. Sonos 扬声器已链接到您的 Plex 帐户 (说明)
  3. 配置了 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 库的“电影”部分下才能正确查看“正在播放”的状态。