|
|
||
|---|---|---|
| .. | ||
| readme.md | ||
readme.md
| id | label | title | type | description | logo | install |
|---|---|---|---|---|---|---|
| plex | PLEX | PLEX - Bindings | binding | This binding can read information from multiple PLEX players connected to a PLEX server. | images/addons/plex.png | auto |
{% include base.html %}
PLEX Binding
This binding can read information from multiple PLEX players connected to a PLEX server.
It can be used for multiple scenarios:
- Drive light changes based on player status. For instance, turn off the lights when a movie starts playing and turn them back on when the movie is stopped or paused.
- Create a page that displays the media currently playing on one or more players connected to the server.
- Send a social media message when a player starts playing new media.
- Show the end time of the currently playing media.
The binding can also control players (PLAY/PAUSE/NEXT/PREVIOUS), which you can use to:
- Start playing music when someone enters a room.
- Pause the movie when motion is detected.
Supported Things
This binding supports two Things.
server: The PLEX server acts as a Bridge to read information from all connected players.player: A PLEX client of any type/OS connected to the server.
Discovery
For auto-discovery to work correctly, first configure and add the PLEX Server Thing.
Next, play something on the desired player.
The player appears in auto-discovery only while media is playing.
Thing Configuration
Configure the PLEX Server first. The host name of the PLEX server is mandatory, and either the PLEX token (recommended) or the username/password of the PLEX server (not recommended).
To find the PLEX token, follow the instructions from the PLEX support site:
- Sign in to your Plex account in Plex Web App
- Browse to a library item and view the XML for it
- Look in the URL and find the token as the
X-Plex-Tokenvalue
PLEX Server Thing Configuration
| Name | Type | Description | Default | Required | Advanced |
|---|---|---|---|---|---|
| host | text | PLEX host name or IP address | N/A | yes | no |
| portNumber | integer | Port Number (leave blank if PLEX installed on default port) | 32400 | no | no |
| refreshRate | integer | Interval in seconds at which PLEX server status is polled | 5 | no | no |
| username | text | When using Plex Home, the username of your Plex account is required if the token is left blank. | N/A | no | no |
| password | text | When using Plex Home, the password of your Plex account is required if the token is left blank. | N/A | no | no |
| token | text | The authentication token when username/password is left blank | N/A | no | no |
PLEX Player Thing Configuration
You can add multiple PLEX players. You can either find the player via auto-discovery or add it manually.
Autodiscovery
Turn on the player you want to add and play some media on it.
Navigate to /settings/things/add/plex and start auto-discovery.
When found, add the player.
Add a player manually
To add a player manually, go to https://plex.tv/devices.xml?X-Plex-Token=YOURTOKENVALUEHERE.
It will display the following XML file.
<MediaContainer publicAddress="XXX.XXX.XXX.XXX">
<Device name="iPhone" publicAddress="XXX.XXX.XXX.XXX" product="Plex for iOS" productVersion="8.4" platform="iOS" platformVersion="15.5" device="iPhone" model="14,5" vendor="Apple" provides="client,controller,sync-target,player,pubsub-player,provider-playback" clientIdentifier="B03466F7-BEEB-405F-A315-C7BBAA2D3FAE" version="8.4" id="547394701" token="XXX" createdAt="1633194400" lastSeenAt="1655715607" screenResolution="1170x2532" screenDensity="3">
<SyncList itemsCompleteCount="0" totalSize="0" version="2"/>
<Connection uri="http://192.168.1.194:32500"/>
</Device>
<Device name="Chrome" publicAddress="XXX.XXX.XXX.XXX" product="Plex Web" productVersion="4.83.2" platform="Chrome" platformVersion="102.0" device="Linux" model="hosted" vendor="" provides="" clientIdentifier="e29nk766fd48skpm8uuu1x9l" version="4.83.2" id="660497510" token="XXX" createdAt="1655714525" lastSeenAt="1655714526" screenResolution="1920x975,1920x1080" screenDensity=""> </Device>
<Device name="MY PLEX SERVER" publicAddress="XXX.XXX.XXX.XXX" product="Plex Media Server" productVersion="1.27.0.5897-3940636f2" platform="Linux" platformVersion="20.04.4 LTS (Focal Fossa)" device="PC" model="x86_64" vendor="Ubuntu" provides="server" clientIdentifier="906a992fc4c5722595f36732838bcc330700b2af" version="1.27.0.5897-3940636f2" id="282416069" token="XXX" createdAt="1560609688" lastSeenAt="1655709241" screenResolution="" screenDensity="">
<Connection uri="http://[2001:1c05:380f:5700:642:1aff:fe08:1c22]:32400"/>
<Connection uri="http://192.168.1.2:32400"/>
</Device>
<Device name="BRAVIA 4K UR2" publicAddress="XXX.XXX.XXX.XXX" product="Plex for Android (TV)" productVersion="8.26.2.29389" platform="Android" platformVersion="9" device="BRAVIA 4K UR2" model="BRAVIA_UR2_4K" vendor="Sony" provides="player,pubsub-player,controller" clientIdentifier="97d2510bd3942159-com-plexapp-android" version="8.26.2.29389" id="403947762" token="XXX" createdAt="1601489892" lastSeenAt="1655701261" screenResolution="1920x1080" screenDensity="320">
<Connection uri="http://192.168.1.19:32500"/>
</Device>
<Device name="SHIELD Android TV" publicAddress="XXX.XXX.XXX.XXX" product="Plex for Android (TV)" productVersion="8.26.2.29389" platform="Android" platformVersion="11" device="SHIELD Android TV" model="mdarcy" vendor="NVIDIA" provides="player,pubsub-player,controller" clientIdentifier="2c098c67afd0ca79-com-plexapp-android" version="8.26.2.29389" id="508114660" token="XXX" createdAt="1625317867" lastSeenAt="1655693424" screenResolution="1920x1080" screenDensity="320">
<Connection uri="http://192.168.1.6:32500"/>
</Device>
<Device name="iPad" publicAddress="XXX.XXX.XXX.XXX" product="Plex for iOS" productVersion="8.0" platform="iOS" platformVersion="14.7.1" device="iPad" model="5,3" vendor="Apple" provides="client,controller,sync-target,player,pubsub-player,provider-playback" clientIdentifier="D9629798-4B91-4375-8844-C62400573E42" version="8.0" id="617442968" token="XXX" createdAt="1646760020" lastSeenAt="1647973844" screenResolution="2048x1536" screenDensity="2">
<SyncList itemsCompleteCount="0" totalSize="0" version="2"/>
<Connection uri="http://192.168.1.220:32500"/>
</Device>
<Device name="MacBook-Pro.local" publicAddress="XXX.XXX.XXX.XXX" product="Plex for Mac" productVersion="1.41.0.2876-e960c9ca" platform="osx" platformVersion="12.2" device="" model="standalone" vendor="" provides="client,player,pubsub-player" clientIdentifier="5ehipgz2ca60ikqnv9jrgojx" version="1.41.0.2876-e960c9ca" id="507110703" token="XXX" createdAt="1625081186" lastSeenAt="1647973509" screenResolution="1680x1050,1680x1050" screenDensity=""> </Device>
</MediaContainer>
Find the Device block of the player you want to add and set the clientIdentifier as the playerID.
| Name | Type | Description | Default | Required | Advanced |
|---|---|---|---|---|---|
| playerID | text | The unique identifier of the player. clientIdentifier from [https://plex.tv/devices.xml] |
N/A | yes | no |
Channels
The PLEX Server supports the following channels:
| Channel | Type | Read/Write | Description |
|---|---|---|---|
| currentPlayers | Number | RO | The number of players currently configured to watch on PLEX |
| currentPlayersActive | Number | RO | The number of players currently being used on PLEX |
The PLEX Player supports the following channels:
| Channel | Type | Read/Write | Description |
|---|---|---|---|
| state | String | RO | The current state of the Player (BUFFERING, PLAYING, PAUSED, STOPPED) |
| power | Switch | RO | The power status of the player |
| title | String | RO | The title of media that is playing |
| type | String | RO | The current type of playing media |
| endtime | DateTime | RO | Time at which the media that is playing will end |
| progress | Dimmer | RO | The current progress of playing media |
| art | String | RO | The URL of the background art for currently playing media |
| thumb | String | RO | The URL of the cover art for currently playing media |
| player | Player | RW | The control channel for the player PLAY/PAUSE/NEXT/PREVIOUS |
| ratingKey | String | RO | The unique key in the Plex library identifying the media that is playing |
| parentRatingKey | String | RO | The unique key in the Plex library identifying the parent (TV show season or album) of the media that is playing |
| grandparentRatingKey | String | RO | The unique key in the Plex library identifying the grandparent (TV show) of the media that is playing |
| user | String | RO | The user name |
Full Example
.things file:
Bridge plex:server:plexrServer "Bridge Plex: Plex" [ host="IP.Address.Or.Hostname", token="SadhjsajjA3AG", refreshRate=5 ] {
Thing plex:player:MyViewerName01 "My Viewer Name 01" [ playerID="ClientIdentifierFromDevices.XML1" ]
Thing plex:player:MyViewerName02 "My Viewer Name 02" [ playerID="ClientIdentifierFromDevices.XML2" ]
}
.items file
Number BridgePlexCurrent "Current players" { channel="plex:server:plexServer:currentPlayers" }
Number BridgePlexCurrentActive "Current players active" { channel="plex:server:plexServer:currentPlayersActive" }
Switch PlexTVPower01 "Power" {channel="plex:player:MyViewerName01:power"}
String PlexTVStatus01 "Status [%s]" {channel="plex:player:MyViewerName01:state"}
Player PlexTVControl01 "Player" {channel="plex:player:MyViewerName01:player"}
String PlexTVUser01 "User [%s]" {channel="plex:player:MyViewerName01:user"}
String PlexTVTitle01 "Title [%s]" {channel="plex:player:MyViewerName01:title"}
String PlexTVType01 "Type [%s]" {channel="plex:player:MyViewerName01:type"}
String PlexTVEndTime01 "End time" {channel="plex:player:MyViewerName01:endtime"}
Dimmer PlexTVProgress01 "Progress [%.1f%%]" {channel="plex:player:MyViewerName01:progress"}
String PlexTVCover1 "Cover" {channel="plex:player:MyViewerName01:thumb"}
String ShellArt01 "Background art" {channel="plex:player:MyViewerName01:art"}
Switch PlexTVPower02 "Power" {channel="plex:player:MyViewerName02:power"}
String PlexTVStatus02 "Status [%s]" {channel="plex:player:MyViewerName02:state"}
Player PlexTVControl02 "Player" {channel="plex:player:MyViewerName02:player"}
String PlexTVUser02 "User [%s]" {channel="plex:player:MyViewerName02:user"}
String PlexTVTitle02 "Title [%s]" {channel="plex:player:MyViewerName02:title"}
String PlexTVType02 "Type [%s]" {channel="plex:player:MyViewerName02:type"}
String PlexTVEndTime02 "End time" {channel="plex:player:MyViewerName02:endtime"}
Dimmer PlexTVProgress02 "Progress [%.1f%%]" {channel="plex:player:MyViewerName02:progress"}
String PlexTVCover2 "Cover" {channel="plex:player:MyViewerName02:thumb"}
String ShellArt02 "Background art" {channel="plex:player:MyViewerName02:art"}
.rules file
rule "Send telegram with title for My Viewer Name 01"
when
Item PlexTVTitle01 changed
then
val telegramActionPlexBot = getActions("telegram","telegram:telegramBot:PlexBot")
telegramActionPlexBot.sendTelegram("Bedroom Roku is watching %s", PlexTVTitle01.state.toString)
end
rule "Send telegram with title for My Viewer Name 02"
when
Item PlexTVTitle02 changed
then
val telegramActionPlexBot = getActions("telegram","telegram:telegramBot:PlexBot")
telegramActionPlexBot.sendTelegram("Bedroom Roku is watching %s", PlexTVTitle02.state.toString)
end