UNPKG

homebridge-xbox-tv

Version:

Homebridge plugin to control Xbox game consoles.

1,489 lines • 37.6 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": { "name": { "title": "Platform", "type": "string", "default": "Xbox TV" }, "devices": { "type": "array", "items": { "title": "Device", "type": "object", "properties": { "name": { "title": "Name", "type": "string", "placeholder": "Game console" }, "host": { "title": "IP/Hostname", "type": "string", "placeholder": "192.168.1.10 or xbox.local", "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)(\\.([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?))*)$" }, "xboxLiveId": { "title": "Live ID", "type": "string", "placeholder": "FD00000000000000", "description": "Xbox Live ID" }, "displayType": { "title": "Accessory type", "type": "integer", "minimum": 0, "maximum": 4, "default": 2, "anyOf": [ { "title": "None / Disabled", "enum": [ 0 ] }, { "title": "Television", "enum": [ 1 ] }, { "title": "TV Set Top Box", "enum": [ 2 ] }, { "title": "TV Streaming Stick", "enum": [ 3 ] }, { "title": "Audio Receiver", "enum": [ 4 ] } ], "description": "Accessory type for Home app" }, "webApi": { "title": "Web Api", "type": "object", "properties": { "enable": { "title": "Enable", "type": "boolean", "default": false, "description": "This enable console control over Web Api." }, "token": { "title": "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].webApi.enable === true;" } }, "clientId": { "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].webApi.enable === true;" } }, "clientSecret": { "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].webApi.enable === true;" } } }, "allOf": [ { "if": { "required": [ "enable" ], "properties": { "enable": { "const": true } } }, "then": { "required": [ "token" ] } } ] }, "inputs": { "title": "Inputs", "type": "object", "properties": { "getFromDevice": { "title": "Load Inputs From Device", "type": "boolean", "description": "This function get all available inputs direct from device, manually configured inputs will be skipped.", "condition": { "functionBody": "return model.devices[arrayIndices].webApi.enable === true;" } }, "filterGames": { "title": "Hide Games", "type": "boolean", "default": false, "description": "If enabled, Games will not be displayed on the list of inputs." }, "filterApps": { "title": "Hide Apps", "type": "boolean", "default": false, "description": "If enabled, Apps will not be displayed on the list of inputs." }, "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." }, "filterDlc": { "title": "Hide DLC", "type": "boolean", "default": false, "description": "If enabled, DLC will not be displayed on the list of inputs." }, "displayOrder": { "title": "Display Order", "type": "integer", "minimum": 0, "maximum": 4, "description": "Here select display order of the inputs list.", "anyOf": [ { "title": "Disabled", "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 ] } ] }, "data": { "title": "Inputs", "type": "array", "items": { "title": "Input", "type": "object", "properties": { "name": { "title": "Name", "type": "string", "placeholder": "Input name", "description": "Here set Your own name." }, "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." }, "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." }, "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].webApi.enable === true;" } }, "contentType": { "title": "Content Type", "type": "string", "description": "Here select source input type.", "anyOf": [ { "title": "Game", "enum": [ "Game" ] }, { "title": "Application", "enum": [ "App" ] }, { "title": "System Appliction", "enum": [ "System App" ] }, { "title": "Dlc", "enum": [ "Dlc" ] } ] } } }, "condition": { "functionBody": "return model.devices[arrayIndices].inputs.getFromDevice === false || model.devices[arrayIndices].webApi.enable === false;" } } } }, "buttons": { "title": "Button", "type": "array", "items": { "type": "object", "properties": { "displayType": { "title": "Display Type", "type": "integer", "minimum": 0, "maximum": 2, "description": "Here select display type in HomeKit app.", "anyOf": [ { "title": "Disabled", "enum": [ 0 ] }, { "title": "Outlet", "enum": [ 1 ] }, { "title": "Switch", "enum": [ 2 ] } ] }, "name": { "title": "Name", "type": "string", "placeholder": "Button name", "description": "Here set Your own name." }, "mode": { "title": "Mode", "type": "integer", "minimum": 0, "maximum": 4, "description": "Here select the function mode.", "anyOf": [ { "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 ] } ], "condition": { "functionBody": "return model.devices[arrayIndices[0]].buttons[arrayIndices[1]].displayType > 0;" } }, "mediaCommand": { "title": "Media Command", "type": "string", "description": "Here select the media command.", "anyOf": [ { "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" ] } ], "condition": { "functionBody": "return model.devices[arrayIndices[0]].buttons[arrayIndices[1]].displayType > 0 && model.devices[arrayIndices[0]].buttons[arrayIndices[1]].mode === 0;" } }, "gamePadCommand": { "title": "Game Pad Command", "type": "string", "description": "Here select the controler command.", "anyOf": [ { "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" ] } ], "condition": { "functionBody": "return model.devices[arrayIndices[0]].buttons[arrayIndices[1]].displayType > 0 && model.devices[arrayIndices[0]].buttons[arrayIndices[1]].mode === 1;" } }, "tvRemoteCommand": { "title": "TV Remote Command", "type": "string", "description": "Here select the tv remote command.", "anyOf": [ { "title": "Volume Up", "enum": [ "volUp" ] }, { "title": "Volume Down", "enum": [ "volDown" ] }, { "title": "Mute", "enum": [ "volMute" ] } ], "condition": { "functionBody": "return model.devices[arrayIndices[0]].buttons[arrayIndices[1]].displayType > 0 && model.devices[arrayIndices[0]].buttons[arrayIndices[1]].mode === 2;" } }, "consoleControlCommand": { "title": "Console Control Command", "type": "string", "description": "Here select the console control command.", "anyOf": [ { "title": "Reboot", "enum": [ "reboot" ] }, { "title": "Record Game DVR", "enum": [ "recordGameDvr" ] } ], "condition": { "functionBody": "return model.devices[arrayIndices[0]].buttons[arrayIndices[1]].displayType > 0 && model.devices[arrayIndices[0]].buttons[arrayIndices[1]].mode === 3;" } }, "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[0]].buttons[arrayIndices[1]].displayType > 0 && model.devices[arrayIndices[0]].buttons[arrayIndices[1]].mode === 4;" } }, "namePrefix": { "title": "Prefix", "type": "boolean", "description": "Here enable/disable the accessory name as a prefix for button name.", "condition": { "functionBody": "return model.devices[arrayIndices[0]].buttons[arrayIndices[1]].displayType > 0;" } } }, "allOf": [ { "if": { "required": [ "displayType" ], "properties": { "displayType": { "enum": [ 1, 2 ] } } }, "then": { "required": [ "mode" ] } }, { "if": { "required": [ "displayType", "mode" ], "properties": { "displayType": { "enum": [ 1, 2 ] }, "mode": { "enum": [ 0 ] } } }, "then": { "required": [ "mediaCommand" ] } }, { "if": { "required": [ "displayType", "mode" ], "properties": { "displayType": { "enum": [ 1, 2 ] }, "mode": { "enum": [ 1 ] } } }, "then": { "required": [ "gamePadCommand" ] } }, { "if": { "required": [ "displayType", "mode" ], "properties": { "displayType": { "enum": [ 1, 2 ] }, "mode": { "enum": [ 2 ] } } }, "then": { "required": [ "tvRemoteCommand" ] } }, { "if": { "required": [ "displayType", "mode" ], "properties": { "displayType": { "enum": [ 1, 2 ] }, "mode": { "enum": [ 3 ] } } }, "then": { "required": [ "consoleControlCommand" ] } }, { "if": { "required": [ "displayType", "mode" ], "properties": { "displayType": { "enum": [ 1, 2 ] }, "mode": { "enum": [ 4 ] } } }, "then": { "required": [ "gameAppControlCommand" ] } } ] } }, "sensors": { "type": "array", "items": { "title": "Sensors", "type": "object", "properties": { "displayType": { "title": "Display Type", "type": "integer", "minimum": 0, "maximum": 3, "default": 0, "anyOf": [ { "title": "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." }, "mode": { "title": "Mode", "type": "integer", "minimum": 0, "maximum": 5, "anyOf": [ { "title": "App / Games", "enum": [ 0 ] }, { "title": "Power", "enum": [ 1 ] }, { "title": "Volume", "enum": [ 2 ] }, { "title": "Mute", "enum": [ 3 ] }, { "title": "Screen Saver", "enum": [ 4 ] }, { "title": "Play State", "enum": [ 5 ] } ], "description": "Here select the sensor mode.", "condition": { "functionBody": "return model.devices[arrayIndices[0]].sensors[arrayIndices[1]].displayType > 0;" } }, "name": { "title": "Name", "type": "string", "placeholder": "Name", "description": "Here set Your own name." }, "namePrefix": { "title": "Prefix", "type": "boolean", "description": "Here enable the accessory name as a prefix for sensor name.", "condition": { "functionBody": "return model.devices[arrayIndices[0]].sensors[arrayIndices[1]].displayType > 0;" } }, "pulse": { "title": "Pulse", "type": "boolean", "description": "Here enable sensor pulse, sensor send pulse and fired on every value change of selected mode.", "condition": { "functionBody": "return model.devices[arrayIndices[0]].sensors[arrayIndices[1]].displayType > 0;" } }, "reference": { "title": "Reference", "type": "string", "placeholder": "Reference", "description": "Here set the channel reference, sensor fired if switch to this reference.", "condition": { "functionBody": "return model.devices[arrayIndices[0]].sensors[arrayIndices[1]].displayType > 0 && model.devices[arrayIndices[0]].sensors[arrayIndices[1]].pulse === false && model.devices[arrayIndices[0]].sensors[arrayIndices[1]].mode === 0;" } }, "level": { "title": "Level", "type": "number", "minimum": 0, "maximum": 100, "multipleOf": 1, "description": "Here set the level between 0-100% at which the sensor fired.", "condition": { "functionBody": "return model.devices[arrayIndices[0]].sensors[arrayIndices[1]].displayType > 0 && model.devices[arrayIndices[0]].sensors[arrayIndices[1]].pulse === false && model.devices[arrayIndices[0]].sensors[arrayIndices[1]].mode === 2;" } } }, "allOf": [ { "if": { "required": [ "displayType" ], "properties": { "displayType": { "enum": [ 1, 2, 3 ] } } }, "then": { "required": [ "mode" ] } }, { "if": { "required": [ "displayType", "mode", "pulse" ], "properties": { "displayType": { "enum": [ 1, 2, 3 ] }, "pulse": { "const": false }, "mode": { "enum": [ 0 ] } } }, "then": { "required": [ "reference" ] } }, { "if": { "required": [ "displayType", "mode", "pulse" ], "properties": { "displayType": { "enum": [ 1, 2, 3 ] }, "pulse": { "const": false }, "mode": { "enum": [ 2 ] } } }, "then": { "required": [ "level" ] } } ] } }, "volume": { "title": "Volume", "type": "object", "properties": { "displayType": { "title": "Display Type", "type": "integer", "description": "Here select what a extra volume/mute control type You want to use.", "anyOf": [ { "title": "Disabled", "enum": [ 0 ] }, { "title": "Lightbulb", "enum": [ 1 ] }, { "title": "Fan", "enum": [ 2 ] }, { "title": "TV Speaker (HW buttons)", "enum": [ 3 ] }, { "title": "TV Speaker / Lightbulb", "enum": [ 4 ] }, { "title": "TV Speaker / Fan", "enum": [ 5 ] } ] }, "name": { "title": "Name", "type": "string", "placeholder": "Volume Control Name", "description": "Here set Your own volume control name or leave empty.", "condition": { "functionBody": "return model.devices[arrayIndices[0]].volume.displayType > 0;" } }, "namePrefix": { "title": "Prefix", "type": "boolean", "description": "Here enable/disable the accessory name as a prefix for volume control name.", "condition": { "functionBody": "return model.devices[arrayIndices[0]].volume.displayType > 0;" } } } }, "infoButtonCommand": { "title": "Info Button", "type": "string", "default": "nexus", "description": "Here select the function of info button in RC.", "anyOf": [ { "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" ] } ] }, "log": { "title": "Log", "type": "object", "properties": { "deviceInfo": { "title": "Device Info", "type": "boolean", "default": true, "description": "This enable log level device info, will display overall device info by every plugin restart" }, "success": { "title": "Success", "type": "boolean", "default": true, "description": "This enable log level success" }, "info": { "title": "Info", "type": "boolean", "default": false, "description": "This enable log level info" }, "warn": { "title": "Warn", "type": "boolean", "default": true, "description": "This enable log level warn" }, "error": { "title": "Error", "type": "boolean", "default": true, "description": "This enable log level error" }, "debug": { "title": "Debug", "type": "boolean", "default": false, "description": "This enable log level debug" } } }, "restFul": { "title": "RESTFul", "type": "object", "properties": { "enable": { "title": "Enable", "type": "boolean", "default": false, "description": "This enable RESTful server." }, "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;" } } } }, "mqtt": { "title": "MQTT", "type": "object", "properties": { "enable": { "title": "Enable", "type": "boolean", "default": false, "description": "This enable MQTT client." }, "host": { "title": "IP/Hostname", "type": "string", "placeholder": "192.168.1.20 or mqtt.local", "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)(\\.([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?))*)$", "description": "Here set the IP/Hostname of MQTT Broker.", "condition": { "functionBody": "return model.devices[arrayIndices].mqtt.enable === true;" } }, "port": { "title": "Port", "type": "integer", "placeholder": 1883, "description": "Here set the port of MQTT Broker.", "condition": { "functionBody": "return model.devices[arrayIndices].mqtt.enable === true;" } }, "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" } }, "prefix": { "title": "Prefix", "type": "string", "placeholder": "home", "description": "Here set the prefix.", "condition": { "functionBody": "return model.devices[arrayIndices].mqtt.enable === true;" } }, "auth": { "title": "Authorization", "type": "object", "properties": { "enable": { "title": "Enable", "type": "boolean", "description": "This enable authorization for MQTT Broker." }, "user": { "title": "User", "type": "string", "placeholder": "user", "description": "Here set the user of MQTT Broker.", "condition": { "functionBody": "return model.devices[arrayIndices].mqtt.auth.enable === true;" } }, "passwd": { "title": "Password", "type": "string", "placeholder": "password", "description": "Here set the password of MQTT Broker.", "format": "password", "condition": { "functionBody": "return model.devices[arrayIndices].mqtt.auth.enable === true;" } } }, "condition": { "functionBody": "return model.devices[arrayIndices].mqtt.enable === true;" }, "allOf": [ { "if": { "required": [ "enable" ], "properties": { "enable": { "const": true } } }, "then": { "required": [ "user", "passwd" ] } } ] } }, "allOf": [ { "if": { "required": [ "enable" ], "properties": { "enable": { "const": true } } }, "then": { "required": [ "host" ] } } ] } }, "required": [ "name", "host", "xboxLiveId", "displayType" ] } } } }, "layout": [ { "key": "devices", "type": "tabarray", "title": "{{ value.name || 'Device' }}", "items": [ "devices[].name", "devices[].host", "devices[].xboxLiveId", "devices[].displayType", { "key": "devices[].inputs", "type": "section", "title": "Inputs", "expandable": true, "expanded": false, "items": [ "devices[].inputs.getFromDevice", "devices[].inputs.filterGames", "devices[].inputs.filterApps", "devices[].inputs.filterSystemApps", "devices[].inputs.filterDlc", "devices[].inputs.displayOrder", { "key": "devices[].inputs.data", "type": "tabarray", "title": "{{ value.name || 'Input' }}", "items": [ "devices[].inputs.data[].name", "devices[].inputs.data[].titleId", "devices[].inputs.data[].reference", "devices[].inputs.data[].oneStoreProductId", "devices[].inputs.data[].contentType" ] } ] }, { "key": "devices[]", "type": "section", "title": "Buttons", "expandable": true, "expanded": false, "items": [ { "key": "devices[].buttons", "type": "tabarray", "title": "{{ value.name || 'Button' }}", "items": [ "devices[].buttons[].displayType", "devices[].buttons[].name", "devices[].buttons[].mode", "devices[].buttons[].mediaCommand", "devices[].buttons[].gamePadCommand", "devices[].buttons[].tvRemoteCommand", "devices[].buttons[].consoleControlCommand", "devices[].buttons[].gameAppControlCommand", "devices[].buttons[].namePrefix" ] } ] }, { "key": "devices[]", "type": "section", "title": "Advanced Settings", "expandable": true, "expanded": false, "items": [ { "key": "devices[]", "type": "tabarray", "title": "{{ value.title }}", "items": [ { "key": "devices[].volume", "title": "Volume", "items": [ "devices[].volume.displayType", "devices[].volume.name", "devices[].volume.namePrefix" ] }, { "key": "devices[]", "title": "Sensors", "items": [ { "key": "devices[].sensors", "type": "tabarray", "title": "{{ value.name || 'Sensor' }}", "items": [ "devices[].sensors[].displayType", "devices[].sensors[].mode", "devices[].sensors[].name", "devices[].sensors[].namePrefix", "devices[].sensors[].pulse", "devices[].sensors[].reference", "devices[].sensors[].level" ] } ] }, { "key": "devices[]", "title": "Device", "items": [ "devices[].infoButtonCommand" ] }, { "key": "devices[].webApi", "title": "Web Api", "items": [ "devices[].webApi.enable", { "key": "devices[].webApi.token", "type": "password" }, { "key": "devices[].webApi.clientId", "type": "password" }, { "key": "devices[].webApi.clientSecret", "type": "password" } ] }, { "key": "devices[].log", "title": "Log", "items": [ "devices[].log.deviceInfo", "devices[].log.success", "devices[].log.info", "devices[].log.warn", "devices[].log.error", "devices[].log.debug" ] }, { "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.port" ] }, { "key": "devices[].mqtt", "title": "MQTT", "items": [ "devices[].mqtt.enable", "devices[].mqtt.host", "devices[].mqtt.port", "devices[].mqtt.clientId", "devices[].mqtt.prefix", { "key": "devices[].mqtt.auth", "title": "Authorization", "items": [ "devices[].mqtt.auth.enable", "devices[].mqtt.auth.user", { "key": "devices[].mqtt.auth.passwd", "type": "password" } ] } ] } ] } ] } ] } ] } ] } ] }