homebridge-xbox-tv
Version:
Homebridge plugin to control Xbox game consoles.
1,200 lines • 32.1 kB
JSON
{
"pluginAlias": "XboxTv",
"pluginType": "platform",
"singular": true,
"fixArrays": true,
"strictValidation": true,
"customUi": true,
"headerDisplay": "This plugin works with Xbox Game Consoles. Devices are exposed to HomeKit as separate accessories and each needs to be manually paired.",
"footerDisplay": "For documentation please see [GitHub repository](https://github.com/grzegorz914/homebridge-xbox-tv).",
"schema": {
"type": "object",
"properties": {
"devices": {
"type": "array",
"items": {
"title": "Device",
"type": "object",
"properties": {
"name": {
"title": "Name",
"type": "string",
"placeholder": "Game console",
"required": true
},
"host": {
"title": "IP/Hostname",
"type": "string",
"placeholder": "192.168.1.6",
"format": "hostname",
"required": true
},
"xboxLiveId": {
"title": "Live ID",
"type": "string",
"placeholder": "FD00000000000000",
"description": "Xbox Live ID",
"required": true
},
"disableAccessory": {
"title": "Disable Accessory",
"type": "boolean",
"default": false,
"description": "Here You can disable this accessory.",
"required": false
},
"webApiControl": {
"title": "Web Api",
"type": "boolean",
"default": false,
"description": "This enable console control over Web Api.",
"required": false
},
"getInputsFromDevice": {
"title": "Load Inputs From Device",
"type": "boolean",
"default": false,
"description": "This function get all available inputs direct from device, manually configured inputs will be skipped.",
"condition": {
"functionBody": "return model.devices[arrayIndices].webApiControl === true;"
},
"required": false
},
"filterGames": {
"title": "Hide Games",
"type": "boolean",
"default": false,
"description": "If enabled, Games will not be displayed on the list of inputs.",
"required": false
},
"filterApps": {
"title": "Hide Apps",
"type": "boolean",
"default": false,
"description": "If enabled, Apps will not be displayed on the list of inputs.",
"required": false
},
"filterSystemApps": {
"title": "Hide System Apps",
"type": "boolean",
"default": false,
"description": "If enabled, System Apps (Accessory, TV, Network Troubleshooter, Xbox Guide) will not be displayed on the list of inputs.",
"required": false
},
"filterDlc": {
"title": "Hide DLC",
"type": "boolean",
"default": false,
"description": "If enabled, DLC will not be displayed on the list of inputs.",
"required": false
},
"inputsDisplayOrder": {
"title": "Inputs Display Order",
"type": "integer",
"minimum": 0,
"maximum": 4,
"default": 0,
"description": "Here select display order of the inputs list.",
"oneOf": [
{
"title": "None",
"enum": [
0
]
},
{
"title": "Ascending by Name",
"enum": [
1
]
},
{
"title": "Descending by Name",
"enum": [
2
]
},
{
"title": "Ascending by Reference",
"enum": [
3
]
},
{
"title": "Descending by Reference",
"enum": [
4
]
}
],
"required": true
},
"inputs": {
"type": "array",
"items": {
"title": "Input",
"type": "object",
"properties": {
"name": {
"title": "Name",
"type": "string",
"placeholder": "Input name",
"description": "Here set Your own name.",
"required": false
},
"titleId": {
"title": "Title Id",
"type": "string",
"placeholder": "Input Title Id",
"description": "Here set title Id. If web api is enable all available in */var/lib/homebridge/xboxTv/inputs_xxxxxx* file.",
"required": false
},
"reference": {
"title": "Reference",
"type": "string",
"placeholder": "Input reference",
"description": "Here set reference. If web api is enable all available in */var/lib/homebridge/xboxTv/inputs_xxxxxx* file.",
"required": false
},
"oneStoreProductId": {
"title": "Product Id",
"type": "string",
"placeholder": "oneStoreProductId",
"description": "Here set the *oneStoreProductId*. If web api enable, switch app/games will be possible, all available in */var/lib/homebridge/xboxTv/inputs_xxxxxx* file.",
"condition": {
"functionBody": "return model.devices[arrayIndices].webApiControl === true;"
},
"required": false
},
"contentType": {
"title": "Content Type",
"type": "string",
"default": "Game",
"description": "Here select source input type.",
"oneOf": [
{
"title": "Game",
"enum": [
"Game"
]
},
{
"title": "Application",
"enum": [
"App"
]
},
{
"title": "System Appliction",
"enum": [
"System App"
]
},
{
"title": "Dlc",
"enum": [
"Dlc"
]
}
],
"required": false
}
}
}
},
"buttons": {
"type": "array",
"items": {
"title": "Button",
"type": "object",
"properties": {
"name": {
"title": "Name",
"type": "string",
"placeholder": "Button name",
"description": "Here set Your own name.",
"required": false
},
"mode": {
"title": "Mode",
"type": "integer",
"minimum": 0,
"maximum": 4,
"default": 0,
"description": "Here select the function mode.",
"oneOf": [
{
"title": "Media Control",
"enum": [
0
]
},
{
"title": "Game Pad Control",
"enum": [
1
]
},
{
"title": "TV Remote Control",
"enum": [
2
]
},
{
"title": "Console Control",
"enum": [
3
]
},
{
"title": "Game/App Control",
"enum": [
4
]
}
],
"required": true
},
"mediaCommand": {
"title": "Media Command",
"type": "string",
"default": "play",
"oneOf": [
{
"title": "Play",
"enum": [
"play"
]
},
{
"title": "Pause",
"enum": [
"pause"
]
},
{
"title": "Play/Pause",
"enum": [
"playPause"
]
},
{
"title": "Stop",
"enum": [
"stop"
]
},
{
"title": "Record",
"enum": [
"record"
]
},
{
"title": "Next Track",
"enum": [
"nextTrack"
]
},
{
"title": "Previous Track",
"enum": [
"prevTrack"
]
},
{
"title": "Fast Forward",
"enum": [
"fastForward"
]
},
{
"title": "Rewind",
"enum": [
"rewind"
]
},
{
"title": "Channel Up",
"enum": [
"channelUp"
]
},
{
"title": "Channel Down",
"enum": [
"channelDown"
]
},
{
"title": "Back",
"enum": [
"back"
]
},
{
"title": "View",
"enum": [
"view"
]
},
{
"title": "Menu",
"enum": [
"menu"
]
},
{
"title": "Seek",
"enum": [
"seek"
]
}
],
"description": "Here select the media command.",
"required": false
},
"gamePadCommand": {
"title": "Game Pad Command",
"type": "string",
"default": "nexus",
"oneOf": [
{
"title": "Nexus",
"enum": [
"nexus"
]
},
{
"title": "View",
"enum": [
"view"
]
},
{
"title": "Menu",
"enum": [
"menu"
]
},
{
"title": "A",
"enum": [
"a"
]
},
{
"title": "B",
"enum": [
"b"
]
},
{
"title": "X",
"enum": [
"x"
]
},
{
"title": "Y",
"enum": [
"y"
]
},
{
"title": "Up",
"enum": [
"up"
]
},
{
"title": "Down",
"enum": [
"down"
]
},
{
"title": "Left",
"enum": [
"left"
]
},
{
"title": "Right",
"enum": [
"right"
]
}
],
"description": "Here select the controler command.",
"required": false
},
"tvRemoteCommand": {
"title": "TV Remote Command",
"type": "string",
"default": "volUp",
"oneOf": [
{
"title": "Volume Up",
"enum": [
"volUp"
]
},
{
"title": "Volume Down",
"enum": [
"volDown"
]
},
{
"title": "Mute",
"enum": [
"volMute"
]
}
],
"description": "Here select the tv remote command.",
"required": false
},
"consoleControlCommand": {
"title": "Console Control Command",
"type": "string",
"default": "reboot",
"oneOf": [
{
"title": "Reboot",
"enum": [
"reboot"
]
},
{
"title": "Record Game DVR",
"enum": [
"recordGameDvr"
]
}
],
"description": "Here select the console control command.",
"required": false
},
"gameAppControlCommand": {
"title": "Product Id",
"type": "string",
"placeholder": "oneStoreProductId",
"description": "Here set the *oneStoreProductId*. If web api enabled, switch app/games will be possible, all available in */var/lib/homebridge/xboxTv/inputs_xxxxxx* file.",
"condition": {
"functionBody": "return model.devices[arrayIndices].webApiControl === true;"
},
"required": false
},
"displayType": {
"title": "Display Type",
"type": "integer",
"default": 0,
"oneOf": [
{
"title": "None/Disabled",
"enum": [
0
]
},
{
"title": "Outlet",
"enum": [
1
]
},
{
"title": "Switch",
"enum": [
2
]
}
],
"description": "Here select display type in HomeKit app.",
"required": true
},
"namePrefix": {
"title": "Prefix",
"type": "boolean",
"description": "Here enable/disable the accessory name as a prefix for button name.",
"required": false
}
}
}
},
"sensorPower": {
"title": "Power",
"type": "boolean",
"default": false,
"description": "This expose Power as a Motion Sensor.",
"required": false
},
"sensorInput": {
"title": "Input",
"type": "boolean",
"default": false,
"description": "This expose Input as a Motion Sensor.",
"required": false
},
"sensorScreenSaver": {
"title": "Screen Saver",
"type": "boolean",
"default": false,
"description": "This expose Screen Saver as a Motion Sensor.",
"required": false
},
"sensorInputs": {
"type": "array",
"items": {
"title": "Inputs",
"type": "object",
"description": "Here create Input/App Sensors based on reference, sensor will active if switch to it.",
"properties": {
"name": {
"title": "Name",
"type": "string",
"placeholder": "Name",
"description": "Here set Your own name.",
"required": false
},
"reference": {
"title": "Reference",
"type": "string",
"placeholder": "Input/App reference",
"description": "Here set the Input/App reference.",
"required": false
},
"displayType": {
"title": "Type",
"type": "integer",
"default": 0,
"oneOf": [
{
"title": "None/Disabled",
"enum": [
0
]
},
{
"title": "Motion Sensor",
"enum": [
1
]
},
{
"title": "Occupancy Sensor",
"enum": [
2
]
},
{
"title": "Contact Sensor",
"enum": [
3
]
}
],
"description": "Here select sensor type to be exposed in HomeKit app.",
"required": true
},
"namePrefix": {
"title": "Prefix",
"type": "boolean",
"description": "Here enable/disable the accessory name as a prefix for sensor name.",
"required": false
}
}
}
},
"webApiPowerOnOff": {
"title": "Power Control",
"type": "boolean",
"default": false,
"description": "This enable power control over Web Api.",
"condition": {
"functionBody": "return model.devices[arrayIndices].webApiControl === true;"
},
"required": false
},
"webApiRcControl": {
"title": "Remote Control",
"type": "boolean",
"default": false,
"description": "This enable game pad control over Web Api.",
"condition": {
"functionBody": "return model.devices[arrayIndices].webApiControl === true;"
},
"required": false
},
"webApiVolumeControl": {
"title": "Volume Control",
"type": "boolean",
"default": false,
"description": "This enable volume/mute control over Web Api.",
"condition": {
"functionBody": "return model.devices[arrayIndices].webApiControl === true;"
},
"required": false
},
"webApiToken": {
"title": "Web Api Token",
"type": "string",
"placeholder": "Web Api Token",
"description": "Here put the reponse Token (value after ?code=) from the authorization URL.",
"format": "password",
"condition": {
"functionBody": "return model.devices[arrayIndices].webApiControl === true;"
},
"required": false
},
"webApiClientId": {
"title": "Client Id",
"type": "string",
"placeholder": "a34ac209-edab-4b08-91e7-a4558d8da1bd",
"description": "Here set your own Client Id from Azure AD or leave empty if you do not have own account.",
"condition": {
"functionBody": "return model.devices[arrayIndices].webApiControl === true;"
},
"required": false
},
"webApiClientSecret": {
"title": "Client Secret",
"type": "string",
"placeholder": "Client Secret",
"description": "Here set your Client Secret from Azure AD or leave empty if you do not have own account.",
"format": "password",
"condition": {
"functionBody": "return model.devices[arrayIndices].webApiControl === true;"
},
"required": false
},
"infoButtonCommand": {
"title": "Info Button",
"type": "string",
"default": "nexus",
"oneOf": [
{
"title": "Game Pad View",
"enum": [
"view"
]
},
{
"title": "Game Pad Nexus",
"enum": [
"nexus"
]
},
{
"title": "Game Pad Menu",
"enum": [
"menu"
]
},
{
"title": "Game Pad A",
"enum": [
"a"
]
},
{
"title": "Game Pad B",
"enum": [
"b"
]
},
{
"title": "Game Pad X",
"enum": [
"x"
]
},
{
"title": "Game Pad Y",
"enum": [
"y"
]
}
],
"description": "Here select the function of info button in RC.",
"required": false
},
"volumeControlNamePrefix": {
"title": "Volume Control Name Prefix",
"type": "boolean",
"default": false,
"description": "Here enable/disable the accessory name as a prefix for volume control name.",
"required": false
},
"volumeControlName": {
"title": "Volume Control Name",
"type": "string",
"placeholder": "Name",
"description": "Here set Your own volume control name or leave empty.",
"required": false
},
"volumeControl": {
"title": "Volume Control",
"type": "integer",
"minimum": 0,
"maximum": 2,
"default": 0,
"description": "Here select what a volume control mode You want to use. If select *None/Disabled* only hardware buttons in RC app can be used to control volume.",
"oneOf": [
{
"title": "None/Disabled",
"enum": [
0
]
},
{
"title": "Slider",
"enum": [
1
]
},
{
"title": "Fan",
"enum": [
2
]
}
],
"required": false
},
"disableLogDeviceInfo": {
"title": "Disable Log Device Info",
"type": "boolean",
"default": false,
"description": "This disable logging device info by every connections device to the network.",
"required": false
},
"disableLogInfo": {
"title": "Disable Log Info",
"type": "boolean",
"default": false,
"required": false
},
"disableLogSuccess": {
"title": "Disable Log Success",
"type": "boolean",
"default": false,
"required": false
},
"disableLogWarn": {
"title": "Disable Log Warn",
"type": "boolean",
"default": false,
"required": false
},
"disableLogError": {
"title": "Disable Log Error",
"type": "boolean",
"default": false,
"required": false
},
"enableDebugMode": {
"title": "Enable Log Debug",
"type": "boolean",
"default": false,
"required": false
},
"restFul": {
"title": "RESTFul",
"type": "object",
"properties": {
"enable": {
"title": "Enable",
"type": "boolean",
"default": false,
"description": "This enable RESTful server."
},
"debug": {
"title": "Debug",
"type": "boolean",
"default": false,
"description": "This enable debug mode for RESTFul.",
"condition": {
"functionBody": "return model.devices[arrayIndices].restFul.enable === true;"
},
"required": false
},
"port": {
"title": "Port",
"type": "integer",
"placeholder": 3000,
"description": "Here set the listening Port for RESTful server.",
"condition": {
"functionBody": "return model.devices[arrayIndices].restFul.enable === true;"
},
"required": false
}
}
},
"mqtt": {
"title": "MQTT",
"type": "object",
"properties": {
"enable": {
"title": "Enable",
"type": "boolean",
"default": false,
"description": "This enable MQTT client."
},
"debug": {
"title": "Debug",
"type": "boolean",
"default": false,
"description": "This enable debug mode for MQTT.",
"condition": {
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true;"
},
"required": false
},
"host": {
"title": "IP/Hostname",
"type": "string",
"placeholder": "ip or hostname",
"format": "hostname",
"description": "Here set the IP/Hostname of MQTT Broker.",
"condition": {
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true;"
},
"required": false
},
"port": {
"title": "Port",
"type": "integer",
"placeholder": 1883,
"description": "Here set the port of MQTT Broker.",
"condition": {
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true;"
},
"required": false
},
"clientId": {
"title": "Client ID",
"type": "string",
"placeholder": "client id",
"description": "Here optional set the Client ID of MQTT Broker.",
"condition": {
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true"
},
"required": false
},
"prefix": {
"title": "Prefix",
"type": "string",
"placeholder": "home/envoy",
"description": "Here set the prefix.",
"condition": {
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true;"
},
"required": false
},
"auth": {
"title": "Authorization",
"type": "boolean",
"default": false,
"description": "This enable authorization for MQTT Broker.",
"condition": {
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true;"
},
"required": false
},
"user": {
"title": "User",
"type": "string",
"placeholder": "user",
"description": "Here set the user of MQTT Broker.",
"condition": {
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true && model.devices[arrayIndices].mqtt.auth === true;"
},
"required": false
},
"passwd": {
"title": "Password",
"type": "string",
"placeholder": "password",
"description": "Here set the password of MQTT Broker.",
"format": "password",
"condition": {
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true && model.devices[arrayIndices].mqtt.auth === true;"
},
"required": false
}
}
}
}
}
}
}
},
"layout": [
{
"key": "devices",
"type": "tabarray",
"title": "{{ value.name || 'device' }}",
"items": [
"devices[].name",
"devices[].host",
"devices[].xboxLiveId",
"devices[].disableAccessory",
{
"key": "devices[]",
"type": "section",
"title": "Inputs",
"expandable": true,
"expanded": false,
"items": [
"devices[].getInputsFromDevice",
"devices[].filterGames",
"devices[].filterApps",
"devices[].filterSystemApps",
"devices[].filterDlc",
"devices[].inputsDisplayOrder",
{
"key": "devices[].inputs",
"type": "tabarray",
"title": "{{ value.name || 'input' }}",
"items": [
"devices[].inputs[].name",
"devices[].inputs[].reference",
"devices[].inputs[].oneStoreProductId",
"devices[].inputs[].contentType"
],
"condition": {
"functionBody": "return model.devices && model.devices[arrayIndices].getInputsFromDevice === false || model.devices[arrayIndices].webApiControl === false;"
}
}
],
"condition": {
"functionBody": "return model.devices[arrayIndices].disableAccessory === false;"
}
},
{
"key": "devices[]",
"type": "section",
"title": "Buttons",
"expandable": true,
"expanded": false,
"items": [
{
"key": "devices[].buttons",
"type": "tabarray",
"title": "{{ value.name || 'button' }}",
"items": [
"devices[].buttons[].name",
"devices[].buttons[].mode",
"devices[].buttons[].mediaCommand",
"devices[].buttons[].displayType",
"devices[].buttons[].namePrefix"
],
"condition": {
"functionBody": "return model.devices[arrayIndices].buttons[arrayIndices].mode === 0;"
}
},
{
"key": "devices[].buttons",
"type": "tabarray",
"title": "{{ value.name || 'button' }}",
"items": [
"devices[].buttons[].name",
"devices[].buttons[].mode",
"devices[].buttons[].gamePadCommand",
"devices[].buttons[].displayType",
"devices[].buttons[].namePrefix"
],
"condition": {
"functionBody": "return model.devices[arrayIndices].buttons[arrayIndices].mode === 1;"
}
},
{
"key": "devices[].buttons",
"type": "tabarray",
"title": "{{ value.name || 'button' }}",
"items": [
"devices[].buttons[].name",
"devices[].buttons[].mode",
"devices[].buttons[].tvRemoteCommand",
"devices[].buttons[].displayType",
"devices[].buttons[].namePrefix"
],
"condition": {
"functionBody": "return model.devices[arrayIndices].buttons[arrayIndices].mode === 2;"
}
},
{
"key": "devices[].buttons",
"type": "tabarray",
"title": "{{ value.name || 'button' }}",
"items": [
"devices[].buttons[].name",
"devices[].buttons[].mode",
"devices[].buttons[].consoleControlCommand",
"devices[].buttons[].displayType",
"devices[].buttons[].namePrefix"
],
"condition": {
"functionBody": "return model.devices[arrayIndices].buttons[arrayIndices].mode === 3;"
}
},
{
"key": "devices[].buttons",
"type": "tabarray",
"title": "{{ value.name || 'button' }}",
"items": [
"devices[].buttons[].name",
"devices[].buttons[].mode",
"devices[].buttons[].gameAppControlCommand",
"devices[].buttons[].displayType",
"devices[].buttons[].namePrefix"
],
"condition": {
"functionBody": "return model.devices[arrayIndices].buttons[arrayIndices].mode === 4;"
}
}
],
"condition": {
"functionBody": "return model.devices[arrayIndices].disableAccessory === false;"
}
},
{
"key": "devices[]",
"type": "section",
"title": "Advanced Settings",
"expandable": true,
"expanded": false,
"items": [
{
"key": "devices[]",
"type": "tabarray",
"title": "{{ value.title }}",
"items": [
{
"key": "devices[]",
"title": "Volume",
"items": [
"devices[].volumeControlNamePrefix",
"devices[].volumeControlName",
"devices[].volumeControl"
]
},
{
"key": "devices[]",
"title": "Sensors",
"items": [
"devices[].sensorPower",
"devices[].sensorScreenSaver",
"devices[].sensorInput",
{
"key": "devices[]",
"type": "section",
"title": "Custom Inputs",
"expandable": true,
"expanded": false,
"items": [
{
"key": "devices[].sensorInputs",
"type": "tabarray",
"title": "{{ value.name || 'sensor' }}",
"items": [
"devices[].sensorInputs[].name",
"devices[].sensorInputs[].reference",
"devices[].sensorInputs[].displayType",
"devices[].sensorInputs[].namePrefix"
]
}
]
}
]
},
{
"key": "devices[]",
"title": "Device",
"items": [
"devices[].infoButtonCommand"
]
},
{
"key": "devices[]",
"title": "Web Api",
"items": [
"devices[].webApiControl",
"devices[].webApiPowerOnOff",
{
"key": "devices[].webApiToken",
"type": "password"
},
"devices[].webApiClientId",
{
"key": "devices[].webApiClientSecret",
"type": "password"
}
]
},
{
"key": "devices[]",
"title": "Log",
"items": [
"devices[].disableLogDeviceInfo",
"devices[].disableLogInfo",
"devices[].disableLogSuccess",
"devices[].disableLogWarn",
"devices[].disableLogError",
"devices[].enableDebugMode"
]
},
{
"key": "devices[]",
"title": "External Integrations",
"items": [
{
"key": "devices[]",
"type": "tabarray",
"title": "{{ value.title }}",
"items": [
{
"key": "devices[].restFul",
"title": "RESTFul",
"items": [
"devices[].restFul.enable",
"devices[].restFul.debug",
"devices[].restFul.port"
]
},
{
"key": "devices[].mqtt",
"title": "MQTT",
"items": [
"devices[].mqtt.enable",
"devices[].mqtt.debug",
"devices[].mqtt.host",
"devices[].mqtt.port",
"devices[].mqtt.clientId",
"devices[].mqtt.prefix",
"devices[].mqtt.auth",
"devices[].mqtt.user",
{
"key": "devices[].mqtt.passwd",
"type": "password"
}
]
}
]
}
]
}
]
}
],
"condition": {
"functionBody": "return model.devices[arrayIndices].disableAccessory === false;"
}
}
]
}
]
}