# Vizio Binding
This binding connects Vizio TVs to openHAB.
The TV must support the Vizio SmartCast API that is found on 2016 and later models.
# Supported Things
There is currently only one supported thing type, which represents a Vizio TV using the vizio_tv
id.
Multiple Things can be added if more than one Vizio TV is to be controlled.
# Discovery
Auto-discovery is supported if the Vizio TV can be located on the local network using mDNS. Otherwise the thing must be manually added. When the TV is discovered, a pairing process to obtain an authentication token from the TV must be completed using the openHAB console. See below for details.
# Thing Configuration
The thing has a few configuration parameters:
Parameter | Description |
---|---|
hostName | The host name or IP address of the Vizio TV. Mandatory. |
port | The port on the Vizio TV that listens for https connections. Default 7345; Use 9000 for older model TVs. |
authToken | The token that is used to authenticate all commands sent to the TV. See below for instructions to obtain via the openHAB console. |
appListJson | A JSON string that defines the apps that are available in the activeApp channel drop down. See below for instructions for editing. |
# Console Commands for Pairing:
To obtain an authorization token that enables openHAB to authenticate with the TV, the following console commands must be used while the TV is turned on. The first command will send a pairing start request to the TV. This triggers the TV to display a 4-digit pairing code on screen that must be sent with the second command.
Start Pairing:
openhab:vizio <thingUID> start_pairing <deviceName>
Substitute <thingUID>
with thing's id, ie: vizio_tv:00bc3e711660
Substitute <deviceName>
the desired device name that will appear in the TV's settings, under Mobile Devices, ie: Vizio-openHAB
Submit Pairing Code:
openhab:vizio <thingUID> submit_code <pairingCode>
Substitute <thingUID>
with the same thing id used above
Substitute <pairingCode>
with the 4-digit pairing code displayed on the TV, ie: 1234
The console should then indicate that pairing was successful (token will be displayed) and that the token was saved to the thing configuration. If using file-based provisioning of the thing, the authorization token must be added to the thing configuration manually. With an authorization token in place, the binding can now control the TV.
The authorization token text can be re-used in the event that it becomes necessary to setup the binding again. By simply adding the token that is already recognized by the TV to the thing configuration, the pairing process can be bypassed.
# Channels
The following channels are available:
Channel ID | Item Type | Description |
---|---|---|
power | Switch | Turn the power on the TV on or off. Note: TV may not turn on if power is switched off and the TV is configured for Eco mode. |
volume | Dimmer | Control the volume on the TV (0-100%). |
mute | Switch | Mute or unmute the volume on the TV. |
source | String | Select the source input on the TV. The dropdown list is automatically populated from the TV. |
activeApp | String | A dropdown containing a list of streaming apps defined by the appListJson config option that can be launched by the binding. An app started via remote control is automatically selected. |
control | Player | Control Playback e.g. Play/Pause/Next/Previous/FForward/Rewind |
button | String | Sends a remote control command the TV. See list of available commands below. |
# List of available button commands for Vizio TVs:
PowerOn
PowerOff
PowerToggle
VolumeUp
VolumeDown
MuteOn (may only work as a toggle)
MuteOff (may only work as a toggle)
MuteToggle
ChannelUp
ChannelDown
PreviousCh
InputToggle
SeekFwd
SeekBack
Play
Pause
Up
Down
Left
Right
Ok
Back
Info
Menu
Home
Exit
Smartcast
ccToggle
PictureMode
WideMode
WideToggle
# App List Configuration:
The Vizio API to launch and identify currently running apps on the TV is very complex.
To handle this, the binding maintains a JSON database of applications and their associated metadata in order to populate the activeApp
dropdown with available apps.
When the thing is started for the first time, this JSON database is saved into the appListJson
configuration parameter.
This list of apps can be edited via the script editor on the thing configuration.
By editing the JSON, apps that are not desired can be removed from the activeApp
dropdown and newly discovered apps can be added.
An entry for an application has a name
element and a config
element containing APP_ID
, NAME_SPACE
and MESSAGE
(null for most apps):
{
"name": "Crackle",
"config": {
"APP_ID": "5",
"NAME_SPACE": 4,
"MESSAGE": null
}
},
If an app is running that is not currently recognized by the binding, the activeApp
channel will display a message that contains the APP_ID
and NAME_SPACE
which can be used to create the missing record for that app in the JSON.
If an app that is in the JSON database fails to start when selected, try adjusting the NAME_SPACE
value for that app.
NAME_SPACE
seems to be a version number and adjusting the number up or down may correct the mismatch between the TV and the binding.
A current list of APP_ID
's can be found at http://scfs.vizio.com/appservice/vizio_apps_prod.json (opens new window)
and NAME_SPACE
& MESSAGE
values needed can be found at http://scfs.vizio.com/appservice/app_availability_prod.json (opens new window)
If there is an error in the user supplied appListJson
, the thing will fail to start and display a CONFIGURATION_ERROR message.
If all text in appListJson
is removed (set to null) and the thing configuration saved, the binding will restore appListJson
from the binding's JSON db.
# Full Example
vizio.things:
// Vizio TV
vizio:vizio_tv:mytv1 "My Vizio TV" [ hostName="192.168.10.1", port=7345, authToken="idspisp0pd" ]
vizio.items:
// Vizio TV items:
Switch TV_Power "Power" { channel="vizio:vizio_tv:mytv1:power" }
Dimmer TV_Volume "Volume [%d %%]" { channel="vizio:vizio_tv:mytv1:volume" }
Switch TV_Mute "Mute" { channel="vizio:vizio_tv:mytv1:mute" }
String TV_Source "Source Input [%s]" { channel="vizio:vizio_tv:mytv1:source" }
String TV_ActiveApp "Current App: [%s]" { channel="vizio:vizio_tv:mytv1:activeApp" }
Player TV_Control "Playback Control" { channel="vizio:vizio_tv:mytv1:control" }
String TV_Button "Send Command to TV" { channel="vizio:vizio_tv:mytv1:button" }
vizio.sitemap:
sitemap vizio label="Vizio" {
Frame label="My Vizio TV" {
Switch item=TV_Power
// Volume can be a Setpoint also
Slider item=TV_Volume minValue=0 maxValue=100 step=1 icon="soundvolume"
Switch item=TV_Mute icon="soundvolume_mute"
Selection item=TV_Source icon="screen"
Selection item=TV_ActiveApp icon="screen"
Default item=TV_Control
// This Selection is deprecated in favor of the Buttongrid element below
Selection item=TV_Button
Buttongrid label="Remote Control" staticIcon=material:tv_remote item=TV_Button buttons=[1:1:POWER="PowerToggle"=switch-off, 1:2:Home="Home"=f7:house, 1:3:Menu="Menu", 1:4:Exit="Exit", 2:2:Up="Up"=f7:arrowtriangle_up, 4:2:Down="Down"=f7:arrowtriangle_down, 3:1:Left="Left"=f7:arrowtriangle_left, 3:3:Right="Right"=f7:arrowtriangle_right, 3:2:Ok="Ok", 2:4:VolumeUp="Volume +", 4:4:VolumeDown="Volume -", 3:4:MuteToggle="Mute"=soundvolume_mute, 5:1:Info="Info", 5:2:Back="Back", 5:3:Smartcast="Smartcast", 5:4:InputToggle="Input Toggle", 6:1:SeekBack="Reverse"=f7:backward, 6:2:Play="Play"=f7:play, 6:3:Pause="Pause"=f7:pause, 6:4:SeekFwd="Forward"=f7:forward, 7:1:ChannelUp="Channel +", 7:2:ChannelDown="Channel -", 7:3:PreviousCh="Previous Ch", 8:1:PictureMode="Picture Mode", 8:2:WideMode="Wide Mode", 8:3:WideToggle="Wide Toggle", 8:4:ccToggle="CC Toggle"]
}
}
← Vitotronic Volumio →