Updated external content (Jenkins build 2620)
parent
2bc70be4cf
commit
bc41299a6c
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,178 @@
|
||||||
|
---
|
||||||
|
id: emby
|
||||||
|
label: Emby
|
||||||
|
title: Emby - Bindings
|
||||||
|
type: binding
|
||||||
|
description: "The **Emby Binding** integrates [Emby](https://emby.media/), a personal media server, with openHAB."
|
||||||
|
since: 3x
|
||||||
|
install: auto
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
|
||||||
|
|
||||||
|
{% include base.html %}
|
||||||
|
|
||||||
|
# Emby Binding
|
||||||
|
|
||||||
|
The **Emby Binding** integrates [Emby](https://emby.media/), a personal media server, with openHAB.
|
||||||
|
|
||||||
|
It allows controlling Emby players and retrieving player status data.
|
||||||
|
For example, you can monitor the currently playing movie title or automatically dim your lights when playback starts.
|
||||||
|
This binding supports multiple Emby clients connected to a single Emby Media Server.
|
||||||
|
It provides functionality similar to the Plex Binding.
|
||||||
|
|
||||||
|
## Supported Things
|
||||||
|
|
||||||
|
This binding defines the following Thing Type IDs:
|
||||||
|
|
||||||
|
- `controller`
|
||||||
|
Represents a connection to an Emby server (a Bridge Thing).
|
||||||
|
|
||||||
|
- `device`
|
||||||
|
Represents a client/player device connected to the Emby server.
|
||||||
|
|
||||||
|
## Automatic Discovery
|
||||||
|
|
||||||
|
The binding supports automatic discovery for both servers (`controller`) and clients (`device`).
|
||||||
|
|
||||||
|
## Binding Configuration
|
||||||
|
|
||||||
|
There is no global binding-level configuration required or supported.
|
||||||
|
|
||||||
|
## Thing Configuration
|
||||||
|
|
||||||
|
### `controller` Bridge Configuration
|
||||||
|
|
||||||
|
The following Configuration Parameter Keys are available:
|
||||||
|
|
||||||
|
| Name | Type | Description | Default | Required | Advanced |
|
||||||
|
|-----------------|---------|---------------------------------------------------------|---------|----------|----------|
|
||||||
|
| ipAddress | Text | IP address or hostname of the Emby server. | N/A | Yes | No |
|
||||||
|
| api | Text | API Key generated from Emby for authorization. | N/A | Yes | No |
|
||||||
|
| bufferSize | Integer | WebSocket buffer size in bytes. | 10,000 | No | No |
|
||||||
|
| refreshInterval | Integer | Polling interval for play-state updates (milliseconds). | 10,000 | No | No |
|
||||||
|
| port | Integer | Port in which EMBY is listening for communication. | 8096 | No | No |
|
||||||
|
| discovery | Boolean | Enable or disable automatic device discovery. | true | No | Yes |
|
||||||
|
|
||||||
|
### `device` Thing Configuration
|
||||||
|
|
||||||
|
The following Configuration Parameter Key is available:
|
||||||
|
|
||||||
|
- `deviceID`
|
||||||
|
The unique identifier for the client device connected to the Emby server.
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
The following Channel IDs are available for a `device` Thing:
|
||||||
|
|
||||||
|
| Channel ID | Item Type | Config Parameters | Description |
|
||||||
|
|--------------|-------------|-----------------------------------------------------------------------|-----------------------------------------------------------------------|
|
||||||
|
| control | Player | None | Playback control (play, pause, next, previous, fast-forward, rewind). |
|
||||||
|
| stop | Switch | None | Indicates playback state; OFF stops playback. |
|
||||||
|
| title | String | None | Title of the currently playing song. |
|
||||||
|
| show-title | String | None | Title of the currently playing movie or TV show. |
|
||||||
|
| mute | Switch | None | Mute status control. |
|
||||||
|
| image-url | String | imageUrlMaxHeight, imageMaxWidth, imageUrlType, imageUrlPercentPlayed | URL for current media artwork. |
|
||||||
|
| current-time | Number:Time | None | Current playback position. |
|
||||||
|
| duration | Number:Time | None | Total media duration. |
|
||||||
|
| media-type | String | None | Type of media (e.g., Movie, Episode). |
|
||||||
|
|
||||||
|
## `image-url` Config Parameters
|
||||||
|
|
||||||
|
| Parameter Name | Type | Default | Description |
|
||||||
|
|-------------------------|---------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `imageUrlType` | Text | Primary | Specifies the image type to retrieve. Options include `Primary`, `Art`, `Backdrop`, `Banner`, `Logo`, `Thumb`, `Disc`, `Box`, `Screenshot`, `Menu`, and `Chapter`. |
|
||||||
|
| `imageUrlMaxHeight` | Text | None | The maximum height (in pixels) of the retrieved image. |
|
||||||
|
| `imageUrlMaxWidth` | Text | None | The maximum width (in pixels) of the retrieved image. |
|
||||||
|
| `imageUrlPercentPlayed` | Boolean | false | If true, adds an overlay indicating the percent played (e.g., 47%). |
|
||||||
|
|
||||||
|
|
||||||
|
## Full Example
|
||||||
|
|
||||||
|
### `emby.things` Example
|
||||||
|
|
||||||
|
```java
|
||||||
|
Bridge emby:controller:myEmbyServer [
|
||||||
|
ipAddress="192.168.1.100",
|
||||||
|
api="YOUR_EMBY_API_KEY",
|
||||||
|
bufferSize=16384,
|
||||||
|
refreshInterval=2000,
|
||||||
|
discovery=true
|
||||||
|
] {
|
||||||
|
Thing emby:device:myClientDevice [
|
||||||
|
deviceID="YOUR_CLIENT_DEVICE_ID"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### `emby.items` Example
|
||||||
|
|
||||||
|
```java
|
||||||
|
Switch Emby_PlayPause "Play/Pause" { channel="emby:device:myEmbyServer:myClientDevice:control" }
|
||||||
|
Switch Emby_Stop "Stop" { channel="emby:device:myEmbyServer:myClientDevice:stop" }
|
||||||
|
Switch Emby_Mute "Mute" { channel="emby:device:myEmbyServer:myClientDevice:mute" }
|
||||||
|
String Emby_Title "Title [%s]" { channel="emby:device:myEmbyServer:myClientDevice:title" }
|
||||||
|
String Emby_ShowTitle "Show Title [%s]" { channel="emby:device:myEmbyServer:myClientDevice:show-title" }
|
||||||
|
Number:Time Emby_CurrentTime "Current Time [%d %unit%]" { channel="emby:device:myEmbyServer:myClientDevice:current-time" }
|
||||||
|
Number:Time Emby_Duration "Duration [%d %unit%]" { channel="emby:device:myEmbyServer:myClientDevice:duration" }
|
||||||
|
String Emby_MediaType "Media Type [%s]" { channel="emby:device:myEmbyServer:myClientDevice:media-type" }
|
||||||
|
String Emby_ImageURL "Artwork URL [%s]" { channel="emby:device:myEmbyServer:myClientDevice:image-url" }
|
||||||
|
```
|
||||||
|
|
||||||
|
### `emby.sitemap` Configuration Example
|
||||||
|
|
||||||
|
```perl
|
||||||
|
sitemap emby label="Emby Control"
|
||||||
|
{
|
||||||
|
Frame label="Controls" {
|
||||||
|
Switch item=Emby_PlayPause
|
||||||
|
Switch item=Emby_Stop
|
||||||
|
Switch item=Emby_Mute
|
||||||
|
}
|
||||||
|
Frame label="Now Playing" {
|
||||||
|
Text item=Emby_Title
|
||||||
|
Text item=Emby_ShowTitle
|
||||||
|
Text item=Emby_MediaType
|
||||||
|
Text item=Emby_CurrentTime
|
||||||
|
Text item=Emby_Duration
|
||||||
|
Text item=Emby_ImageURL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rule Actions
|
||||||
|
|
||||||
|
All playback and control commands are now implemented as Rule Actions rather than channels. Use the standard `getActions` API in your rules to invoke these.
|
||||||
|
|
||||||
|
### Available Actions
|
||||||
|
|
||||||
|
| Action ID | Method Signature | Description |
|
||||||
|
|----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
|
||||||
|
| sendPlay | `sendPlay(ItemIds: String, PlayCommand: String, StartPositionTicks: Integer?, MediaSourceId: String?, AudioStreamIndex: Integer?, SubtitleStreamIndex: Integer?, StartIndex: Integer?)` | Send a play command with optional parameters to an Emby player. |
|
||||||
|
| sendGeneralCommand | `sendGeneralCommand(CommandName: String)` | Send a generic Emby control command (e.g., MoveUp, ToggleMute, GoHome). |
|
||||||
|
| sendGeneralCommandWithArgs | `sendGeneralCommandWithArgs(CommandName: String, Arguments: String)` | Send a generic Emby control command with a JSON arguments blob (e.g., SetVolume, DisplayMessage, etc.). |
|
||||||
|
|
||||||
|
### Example Rule (XTend)
|
||||||
|
|
||||||
|
```xtend
|
||||||
|
rule "Play Movie on Emby"
|
||||||
|
when
|
||||||
|
Item MySwitch changed to ON
|
||||||
|
then
|
||||||
|
val embyActions = getActions("emby", "emby:device:myServer:myDevice")
|
||||||
|
// Play item IDs "abc,def" immediately
|
||||||
|
embyActions.sendPlay("abc,def", "PlayNow", null, null, null, null, null)
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example Rule (JavaScript)
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// inside a JS Scripting rule
|
||||||
|
let emby = actions.getActions("emby", "emby:device:myServer:myDevice");
|
||||||
|
emby.sendGeneralCommand("ToggleMute");
|
||||||
|
```
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [Emby Remote Control API Documentation](https://github.com/MediaBrowser/Emby/wiki/Remote-control)
|
|
@ -0,0 +1,155 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<thing:thing-descriptions bindingId="emby"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||||
|
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||||
|
<!-- Sample Thing Type -->
|
||||||
|
<bridge-type id="controller">
|
||||||
|
<label>EMBY Server</label>
|
||||||
|
<description>This is the Bridge to an instance of an EMBY server you want to connect to.</description>
|
||||||
|
<semantic-equipment-tag>NetworkAppliance</semantic-equipment-tag>
|
||||||
|
<config-description>
|
||||||
|
<parameter name="api" type="text" required="true">
|
||||||
|
<label>API Key</label>
|
||||||
|
<description>This is the API key generated from EMBY used for Authorization.</description>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="ipAddress" type="text" required="true">
|
||||||
|
<label>Server Host</label>
|
||||||
|
<description>IP address or hostname of the EMBY server.</description>
|
||||||
|
<context>network-address</context>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="port" type="integer" min="1" max="65535" required="true">
|
||||||
|
<label>Server Port</label>
|
||||||
|
<description>Port number for the EMBY server.</description>
|
||||||
|
<default>8096</default>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="refreshInterval" type="integer" min="1000">
|
||||||
|
<label>Refresh Interval</label>
|
||||||
|
<description>Polling interval for play-state updates.</description>
|
||||||
|
<default>10000</default>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="discovery" type="boolean">
|
||||||
|
<label>Auto Discover</label>
|
||||||
|
<description>Enable or disable automatic device discovery.</description>
|
||||||
|
<default>true</default>
|
||||||
|
<advanced>true</advanced>
|
||||||
|
</parameter>
|
||||||
|
</config-description>
|
||||||
|
</bridge-type>
|
||||||
|
|
||||||
|
<thing-type id="device">
|
||||||
|
<supported-bridge-type-refs>
|
||||||
|
<bridge-type-ref id="controller"/>
|
||||||
|
</supported-bridge-type-refs>
|
||||||
|
<label>EMBY Device</label>
|
||||||
|
<description>This is a player device which connects to an EMBY server.</description>
|
||||||
|
<semantic-equipment-tag>MediaPlayer</semantic-equipment-tag>
|
||||||
|
<channels>
|
||||||
|
<channel id="control" typeId="control"/>
|
||||||
|
<channel id="stop" typeId="stop"/>
|
||||||
|
<channel id="title" typeId="title"/>
|
||||||
|
<channel id="mute" typeId="mute"/>
|
||||||
|
<channel id="show-title" typeId="show-title"/>
|
||||||
|
<channel id="image-url" typeId="image-url"/>
|
||||||
|
<channel id="current-time" typeId="current-time"/>
|
||||||
|
<channel id="duration" typeId="duration"/>
|
||||||
|
<channel id="media-type" typeId="media-type"/>
|
||||||
|
</channels>
|
||||||
|
<config-description>
|
||||||
|
<parameter name="deviceID" type="text" required="true">
|
||||||
|
<label>DeviceID</label>
|
||||||
|
<description>This is the deviceId you want to connect to.</description>
|
||||||
|
</parameter>
|
||||||
|
</config-description>
|
||||||
|
</thing-type>
|
||||||
|
<channel-type id="title">
|
||||||
|
<item-type>String</item-type>
|
||||||
|
<label>Title</label>
|
||||||
|
<description>Title of the current song</description>
|
||||||
|
<state readOnly="true" pattern="%s"/>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="show-title">
|
||||||
|
<item-type>String</item-type>
|
||||||
|
<label>Show Title</label>
|
||||||
|
<description>Title of the current show</description>
|
||||||
|
<state readOnly="true" pattern="%s"/>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="control">
|
||||||
|
<item-type>Player</item-type>
|
||||||
|
<label>Control</label>
|
||||||
|
<description>Control the Emby Player, e.g. start/stop/next/previous/ffward/rewind</description>
|
||||||
|
<category>Player</category>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="stop">
|
||||||
|
<item-type>Switch</item-type>
|
||||||
|
<label>Stop</label>
|
||||||
|
<description>Stops the player. ON if the player is stopped.</description>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="mute">
|
||||||
|
<item-type>Switch</item-type>
|
||||||
|
<label>Mute</label>
|
||||||
|
<description>Mute/unmute your device</description>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="current-time">
|
||||||
|
<item-type>Number:Time</item-type>
|
||||||
|
<label>Current Time</label>
|
||||||
|
<description>Current time of currently playing media</description>
|
||||||
|
<state readOnly="true" pattern="%d %unit%"/>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="duration">
|
||||||
|
<item-type>Number:Time</item-type>
|
||||||
|
<label>Duration</label>
|
||||||
|
<description>Length of currently playing media</description>
|
||||||
|
<state readOnly="true" pattern="%d %unit%"/>
|
||||||
|
</channel-type>
|
||||||
|
|
||||||
|
<channel-type id="media-type">
|
||||||
|
<item-type>String</item-type>
|
||||||
|
<label>Media Type</label>
|
||||||
|
<description>Media type of the current file</description>
|
||||||
|
<state readOnly="true" pattern="%s"/>
|
||||||
|
</channel-type>
|
||||||
|
<channel-type id="image-url">
|
||||||
|
<item-type>String</item-type>
|
||||||
|
<label>image url</label>
|
||||||
|
<description>The url of the playing media</description>
|
||||||
|
<state readOnly="true" pattern="%s"/>
|
||||||
|
<config-description>
|
||||||
|
<parameter name="imageUrlType" type="text">
|
||||||
|
<default>Primary</default>
|
||||||
|
<options>
|
||||||
|
<option value="Primary">Primary</option>
|
||||||
|
<option value="Art">Art</option>
|
||||||
|
<option value="Backdrop">Backdrop</option>
|
||||||
|
<option value="Banner">Banner</option>
|
||||||
|
<option value="Logo">Logo</option>
|
||||||
|
<option value="Thumb">Thumb</option>
|
||||||
|
<option value="Disc">Disc</option>
|
||||||
|
<option value="Box">Box</option>
|
||||||
|
<option value="Screenshot">Screenshot</option>
|
||||||
|
<option value="Menu">Menu</option>
|
||||||
|
<option value="Chapter">Chapter</option>
|
||||||
|
</options>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="imageUrlMaxHeight" type="text">
|
||||||
|
<label>Image Max Height</label>
|
||||||
|
<description>The maximum height of the image that will be retrieved.</description>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="imageUrlMaxWidth" type="text">
|
||||||
|
<label>Image Max Width</label>
|
||||||
|
<description>The maximum width of the image that will be retrieved.</description>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="imageUrlPercentPlayed" type="boolean">
|
||||||
|
<label>Show Percent Played Overlay</label>
|
||||||
|
<description>If set to true, a percent played overlay will be added to the image. For example, using
|
||||||
|
PercentPlayed=47 will overlay a 47% progress indicator. Default is false.</description>
|
||||||
|
</parameter>
|
||||||
|
</config-description>
|
||||||
|
</channel-type>
|
||||||
|
</thing:thing-descriptions>
|
Loading…
Reference in New Issue