UNPKG

homebridge-xbox-tv

Version:

Homebridge plugin to control Xbox game consoles.

1,200 lines • 32.1 kB
{ "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;" } } ] } ] }