UNPKG

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
{ "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"] } ] }