homebridge-sony-adcp-projector
Version:
Homebridge accessory to control Sony projectors over ADCP (IP). Exposes a HomeKit Television tile with input sources.
300 lines (299 loc) • 10.2 kB
JSON
{
"pluginAlias": "SonyProjector",
"pluginType": "platform",
"singular": true,
"headerDisplay": "Control your Sony projector over IP using Sony's ADCP protocol. Exposes a HomeKit Television tile with inputs; picture/HDR controls are separate from input selection.",
"schema": {
"type": "object",
"properties": {
"name": {
"title": "Accessory Name",
"type": "string",
"default": "Sony Projector",
"required": false
},
"ip": {
"title": "Projector IP Address",
"type": "string",
"format": "ipv4",
"placeholder": "192.168.1.101",
"required": true,
"description": "Set a DHCP reservation for reliability."
},
"adcpPort": {
"title": "ADCP Port",
"type": "integer",
"default": 53595,
"placeholder": "53595",
"required": false,
"description": "TCP port for ADCP (default 53595)."
},
"useAuth": {
"title": "Requires Authentication",
"type": "boolean",
"default": false,
"required": false,
"description": "Enable only if ADCP ▶︎ Requires Authentication is ON in the projector web UI."
},
"password": {
"title": "ADCP Password",
"type": "string",
"required": false,
"description": "Used to compute the SHA-256 response to the projector's nonce when ADCP authentication is enabled.",
"condition": { "functionBody": "return model.useAuth === true;" }
},
"timeout": {
"title": "Timeout (seconds)",
"type": "integer",
"default": 5,
"minimum": 1,
"maximum": 60,
"required": false,
"description": "How long to wait for projector replies before failing."
},
"inputs": {
"title": "Input Sources",
"type": "array",
"description": "Define inputs to appear in the Home app. Each input must have a unique Identifier.",
"items": {
"type": "object",
"properties": {
"id": {
"title": "Identifier",
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 1,
"description": "Numeric ID used by HomeKit (1..50). Must be unique across inputs."
},
"name": {
"title": "Display Name",
"type": "string",
"default": "HDMI 1"
},
"adcp": {
"title": "ADCP Source Key",
"type": "string",
"default": "hdmi1",
"oneOf": [
{ "title": "HDMI 1", "enum": ["hdmi1"] },
{ "title": "HDMI 2", "enum": ["hdmi2"] },
{ "title": "HDMI 3", "enum": ["hdmi3"] },
{ "title": "HDMI 4", "enum": ["hdmi4"] },
{ "title": "Custom (enter manually)", "enum": [""] }
],
"description": "ADCP input token (e.g., hdmi1, hdmi2). If 'Custom', replace with the exact ADCP value supported by your model."
}
},
"required": ["id", "name", "adcp"]
},
"default": [
{ "id": 1, "name": "HDMI 1", "adcp": "hdmi1" },
{ "id": 2, "name": "HDMI 2", "adcp": "hdmi2" }
]
},
"enableBlankScreen": {
"title": "Enable Blank Screen Switch",
"type": "boolean",
"default": true,
"required": false,
"description": "Adds a switch to toggle video mute (blank screen)."
},
"enableBrightness": {
"title": "Enable Brightness Slider",
"type": "boolean",
"default": true,
"required": false,
"description": "Adds a Lightbulb service with a Brightness slider (0–100)."
},
"enableContrast": {
"title": "Enable Contrast Slider",
"type": "boolean",
"default": false,
"required": false,
"description": "Adds a Lightbulb service with a Contrast slider (0–100)."
},
"enablePictureModes": {
"title": "Enable Picture Mode Switches",
"type": "boolean",
"default": false,
"required": false,
"description": "Adds exclusive switches for each picture mode (Cinema, Reference, Game, etc.)."
},
"enableHdrSelector": {
"title": "Enable HDR Mode Selector",
"type": "boolean",
"default": true,
"required": false,
"description": "Adds HDR controls. In **UI Layout → Option 3 (Legacy Mixed List)** HDR modes appear in the TV Inputs list; otherwise they appear as separate switches."
},
"enableTestPatterns": {
"title": "Enable Test Patterns (Advanced)",
"type": "boolean",
"default": false,
"required": false,
"description": "Expose test patterns as virtual inputs (e.g., Grid, Color Bars). Hidden by default."
},
"enableLampHoursSensor": {
"title": "Enable Lamp/Laser Hours Sensor",
"type": "boolean",
"default": true,
"required": false,
"description": "Adds a read-only sensor that displays total hours (shown as lux value)."
},
"enableErrorSensor": {
"title": "Enable Error Status Sensor",
"type": "boolean",
"default": false,
"required": false,
"description": "Adds a contact sensor that opens when the projector reports an error."
},
"pictureModes": {
"title": "Picture Modes",
"type": "array",
"description": "Picture Mode options. Use string codes for VPL-XW5000 (e.g., 'reference', 'cinema_film_1').",
"items": {
"type": "object",
"properties": {
"name": { "title": "Display Name", "type": "string" },
"code": {
"title": "ADCP Code (string or number)",
"type": "string"
}
},
"required": ["name", "code"]
},
"default": [
{ "name": "Reference", "code": "reference" },
{ "name": "Cinema Film 1", "code": "cinema_film_1" },
{ "name": "Cinema Film 2", "code": "cinema_film_2" },
{ "name": "Game", "code": "game" },
{ "name": "IMAX", "code": "imax" }
]
},
"hdrModes": {
"title": "HDR Modes",
"type": "array",
"description": "HDR Mode options. Use string codes for VPL-XW5000 (e.g., 'auto', 'off', 'hdr10', 'hlg').",
"items": {
"type": "object",
"properties": {
"name": { "title": "Display Name", "type": "string" },
"code": { "title": "ADCP Code (string)", "type": "string" }
},
"required": ["name", "code"]
},
"default": [
{ "name": "HDR Auto", "code": "auto" },
{ "name": "HDR10", "code": "hdr10" },
{ "name": "HLG", "code": "hlg" },
{ "name": "HDR Off", "code": "off" }
]
},
"testPatterns": {
"title": "Test Patterns (Advanced)",
"type": "array",
"description": "Test pattern options. Use string codes for VPL-XW5000.",
"items": {
"type": "object",
"properties": {
"name": { "title": "Pattern Name", "type": "string" },
"code": { "title": "ADCP Code (string)", "type": "string" }
},
"required": ["name", "code"]
},
"default": [
{ "name": "Off", "code": "off" },
{ "name": "Grid", "code": "grid" },
{ "name": "Color Bars", "code": "color_bars" }
]
},
"staticModel": {
"title": "Static Model (optional)",
"type": "string",
"required": false,
"description": "If set, this value is used for the Model characteristic instead of querying the projector at startup."
},
"staticSerial": {
"title": "Static Serial (optional)",
"type": "string",
"required": false,
"description": "If set, this value is used for the Serial Number characteristic instead of querying the projector at startup."
},
"logging": {
"title": "Logging Level",
"type": "string",
"default": "standard",
"oneOf": [
{ "title": "None", "enum": ["none"] },
{ "title": "Standard", "enum": ["standard"] },
{ "title": "Debug", "enum": ["debug"] }
],
"required": false,
"description": "Controls verbosity of plugin logs."
},
"enablePolling": {
"title": "Enable State Polling",
"type": "boolean",
"default": true,
"required": false,
"description": "Periodically polls projector state (power, brightness, identifiers) to keep HomeKit in sync."
},
"pollingInterval": {
"title": "Polling Interval (seconds)",
"type": "integer",
"default": 30,
"minimum": 10,
"maximum": 300,
"required": false,
"description": "How often to poll when enabled. Increase to reduce network traffic."
}
},
"required": ["ip"]
},
"layout": [
{
"type": "fieldset",
"title": "Connection",
"items": ["name", "ip", "adcpPort", "useAuth", "password", "timeout"]
},
{
"type": "fieldset",
"title": "Inputs",
"items": ["inputs"]
},
{
"type": "fieldset",
"title": "Device Info (optional)",
"items": ["staticModel", "staticSerial"]
},
{
"type": "fieldset",
"title": "Picture Controls",
"items": [
"enableBlankScreen",
"enableBrightness",
"enableContrast",
"enablePictureModes",
"pictureModes",
"enableHdrSelector",
"hdrModes"
]
},
{
"type": "fieldset",
"title": "Sensors & Diagnostics",
"items": [
"enableLampHoursSensor",
"enableErrorSensor",
"enableTestPatterns",
"testPatterns"
]
},
{
"type": "fieldset",
"title": "Advanced",
"items": ["logging", "enablePolling", "pollingInterval"]
}
]
}