homebridge-harmony
Version:
Publish your harmony activities as homekit accessories
1,196 lines • 58.5 kB
JSON
{
"pluginAlias": "HarmonyHubWebSocket",
"pluginType": "platform",
"singular": true,
"headerDisplay": "This plugin is provided by [nicoduj](https://github.com/nicoduj/)",
"footerDisplay": "Support via [paypal](https://www.paypal.me/nicoduj).",
"schema": {
"type": "object",
"properties": {
"name": {
"title": "Name of your hub",
"type": "string",
"minLength": 3,
"required": true
},
"hubIP": {
"title": "IP Address of your hub (must be fixed)",
"type": "string",
"format": "ipv4"
},
"hubName": {
"title": "Hub Name in your Harmony App",
"type": "string"
},
"DELAY_BEFORE_RETRY_AFTER_NETWORK_LOSS": {
"title": "retry timer in case of network loss (optionnal - defaults 60s)",
"type": "integer",
"default": 60000,
"minimum": 10000,
"maximum": 2147483647
},
"HUB_CONNECT_TIMEOUT": {
"title": "connect timeout (optionnal - defaults 10s)",
"type": "integer",
"default": 10000,
"minimum": 1000,
"maximum": 60000
},
"HUB_SEND_TIMEOUT": {
"title": "send timeout (optionnal - defaults 30s)",
"type": "integer",
"default": 30000,
"minimum": 1000,
"maximum": 60000
},
"cleanCache": {
"title": "Clean cached accessories at startup",
"type": "boolean"
},
"publishAllTVAsExternalAccessory": {
"title": "Publish all TV as external accessory",
"type": "boolean"
},
"TVAccessory": {
"title": "TV accessory in homekit",
"type": "boolean",
"default": true
},
"ReceiverIcon": {
"title": "TV accessory with a receiver Icon",
"type": "boolean",
"default": false
},
"sortInput": {
"title": "sort input list in TV accessory : 0-default,1:Alpha,2:activityOrder property of hub, 3:activitiesToPublishAsInputForTVMode order (defaults to 0).",
"type": "integer",
"default": 0,
"minimum": 0,
"maximum": 3
},
"configureAccesscontrol": {
"title": "Enable Access Control Service (false by default)",
"type": "boolean"
},
"mainActivity": {
"title": "Main Activity",
"type": "string"
},
"activitiesToPublishAsInputForTVMode": {
"type": "array",
"items": {
"title": "Activity name",
"type": "string"
}
},
"playPauseBehavior": {
"title": "Play pause behavior",
"type": "boolean"
},
"numberOfCommandsSentForVolumeControl": {
"title": "Number of commands sent for volume control (Defaults to 1 if not set)",
"type": "integer"
},
"remoteOverrideCommandsList": {
"type": "array",
"items": {
"title": "Activity override List",
"type": "object",
"properties": {
"ActivityName": {
"title": "Activity Name",
"type": "string",
"required": true
},
"CommandsList": {
"type": "array",
"required": true,
"items": {
"title": "Commands override list",
"type": "object",
"properties": {
"CommandName": {
"title": "Command Name",
"type": "string",
"required": true,
"oneOf": [
{
"title": "REWIND",
"enum": ["REWIND"]
},
{
"title": "FAST_FORWARD",
"enum": ["FAST_FORWARD"]
},
{
"title": "NEXT_TRACK",
"enum": ["NEXT_TRACK"]
},
{
"title": "PREVIOUS_TRACK",
"enum": ["PREVIOUS_TRACK"]
},
{
"title": "ARROW_UP",
"enum": ["ARROW_UP"]
},
{
"title": "ARROW_DOWN",
"enum": ["ARROW_DOWN"]
},
{
"title": "ARROW_LEFT",
"enum": ["ARROW_LEFT"]
},
{
"title": "ARROW_RIGHT",
"enum": ["ARROW_RIGHT"]
},
{
"title": "SELECT",
"enum": ["SELECT"]
},
{
"title": "BACK",
"enum": ["BACK"]
},
{
"title": "EXIT",
"enum": ["EXIT"]
},
{
"title": "INFORMATION",
"enum": ["INFORMATION"]
},
{
"title": "PLAY",
"enum": ["PLAY"]
},
{
"title": "PAUSE",
"enum": ["PAUSE"]
},
{
"title": "VOLUME_UP",
"enum": ["VOLUME_UP"]
},
{
"title": "VOLUME_DOWN",
"enum": ["VOLUME_DOWN"]
},
{
"title": "MUTE",
"enum": ["MUTE"]
},
{
"title": "SETUP",
"enum": ["SETUP"]
}
]
},
"NewCommand": {
"title": "New Command",
"type": "string",
"required": true,
"pattern": "^[A-Za-z0-9]+;[A-Za-z0-9]+(;[0-9]+)?$"
}
}
}
}
}
}
},
"switchAccessories": {
"title": "Switches accessories in homekit",
"type": "boolean"
},
"activitiesToPublishAsAccessoriesSwitch": {
"type": "array",
"items": {
"title": "Activity name",
"type": "string"
}
},
"showTurnOffActivity": {
"title": "Show TurnOff activity",
"type": "string",
"oneOf": [
{
"title": "False",
"enum": ["false"]
},
{
"title": "True",
"enum": ["true"]
},
{
"title": "Inverted",
"enum": ["inverted"]
},
{
"title": "Stateless",
"enum": ["stateless"]
}
]
},
"publishGeneralMuteSwitch": {
"title": "Publish a general mute switch",
"type": "boolean"
},
"publishGeneralVolumeSlider": {
"title": "Publish a general volume switch",
"type": "boolean"
},
"publishGeneralVolumeSwitches": {
"title": "Publish general volume up and down switches",
"type": "boolean"
},
"linkVolumeControlToTV": {
"title": "Links Volumes controls (mute / volume) to TV accessory if it exists",
"type": "boolean"
},
"addAllActivitiesToSkippedIfSameStateActivitiesList": {
"title": "Add all activities to skipped if same state activities list",
"type": "boolean"
},
"skippedIfSameStateActivities": {
"type": "array",
"items": {
"title": "Activity name",
"type": "string"
}
},
"publishSwitchActivitiesAsIndividualAccessories": {
"title": "Publish switch activities as individual accessories (Defaults to true if not set)",
"type": "boolean"
},
"devicesToPublishAsAccessoriesSwitch": {
"type": "array",
"items": {
"title": "Device",
"type": "string",
"pattern": "^([A-Za-z0-9 ]+){1}(\\|[A-Za-z0-9 ]+){0,1}(;[A-Za-z0-9]+(\\|[0-9]*)*)*"
}
},
"publishDevicesAsIndividualAccessories": {
"title": "Publish devices as individual accessories (Defaults to true if not set)",
"type": "boolean"
},
"sequencesToPublishAsAccessoriesSwitch": {
"type": "array",
"items": {
"title": "Sequence name",
"type": "string"
}
},
"publishSequencesAsIndividualAccessories": {
"title": "Publish sequences as individual accessories (Defaults to true if not set)",
"type": "boolean"
},
"homeControlsToPublishAsAccessoriesSwitch": {
"type": "array",
"items": {
"title": "Home Control name",
"type": "string"
}
},
"publishHomeControlsAsIndividualAccessories": {
"title": "Publish Home controls as individual accessories (Defaults to true if not set)",
"type": "boolean"
},
"showCommandsAtStartup": {
"title": "Show commands at startup",
"type": "boolean"
},
"otherPlatforms": {
"type": "array",
"items": {
"title": "Hub Config",
"type": "object",
"properties": {
"name": {
"title": "Name of your other hub (must be unique)",
"type": "string",
"minLength": 3,
"required": true
},
"hubIP": {
"title": "IP Address of your other hub (must be fixed)",
"type": "string",
"format": "ipv4",
"required": false
},
"hubName": {
"title": "Hub Name in your Harmony App",
"type": "string",
"required": false
},
"DELAY_BEFORE_RETRY_AFTER_NETWORK_LOSS": {
"title": "retry timer in case of network loss (optionnal - defaults 60s)",
"type": "integer",
"required": false
},
"HUB_CONNECT_TIMEOUT": {
"title": "connect timeout (optionnal - defaults 10s)",
"type": "integer",
"required": false
},
"HUB_SEND_TIMEOUT": {
"title": "send timeout (optionnal - defaults 30s)",
"type": "integer",
"required": false
},
"TVAccessory": {
"title": "TV accessory in homekit",
"type": "boolean",
"default": false
},
"ReceiverIcon": {
"title": "TV accessory with a receiver Icon",
"type": "boolean",
"default": false
},
"sortInput": {
"title": "sort input list in TV accessory : 0-default,1:Alpha,2:activityOrder property of hub, 3:activitiesToPublishAsInputForTVMode order (defaults to 0).",
"type": "integer",
"default": 0,
"minimum": 0,
"maximum": 3
},
"configureAccesscontrol": {
"title": "Enable Access Control Service (false by default)",
"type": "boolean"
},
"mainActivity": {
"title": "Main Activity",
"type": "string"
},
"activitiesToPublishAsInputForTVMode": {
"type": "array",
"items": {
"title": "Activity name",
"type": "string"
}
},
"playPauseBehavior": {
"title": "Play pause behavior",
"type": "boolean"
},
"numberOfCommandsSentForVolumeControl": {
"title": "Number of commands sent for volume control (Defaults to 1 if not set)",
"type": "integer"
},
"remoteOverrideCommandsList": {
"type": "array",
"items": {
"title": "Activity override List",
"type": "object",
"properties": {
"ActivityName": {
"title": "Activity Name",
"type": "string",
"required": true
},
"CommandsList": {
"type": "array",
"required": true,
"items": {
"title": "Commands override list",
"type": "object",
"properties": {
"CommandName": {
"title": "Command Name",
"type": "string",
"required": true,
"oneOf": [
{
"title": "REWIND",
"enum": ["REWIND"]
},
{
"title": "FAST_FORWARD",
"enum": ["FAST_FORWARD"]
},
{
"title": "NEXT_TRACK",
"enum": ["NEXT_TRACK"]
},
{
"title": "PREVIOUS_TRACK",
"enum": ["PREVIOUS_TRACK"]
},
{
"title": "ARROW_UP",
"enum": ["ARROW_UP"]
},
{
"title": "ARROW_DOWN",
"enum": ["ARROW_DOWN"]
},
{
"title": "ARROW_LEFT",
"enum": ["ARROW_LEFT"]
},
{
"title": "ARROW_RIGHT",
"enum": ["ARROW_RIGHT"]
},
{
"title": "SELECT",
"enum": ["SELECT"]
},
{
"title": "BACK",
"enum": ["BACK"]
},
{
"title": "EXIT",
"enum": ["EXIT"]
},
{
"title": "INFORMATION",
"enum": ["INFORMATION"]
},
{
"title": "PLAY",
"enum": ["PLAY"]
},
{
"title": "PAUSE",
"enum": ["PAUSE"]
},
{
"title": "VOLUME_UP",
"enum": ["VOLUME_UP"]
},
{
"title": "VOLUME_DOWN",
"enum": ["VOLUME_DOWN"]
},
{
"title": "MUTE",
"enum": ["MUTE"]
},
{
"title": "SETUP",
"enum": ["SETUP"]
}
]
},
"NewCommand": {
"title": "New Command",
"type": "string",
"required": true,
"pattern": "^[A-Za-z0-9]+;[A-Za-z0-9]+(;[0-9]+)?$"
}
}
}
}
}
}
},
"switchAccessories": {
"title": "Switches accessories in homekit",
"type": "boolean"
},
"activitiesToPublishAsAccessoriesSwitch": {
"type": "array",
"items": {
"title": "Activity name",
"type": "string"
}
},
"showTurnOffActivity": {
"title": "Show TurnOff activity",
"type": "string",
"oneOf": [
{
"title": "False",
"enum": ["false"]
},
{
"title": "True",
"enum": ["true"]
},
{
"title": "Inverted",
"enum": ["inverted"]
},
{
"title": "Stateless",
"enum": ["stateless"]
}
]
},
"publishGeneralMuteSwitch": {
"title": "publishGeneralMuteSwitch",
"type": "boolean"
},
"publishGeneralVolumeSlider": {
"title": "publishGeneralVolumeSlider",
"type": "boolean"
},
"publishGeneralVolumeSwitches": {
"title": "Publish general volume up and down switches",
"type": "boolean"
},
"linkVolumeControlToTV": {
"title": "linkVolumeControlToTV",
"type": "boolean"
},
"addAllActivitiesToSkippedIfSameStateActivitiesList": {
"title": "Add all activities to skipped if same state activities list",
"type": "boolean"
},
"skippedIfSameStateActivities": {
"type": "array",
"items": {
"title": "Activity name",
"type": "string"
}
},
"publishSwitchActivitiesAsIndividualAccessories": {
"title": "Publish switch activities as individual accessories (Defaults to true if not set)",
"type": "boolean"
},
"devicesToPublishAsAccessoriesSwitch": {
"type": "array",
"items": {
"title": "Device",
"type": "string",
"pattern": "^([A-Za-z0-9 ]+){1}(\\|[A-Za-z0-9 ]+){0,1}(;[A-Za-z0-9]+(\\|[0-9]*)*)*"
}
},
"publishDevicesAsIndividualAccessories": {
"title": "Publish devices as individual accessories (Defaults to true if not set)",
"type": "boolean"
},
"sequencesToPublishAsAccessoriesSwitch": {
"type": "array",
"items": {
"title": "Sequence name",
"type": "string"
}
},
"publishSequencesAsIndividualAccessories": {
"title": "Publish sequences as individual accessories (Defaults to true if not set)",
"type": "boolean"
},
"homeControlsToPublishAsAccessoriesSwitch": {
"type": "array",
"items": {
"title": "Home Control name",
"type": "string"
}
},
"publishHomeControlsAsIndividualAccessories": {
"title": "Publish Home controls as individual accessories (Defaults to true if not set)",
"type": "boolean"
},
"showCommandsAtStartup": {
"title": "Show commands at startup",
"type": "boolean"
}
}
}
}
}
},
"layout": [
{
"type": "flex",
"flex-flow": "row wrap",
"items": [
{
"type": "flex",
"flex-flow": "column",
"items": ["name"]
},
{
"type": "flex",
"flex-flow": "column",
"items": ["hubIP"]
},
{
"type": "flex",
"flex-flow": "column",
"items": ["hubName"]
}
]
},
{
"type": "fieldset",
"title": "TV Accessory",
"expandable": true,
"expanded": false,
"items": [
{
"key": "TVAccessory",
"description": "Publish hub with its activities as a TV Accessory"
},
{
"key": "ReceiverIcon",
"description": "Publish TV accessory with a receiver Icon"
},
{
"key": "sortInput",
"description": "sort input list in TV accessory"
},
{
"type": "fieldset",
"title": "TV Accessory options",
"condition": "model.TVAccessory",
"items": [
{
"key": "mainActivity",
"description": "Set the main activity of the TV mode"
},
{
"type": "help",
"helpvalue": "<h5>Activities to publish as input for TV Mode</h5><em class='primary-text'>Enter the names of activities you want to expose as inputs (all by default).</em>"
},
{
"nodescription": true,
"notitle": true,
"key": "activitiesToPublishAsInputForTVMode",
"title": "Input",
"type": "array",
"items": [
{
"type": "div",
"displayFlex": true,
"flex-direction": "row",
"items": [
{
"key": "activitiesToPublishAsInputForTVMode[]",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter activity name..."
}
]
}
]
},
{
"key": "playPauseBehavior",
"description": "Play/pause behavior in TV mode : if set to true, will send pause if played was set and vice-verca. Be aware that both commands must be available, and that it might be out of sync in case of external events (defaults : false - always send play command)"
},
{
"key": "numberOfCommandsSentForVolumeControl",
"description": "Option to set the number of commands to send for each volum (up or down) press."
},
{
"key": "configureAccesscontrol",
"description": "Enable Access Control Service"
},
{
"type": "help",
"helpvalue": "<h5>Option to override default commands mapping in TV Platform Mode</h5><em class='primary-text'>Command format : [Device Name];[Command Name].</em>"
},
{
"nodescription": true,
"notitle": true,
"key": "remoteOverrideCommandsList",
"title": "{{ 'Activity ' + $index}}",
"type": "tabarray",
"items": [
{
"key": "remoteOverrideCommandsList[].ActivityName",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter activity name..."
},
{
"nodescription": true,
"notitle": true,
"key": "remoteOverrideCommandsList[].CommandsList",
"title": "Overrided Command",
"type": "array",
"items": [
{
"type": "flex",
"flex-flow": "row wrap",
"items": [
{
"type": "flex",
"flex-flow": "column",
"items": ["remoteOverrideCommandsList[].CommandsList[].CommandName"]
},
{
"type": "flex",
"flex-flow": "column",
"items": [
{
"key": "remoteOverrideCommandsList[].CommandsList[].NewCommand",
"placeholder": "Enter new command..."
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"type": "fieldset",
"title": "Switch Accessories",
"expandable": true,
"expanded": false,
"items": [
{
"key": "switchAccessories",
"description": "Publish all activities as a Switch Accessory"
},
{
"type": "fieldset",
"title": "Switch Accessories options",
"condition": "model.switchAccessories",
"items": [
{
"key": "publishSwitchActivitiesAsIndividualAccessories",
"description": "Option to publish activities as individual accessories."
},
{
"type": "help",
"helpvalue": "<h5>Activities to publish as accessories switch</h5><em class='primary-text'>Enter the names of activities you want to expose as switch (all by default).</em>"
},
{
"nodescription": true,
"notitle": true,
"key": "activitiesToPublishAsAccessoriesSwitch",
"title": "Activity Switch",
"type": "array",
"items": [
{
"type": "div",
"displayFlex": true,
"flex-direction": "row",
"items": [
{
"key": "activitiesToPublishAsAccessoriesSwitch[]",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter activity name..."
}
]
}
]
}
]
},
{
"key": "showTurnOffActivity",
"description": "Configures whether to publish a switch accessory to turn off every activity.If you set to true, The switch will be on if and only if there is no current activity, and toggling it while on does nothing. If you set to Inverted, The switch will be off if and only if there is no current activity, and toggling it while off does nothing. If you set to stateless, it will always be off, but can be triggered to switch off current activity."
},
{
"key": "publishGeneralMuteSwitch",
"description": "Publish a mute switch, stateless, that will send a mute command to current activity"
},
{
"key": "publishGeneralVolumeSlider",
"description": "Publish a volume slider, stateless, that will send a volume command to current activity"
},
{
"key": "publishGeneralVolumeSwitches",
"description": "Publish two volume switches (up and down), stateless, that will send a volume command to current activity"
},
{
"key": "linkVolumeControlToTV",
"description": "Link volumes controls (mute / volume) to TV accessory if it exists"
}
]
},
{
"type": "fieldset",
"title": "Other Accessories",
"expandable": true,
"expanded": false,
"items": [
{
"type": "help",
"helpvalue": "<h5>Devices to publish as accessories switch</h5> <p>This option is an array that behaves this way :</p> <ul> <li>You should put the name of the device as it is named in harmony app,</li> <li>You can add a specific command or multiple ones <strong>JUST AFTER A ";" or a series of ";"</strong> if you want a switch to be added for this specific command or serie of commands (a default delay of 350ms will be added between each command if no sepecif delay is specified),</li> <li>If you do not specify any specific command, the plugin will add either powerToggle if found in Power command group, or PowerOn and/or PowerOff if there is no powerToggle feature,</li> </ul> <p>As a sample :</p> <pre><code class='lang-json'> <span class='hljs-string'>\"devicesToPublishAsAccessoriesSwitch\"</span> : [<span class='hljs-string'>\"Apple TV Gen 4|Button1;Play\"</span>,<span class='hljs-string'>\"Apple TV Gen 4;DirectionDown\"</span>,<span class='hljs-string'>\"Caisson\"</span>,<span class='hljs-string'>\"Sony PS4\"</span>,<span class='hljs-string'>\"MyDevice;Up;Up|2500;Down\"</span>] </code></pre> <p>will add</p> <ul> <li>a switch for "Apple TV Gen 4" "Play" command, named Button1,</li> <li>a switch for "Apple TV Gen 4" "DirectionDown" command,</li> <li>a powerToggle switch for the device named "Caisson",</li> <li>a powerOff switch only for PS4 (since there is no powerToggle nor powerOn command for it)</li> <li>a switch that will send Up , then Up, then wait 2.5 seconds, then send Down to MyDevice</li> </ul> <p>All commands available are displayed at startup. If no name is specified, it will be added with a generated name.</p> <p>If you use a "/", it will do a non stateless switch and send commands bfire the / on On, and after on Off. Be aware that it can be out of sync .</p> <p>As a sample :</p> <pre><code class='lang-json'> <span class='hljs-string'>\"devicesToPublishAsAccessoriesSwitch\"</span> : [<span class='hljs-string'>\"Apple TV Gen 4|Button1;Play/Pause\"</span>,<span class='hljs-string'>\"Caisson;/\"</span>,<span class='hljs-string'>\"Sony PS4;/\"</span>,<span class='hljs-string'>\"MyDevice;/\"</span>,<span class='hljs-string'>\"MyDevice;Up;Up|2500;Down/Down;Down|2500;Up\"</span>] </code></pre> <p>will add</p> <ul> <li>a switch for "Apple TV Gen 4" "Play" command on on, "Pause" command on off, named Button1,</li> <li>a powerToggle switch for the device named "Caisson", which will send PowerToggle on on and off,</li> <li>a powerOff switch only for PS4 (since there is no powerToggle nor powerOn command for it) - thus no effect</li> <li>a switch that will PowerOn on On and PowerOff on off to MyDevice since it doe not have a powerToggle and have both powerOn / PowerOff</li> <li>a switch that will send Up , then Up, then wait 2.5 seconds, then send Down to MyDevice on On and reverse on Off</li> </ul>"
},
{
"nodescription": true,
"notitle": true,
"key": "devicesToPublishAsAccessoriesSwitch",
"title": "Device",
"type": "array",
"items": [
{
"type": "div",
"displayFlex": true,
"flex-direction": "row",
"items": [
{
"key": "devicesToPublishAsAccessoriesSwitch[]",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter device name with options..."
}
]
}
]
},
{
"key": "publishDevicesAsIndividualAccessories",
"condition": "model.devicesToPublishAsAccessoriesSwitch",
"description": "Option to publish devices as individual accessories."
},
{
"type": "help",
"helpvalue": "<h5>Sequences to publish as accessories switch</h5> <p>This option is an array that behaves this way :</p> <ul> <li>You should put the name of the sequence as it is named in harmony app,</li> </ul> <p>As a sample :</p> <pre><code class='lang-json'> <span class='hljs-string'>\"sequencesToPublishAsAccessoriesSwitch\"</span> : [<span class='hljs-string'>\"Test\"</span>] </code></pre> <p>will expose the sequence Test as a button.</p> <p>See <a href=\"https://support.myharmony.com/en-us/creating-button-sequences\">Logitech Harmony Sequence Configuration</a> for sequences configuration.</p> <p>Please note that the sequence can only be triggered if its activity is in use. (Sequences are linked to an activity by design in harmony app.)</p>"
},
{
"nodescription": true,
"notitle": true,
"key": "sequencesToPublishAsAccessoriesSwitch",
"title": "Sequence",
"type": "array",
"items": [
{
"type": "div",
"displayFlex": true,
"flex-direction": "row",
"items": [
{
"key": "sequencesToPublishAsAccessoriesSwitch[]",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter sequence name..."
}
]
}
]
},
{
"key": "publishSequencesAsIndividualAccessories",
"condition": "model.sequencesToPublishAsAccessoriesSwitch",
"description": "Option to publish sequences as individual accessories."
},
{
"type": "help",
"helpvalue": "<h5>Home Accessory to publish as accessories switch</h5><em class='primary-text'>Enter the names of Home Accessory you want to expose as switch.</em>"
},
{
"nodescription": true,
"notitle": true,
"key": "homeControlsToPublishAsAccessoriesSwitch",
"title": "Home Control",
"type": "array",
"items": [
{
"type": "div",
"displayFlex": true,
"flex-direction": "row",
"items": [
{
"key": "homeControlsToPublishAsAccessoriesSwitch[]",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter home control name..."
}
]
}
]
},
{
"key": "publishHomeControlsAsIndividualAccessories",
"condition": "model.homeControlsToPublishAsAccessoriesSwitch",
"description": "Option to publish Home controls as individual accessories."
}
]
},
{
"type": "fieldset",
"title": "Other Options",
"expandable": true,
"expanded": false,
"items": [
{
"key": "showCommandsAtStartup",
"description": "Show commands and device loaded at startup in homebridge logs. Can be used to retrieve exact names for other advanced configuration"
},
{
"key": "addAllActivitiesToSkippedIfSameStateActivitiesList",
"description": "Option to add all activities automatically to skippedIfSameStateActivities behavior."
},
{
"type": "help",
"helpvalue": "<h5>Activities to trigger only if their state is different from the action sent</h5><em class='primary-text'>Can be useful if your devices in the activity have the same on / off command and you want to automate them outside off the home app. For TV mode, and PowerOff feature, PowerOff is added by default, but you have to add it manually to this list if this list is set.</em>",
"condition": {
"functionBody": "return (model.addAllActivitiesToSkippedIfSameStateActivitiesList === false )"
}
},
{
"nodescription": true,
"notitle": true,
"key": "skippedIfSameStateActivities",
"condition": {
"functionBody": "return (model.addAllActivitiesToSkippedIfSameStateActivitiesList === false )"
},
"type": "array",
"title": "Activity",
"items": [
{
"type": "div",
"displayFlex": true,
"flex-direction": "row",
"items": [
{
"key": "skippedIfSameStateActivities[]",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter activity name..."
}
]
}
]
}
]
},
{
"type": "fieldset",
"title": "Other Hubs",
"expandable": true,
"expanded": false,
"items": [
{
"type": "help",
"helpvalue": "<h5>Instances of other hubs</h5><em class='primary-text'>Add a section for each other hub you have. Properties are the same.</em>"
},
{
"nodescription": true,
"notitle": true,
"key": "otherPlatforms",
"title": "{{ 'Hub ' + $index+1}}",
"type": "tabarray",
"items": [
{
"type": "div",
"displayFlex": false,
"items": [
{
"type": "flex",
"flex-flow": "row wrap",
"items": [
{
"type": "flex",
"flex-flow": "column",
"items": ["otherPlatforms[].name"]
},
{
"type": "flex",
"flex-flow": "column",
"items": ["otherPlatforms[].hubIP"]
},
{
"type": "flex",
"flex-flow": "column",
"items": ["otherPlatforms[].hubName"]
}
]
},
{
"type": "fieldset",
"title": "TV Accessory",
"expandable": true,
"expanded": false,
"items": [
{
"key": "otherPlatforms[].TVAccessory",
"description": "Publish hub with its activities as a TV Accessory"
},
{
"key": "otherPlatforms[].ReceiverIcon",
"description": "Publish TV Accessory with a reciever icon"
},
{
"key": "otherPlatforms[].sortInput",
"description": "sort input list in TV accessory"
},
{
"type": "fieldset",
"title": "TV Accessory options",
"condition": "otherPlatforms[arrayIndex].TVAccessory",
"items": [
{
"key": "otherPlatforms[].mainActivity",
"description": "Set the main activity of the TV mode"
},
{
"type": "help",
"helpvalue": "<h5>Activities to publish as input for TV Mode</h5><em class='primary-text'>Enter the names of activities you want to expose as inputs (all by default).</em>"
},
{
"nodescription": true,
"notitle": true,
"key": "otherPlatforms[].activitiesToPublishAsInputForTVMode",
"title": "Input",
"type": "array",
"items": [
{
"type": "div",
"displayFlex": true,
"flex-direction": "row",
"items": [
{
"key": "otherPlatforms[].activitiesToPublishAsInputForTVMode[]",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter activity name..."
}
]
}
]
},
{
"key": "otherPlatforms[].playPauseBehavior",
"description": "Play/pause behavior in TV mode : if set to true, will send pause if played was set and vice-verca. Be aware that both commands must be available, and that it might be out of sync in case of external events (defaults : false - always send play command)"
},
{
"key": "otherPlatforms[].numberOfCommandsSentForVolumeControl",
"description": "Option to set the number of commands to send for each volum (up or down) press."
},
{
"key": "otherPlatforms[].configureAccesscontrol",
"description": "Enable Access Control Service"
},
{
"type": "help",
"helpvalue": "<h5>Option to override default commands mapping in TV Platform Mode</h5><em class='primary-text'>Command format : [Device Name];[Command Name].</em>"
},
{
"nodescription": true,
"notitle": true,
"key": "otherPlatforms[].remoteOverrideCommandsList",
"title": "{{ 'Activity ' + $index}}",
"type": "tabarray",
"items": [
{
"key": "otherPlatforms[].remoteOverrideCommandsList[].ActivityName",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter activity name..."
},
{
"nodescription": true,
"notitle": true,
"key": "otherPlatforms[].remoteOverrideCommandsList[].CommandsList",
"title": "Overrided Command",
"type": "array",
"items": [
{
"type": "flex",
"flex-flow": "row wrap",
"items": [
{
"type": "flex",
"flex-flow": "column",
"items": [
"otherPlatforms[].remoteOverrideCommandsList[].CommandsList[].CommandName"
]
},
{
"type": "flex",
"flex-flow": "column",
"items": [
{
"key": "otherPlatforms[].remoteOverrideCommandsList[].CommandsList[].NewCommand",
"placeholder": "Enter new command..."
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"type": "fieldset",
"title": "Switch Accessories",
"expandable": true,
"expanded": false,
"items": [
{
"key": "otherPlatforms[].switchAccessories",
"description": "Publish all activities as a Switch Accessory"
},
{
"condition": "otherPlatforms[arrayIndex].switchAccessories",
"type": "fieldset",
"title": "Switch Accessories options",
"items": [
{
"key": "otherPlatforms[].publishSwitchActivitiesAsIndividualAccessories",
"description": "Option to publish activities as individual accessories."
},
{
"type": "help",
"helpvalue": "<h5>Activities to publish as accessories switch</h5><em class='primary-text'>Enter the names of activities you want to expose as switch (all by default).</em>"
},
{
"nodescription": true,
"notitle": true,
"key": "otherPlatforms[].activitiesToPublishAsAccessoriesSwitch",
"title": "Activity Switch",
"type": "array",
"items": [
{
"type": "div",
"displayFlex": true,
"flex-direction": "row",
"items": [
{
"key": "otherPlatforms[].activitiesToPublishAsAccessoriesSwitch[]",
"flex": "1 1 50px",
"notitle": true,
"placeholder": "Enter activity name..."
}
]
}
]
}
]
},
{
"key": "otherPlatforms[].showTurnOffActivity",
"description": "Configures whether to publish a switch accessory to turn off every activity.If you set to true, The switch will be on if and only if there is no current activity, and toggling it while on does nothing. If you set to Inverted, The switch will be off if and only if there is no current activity, and toggling it while off does nothing. If you set to stateless, it will always be off, but can be triggered to switch off current activity."
},
{
"key": "otherPlatforms[].publishGeneralMuteSwitch",
"description": "Publish a mute switch, stateless, that will send a mute command to current activity"
},
{
"key": "otherPlatforms[].publishGeneralVolumeSlider",
"description": "Publish a volume slider, stateless, that will send a volume command to current activity"
},
{
"key": "otherPlatforms[].publishGeneralVolumeSwitches",
"description": "Publish two volume switches (up and down), stateless, that will send a volume command to current activity"
},
{
"key": "otherPlatforms[].linkVolumeControlToTV",
"description": "Link volumes controls (mute / volume) to TV accessory if it exists"
}
]
},
{
"type": "fieldset",
"title": "Other Accessories",
"expandable": true,
"expanded": false,
"items": [
{
"type": "help",
"helpvalue": "<h5>Devices to publish as accessories switch</h5><em class='primary-text'><ul>\r\n<li>You should put the name of the device as it is named in harmony app,</li>\r\n\r\n<li>You can add a specific command or multiple ones <strong>JUST AFTER A \";\" or a series of \";\"</strong> if you want a switch to be added for this specific command or serie of commands (a default delay of 350ms will be added between each command if no sepecif delay is specified),</li>\r\n\r\n<li>If you do not specify any specific command, the plugin will add either powerToggle if found in Power command group, or PowerOn and/or PowerOff if there is no powerToggle feature,</li>\r\n</ul>\r\n\r\n<p>As a sample :</p>\r\n\r\n<pre><code class=\"json language-json\"> \"devicesToPublishAsAccessoriesSwitch\" : [\"Apple TV Gen 4|Button1;Play\",\"Apple TV Gen 4;DirectionDown\",\"Caisson\",\"Sony PS4\",\"MyDevice;Up;Up|2500;Down\"]\r\n</code></pre>\r\n\r\n<p>will add</p>\r\n\r\n<ul>\r\n<li>a switch for \"Apple TV Gen 4\" \"Play\" command, named Button1,</li>\r\n\r\n<li>a switch for \"Apple TV Gen 4\" \"DirectionDown\" command,</li>\r\n\r\n<li>a powerToggle switch for the device named \"Caisson\",</li>\r\n\r\n<li>a powerOff switch only