# Onkyo Binding
This binding integrates the Onkyo AV receivers.
# Introduction
Binding should be compatible with Onkyo AV receivers which support ISCP (Integra Serial Control Protocol) over Ethernet (eISCP).
# Supported Things
This binding supports only one thing: The Onkyo AV receiver. All supported Onkyo devices are registered as an audio sink in the framework.
# Discovery
This binding can discover the supported Onkyo AV receivers. At the moment only the following models are supported:
- HT-RC560
- TX-NR414
- TX-NR474
- TX-NR509
- TX-NR515
- TX-NR525
- TX-NR535
- TX-NR545
- TX-NR555
- TX-NR575
- TX-NR575E
- TX-NR616
- TX-NR626
- TX-NR636
- TX-NR646
- TX-NR656
- TX-NR676
- TX-NR686
- TX-NR708
- TX-NR717
- TX-NR727
- TX-NR737
- TX-NR747
- TX-NR757
- TX-NR809
- TX-NR818
- TX-NR828
- TX-NR838
- TX-NR3007
- TX-RZ900
# Binding Configuration
The binding can auto-discover the Onkyo AVRs present on your local network. The auto-discovery is enabled by default. To disable it, you can create a file in the services directory called onkyo.cfg with the following content:
org.openhab.onkyo:enableAutoDiscovery=false
This configuration parameter only controls the Onkyo AVR auto-discovery process, not the openHAB auto-discovery. Moreover, if the openHAB auto-discovery is disabled, the Onkyo AVR auto-discovery is disabled too.
The binding has the following configuration options, which can be set for "binding:onkyo":
Parameter | Name | Description | Required |
---|---|---|---|
callbackUrl | Callback URL | URL to use for playing notification sounds, e.g. http://192.168.0.2:8080 (opens new window) | no |
When an Onkyo receiver is used as an audio sink, the receiver connects to openHAB to get the audio stream. By default, the binding sends the URL for getting the audio stream based on the Primary Address (Network Settings configuration) and the openHAB HTTP port. Sometimes it is necessary to use the Callback URL to override the default, such as when using a reverse proxy or with some Docker implementations.
# Thing Configuration
The Onkyo AVR thing requires the ip address and the port to access it on.
In the code avr-livingroom
refers to the user defined unique id of your Onkyo device.
A second device could be called avr2.
In the thing file, this looks e.g. like
Model specific
onkyo:TX-NR818:avr-livingroom [ipAddress="192.168.1.100", port=60128]
or
Generic model
onkyo:onkyoAVR:avr-livingroom [ipAddress="192.168.1.100", port=60128]
Optionally you can specify the refresh interval by refreshInterval
parameter.
onkyo:onkyoAVR:avr-livingroom [ipAddress="192.168.1.100", port=60128, refreshInterval=30]
Maximum volume level can also be configured by volumeLimit
parameter.
This prevent setting receiver volume level too high, which could damage your speakers or receiver.
onkyo:onkyoAVR:avr-livingroom [ipAddress="192.168.1.100", port=60128, volumeLimit=50]
Binding then automatically scale the volume level in both directions (100% = 50 = 100%).
You can also change the way volume scaling works. This can be necessary if your receiver uses a different scaling system than 0-100. You can specify a decimal number that acts as the coefficient for scaling. See below for a few examples:
Value | Description | Value for 100% |
---|---|---|
1 | Default, don't scale | 100 |
2 | For receivers that support 0.5 increments in volume | 200 |
0.8 | For receivers that go from 0-80 | 80 |
0.5 | For receivers that go from 0-50 | 50 |
Note that this is applied after the volume limiting took place.
onkyo:onkyoAVR:avr-livingroom [ipAddress="192.168.1.100", port=60128, volumeScale=2]
The binding will send value 200 for maximum volume to the receiver.
# Channels
The Onkyo AVR supports the following channels (some channels are model specific):
Channel Type ID | Item Type | Description |
---|---|---|
zone1#power | Switch | Power on/off your device |
zone1#mute | Switch | Mute/unmute zone 1 |
zone1#input | Number | The input for zone 1 |
zone1#volume | Dimmer | Volume of zone 1 |
zone2#power | Switch | Power on/off zone 2 |
zone2#mute | Switch | Mute/unmute zone 2 |
zone2#input | Number | The input for zone 2 |
zone2#volume | Dimmer | Volume of zone 2 |
zone3#power | Switch | Power on/off zone 3 |
zone3#mute | Switch | Mute/unmute zone 3 |
zone3#input | Number | The input for zone 3 |
zone3#volume | Dimmer | Volume of zone 3 |
player#control | Player | Control the Zone Player, e.g. play/pause/next/previous/ffward/rewind (available if playing from Network or USB) |
player#title | String | Title of the current song (available if playing from Network or USB) |
player#album | String | Album name of the current song (available if playing from Network or USB) |
player#artist | String | Artist name of the current song (available if playing from Network or USB) |
player#currentPlayingTime | String | Current playing time of the current song (available if playing from Network or USB) |
player#listenmode | Number | Current listening mode e.g. Stereo, 5.1ch Surround, ... |
player#audioinfo | String | Current audio info (Refresh timer must be configured for updates) |
player#playuri | String | Plays the URI provided to the channel |
player#albumArt | Image | Image of the current album art of the current song |
player#albumArtUrl | String | URL to the current album art of the current song |
netmenu#title | String | Title of the current NET service |
netmenu#control | String | Control the USB/Net Menu, e.g. Up/Down/Select/Back/PageUp/PageDown/Select&lsqb0-9&rsqb |
netmenu#selection | Number | The number of the currently selected USB/Net Menu entry (0-9) |
netmenu#item0 | String | The text of USB/Net Menu entry 0 |
netmenu#item1 | String | The text of USB/Net Menu entry 1 |
netmenu#item2 | String | The text of USB/Net Menu entry 2 |
netmenu#item3 | String | The text of USB/Net Menu entry 3 |
netmenu#item4 | String | The text of USB/Net Menu entry 4 |
netmenu#item5 | String | The text of USB/Net Menu entry 5 |
netmenu#item6 | String | The text of USB/Net Menu entry 6 |
netmenu#item7 | String | The text of USB/Net Menu entry 7 |
netmenu#item8 | String | The text of USB/Net Menu entry 8 |
netmenu#item9 | String | The text of USB/Net Menu entry 9 |
# Rule Actions
This binding includes a rule action which allows to send raw eISCP messages to the receiver. The rule action can be used to send commands to the receiver that are not supported by channels. There is a separate instance for each receiver, which can be retrieved through
val onkyoActions = getActions("onkyo","onkyo:onkyoAVR:avr-livingroom")
where the first parameter always has to be onkyo
and the second (onkyo:onkyoAVR:avr-livingroom
) is the Thing UID of the broker that should be used.
Once this action instance is retrieved, you can invoke the onkyoActions.sendRawCommand(String action, String value)
method on it:
onkyoActions.sendRawCommand("CTL", "UP")
This command for instance increases the volume for the center channel. For a description of all commands you can e.g. search this GitHub project (opens new window).
Also note that when sending multiple commands there has to be a Thread::sleep(100)
in between the commands because the action does not wait for a response from the receiver.
# Input Source Mapping
Here after are the ID values of the input sources:
- 00: DVR/VCR
- 01: SATELLITE/CABLE
- 02: GAME
- 03: AUX
- 04: GAME
- 05: PC
- 16: BLURAY/DVD
- 32: TAPE1
- 33: TAPE2
- 34: PHONO
- 35: CD
- 36: FM
- 37: AM
- 38: TUNER
- 39: MUSICSERVER
- 40: INTERNETRADIO
- 41: USB
- 42: USB_BACK
- 43: NETWORK
- 45: AIRPLAY
- 48: MULTICH
- 50: SIRIUS
# Item Configuration
demo.items
Switch avrLrZ1_Power "Power" <switch> { channel="onkyo:onkyoAVR:avr-livingroom:zone1#power" }
Switch avrLrZ1_Mute "Mute" <soundvolume> { channel="onkyo:onkyoAVR:avr-livingroom:zone1#mute" }
Number avrLrZ1_Input "Input [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:zone1#input" }
Dimmer avrLrZ1_Volume "Volume [%d]" <soundvolume> { channel="onkyo:onkyoAVR:avr-livingroom:zone1#volume" }
Switch avrLrZ2_Power "Power [%s]" <switch> { channel="onkyo:onkyoAVR:avr-livingroom:zone2#power" }
Switch avrLrZ2_Mute "Mute [%s]" { channel="onkyo:onkyoAVR:avr-livingroom:zone2#mute" }
Number avrLrZ2_Input "Input [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:zone2#input" }
Dimmer avrLrZ2_Volume "Volume [%s]" <soundvolume> { channel="onkyo:onkyoAVR:avr-livingroom:zone2#volume" }
Player avrLrPlayer_Control "Control" <text> { channel="onkyo:onkyoAVR:avr-livingroom:player#control" }
String avrLrPlayer_Title "Title [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:player#title" }
String avrLrPlayer_Album "Album [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:player#album" }
String avrLrPlayer_Artist "Artist [%s]" <parents_2_5> { channel="onkyo:onkyoAVR:avr-livingroom:player#artist" }
String avrLrPlayer_CurrentPlayingTime "CurrentPlayingTime [%s]" <clock> { channel="onkyo:onkyoAVR:avr-livingroom:player#currentPlayingTime" }
Number avrLrPlayer_Listenmode "Listenmode [%d]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:player#listenmode" }
String avrLrPlayer_PlayURI "PlayURI [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:player#playuri" }
Image avrLrPlayer_AlbumArt "AlbumArt [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:player#albumArt" }
String avrLrPlayer_AlbumArtUrl "AlbumArtURL [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:player#albumArtUrl" }
String avrLrNet_Title "Title [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#title" }
String avrLrNet_Control "Control" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#control" }
Number avrLrNet_Selection "Selection [%d]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#selection" }
String avrLrNet_Item0 "Item0 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item0" }
String avrLrNet_Item1 "Item1 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item1" }
String avrLrNet_Item2 "Item2 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item2" }
String avrLrNet_Item3 "Item3 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item3" }
String avrLrNet_Item4 "Item4 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item4" }
String avrLrNet_Item5 "Item5 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item5" }
String avrLrNet_Item6 "Item6 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item6" }
String avrLrNet_Item7 "Item7 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item7" }
String avrLrNet_Item8 "Item8 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item8" }
String avrLrNet_Item9 "Item9 [%s]" <text> { channel="onkyo:onkyoAVR:avr-livingroom:netmenu#item9" }
# Sitemap Configuration
demo.sitemap
sitemap demo label="Onkyo AVR"
{
Frame label="Zone1" {
Switch item=avrLrZ1_Power
Switch item=avrLrZ1_Mute
Selection item=avrLrZ1_Input mappings=[ 0='DVR/VCR', 1='SATELLITE/CABLE', 2='GAME', 3='AUX', 4='GAME', 5='PC', 16='BLURAY/DVD', 32='TAPE1', 33='TAPE2', 34='PHONO', 35='CD', 36='FM', 37='AM', 38='TUNER', 39='MUSICSERVER', 40='INTERNETRADIO', 41='USB', 42='USB_BACK', 43='NETWORK', 45='AIRPLAY', 48='MULTICH', 50='SIRIUS' ]
Slider item=avrLrZ1_Volume
}
Frame label="Zone 2" {
Switch item=avrLrZ2_Power
Switch item=avrLrZ2_Mute
Selection item=avrLrZ2_Input mappings=[ 0='DVR/VCR', 1='SATELLITE/CABLE', 2='GAME', 3='AUX', 4='GAME', 5='PC', 16='BLURAY/DVD', 32='TAPE1', 33='TAPE2', 34='PHONO', 35='CD', 36='FM', 37='AM', 38='TUNER', 39='MUSICSERVER', 40='INTERNETRADIO', 41='USB', 42='USB_BACK', 43='NETWORK', 45='AIRPLAY', 48='MULTICH', 50='SIRIUS' ]
Slider item=avrLrZ2_Volume
}
Frame label="Player" {
Default item=avrLrPlayer_Control
Text item=avrLrPlayer_Title
Text item=avrLrPlayer_Album
Text item=avrLrPlayer_Artist
Text item=avrLrPlayer_CurrentPlayingTime
Selection item=avrLrPlayer_Listenmode mappings=[0=Stereo, 1=Direct, 2=Surround, 15=Mono, 31="Whole House", 66="THX Cinema"]
}
Frame label="NetMenu" {
Text item=avrLrNet_Title
Selection item=avrLrNet_Control mappings=[ Up='Up', Down='Down', Select='Select', Back='Back', PageUp='PageUp', PageDown='PageDow', Select0='Select0', Select1='Select1', Select2='Select2', Select3='Select3', Select4='Select4', Select5='Select5', Select6='Select6', Select7='Select7', Select8='Select8', Select9='Select9' ]
Selection item=avrLrNet_Selection mappings=[ 0='Item0', 1='Item1', 2='Item2', 3='Item3', 4='Item4', 5='Item5', 6='Item6', 7='Item7', 8='Item8', 9='Item9' ]
Text item=avrLrNet_Item0
Text item=avrLrNet_Item1
Text item=avrLrNet_Item2
Text item=avrLrNet_Item3
Text item=avrLrNet_Item4
Text item=avrLrNet_Item5
Text item=avrLrNet_Item6
Text item=avrLrNet_Item7
Text item=avrLrNet_Item8
Text item=avrLrNet_Item9
}
}
# Audio Support
All supported Onkyo AVRs are registered as an audio sink in the framework.
Audio streams are sent to the playuri
channel.