UNPKG

homebridge-unifi-occupancy-lite

Version:

Lightweight UniFi occupancy sensor plugin for Homebridge using API tokens only. Works with UDM Pro/SE, UDM, UDR and other UniFi OS devices.

266 lines (265 loc) 8.19 kB
{ "pluginAlias": "UnifiOccupancyLite", "pluginType": "platform", "singular": true, "schema": { "type": "object", "properties": { "name": { "title": "Plugin Name", "type": "string", "default": "UniFi Occupancy Lite", "required": true }, "unifi": { "type": "object", "properties": { "controller": { "title": "Controller URL", "type": "string", "required": true, "description": "UniFi Controller URL (e.g., https://192.168.1.1 or https://unifi.local)" }, "apiKey": { "title": "API Key", "type": "string", "required": true, "description": "Local user API key from UniFi Controller" }, "site": { "title": "Site ID", "type": "string", "default": "default", "description": "UniFi site ID (usually 'default')" }, "secure": { "title": "Verify SSL Certificate", "type": "boolean", "default": false, "description": "Enable SSL certificate verification" }, "useSiteManagerApi": { "title": "Use UniFi Site Manager API", "type": "boolean", "default": false, "description": "Use cloud-based Site Manager API instead of local controller" }, "hostId": { "title": "Host ID", "type": "string", "condition": { "functionBody": "return model.unifi && model.unifi.useSiteManagerApi === true;" }, "description": "Required when using Site Manager API" } }, "required": ["controller", "apiKey"] }, "interval": { "title": "Refresh Interval (seconds)", "type": "integer", "default": 180, "minimum": 30, "maximum": 3600, "description": "How often to check for device presence" }, "globalPresenceSensor": { "title": "Global Presence Sensor", "type": "boolean", "default": true, "description": "Create a sensor that shows if anyone is home" }, "residents": { "title": "Residents", "type": "array", "minItems": 1, "items": { "type": "object", "properties": { "name": { "title": "Name", "type": "string", "required": true, "minLength": 1, "description": "Resident name (will appear in HomeKit)" }, "devices": { "title": "Devices", "type": "array", "minItems": 1, "items": { "type": "object", "properties": { "name": { "title": "Device Name", "type": "string", "required": true, "minLength": 1 }, "mac": { "title": "MAC Address", "type": "string", "pattern": "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$", "description": "Device MAC address (format: AA:BB:CC:DD:EE:FF) - preferred method" }, "ip": { "title": "IP Address", "type": "string", "format": "ipv4", "description": "Device IP address (alternative to MAC, less reliable)" }, "hostname": { "title": "Hostname", "type": "string", "minLength": 1, "description": "Device hostname (alternative to MAC/IP)" }, "minTrafficAmount": { "title": "Minimum Traffic (KB)", "type": "integer", "minimum": 0, "description": "Minimum traffic in last 15 minutes to consider device active (0 = any activity)" } }, "required": ["name"], "not": { "allOf": [ {"not": {"required": ["mac"]}}, {"not": {"required": ["ip"]}}, {"not": {"required": ["hostname"]}} ] }, "errorMessage": { "not": "Device must have at least one identifier: MAC address, IP address, or hostname" } } } }, "required": ["name", "devices"] } }, "wifiPoints": { "title": "WiFi Points", "type": "array", "description": "Create presence sensors for specific WiFi access points/rooms", "items": { "type": "object", "properties": { "name": { "title": "Name", "type": "string", "required": true, "minLength": 1, "description": "WiFi point name (will appear in HomeKit)" }, "mac": { "title": "Access Point MAC Address", "type": "string", "pattern": "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$", "description": "MAC address of the access point" }, "ip": { "title": "Access Point IP Address", "type": "string", "format": "ipv4", "description": "IP address of the access point (alternative to MAC)" } }, "required": ["name"], "not": { "allOf": [ {"not": {"required": ["mac"]}}, {"not": {"required": ["ip"]}} ] }, "errorMessage": { "not": "WiFi point must have at least one identifier: MAC address or IP address" } } } }, "required": ["name", "unifi"] }, "layout": [ { "type": "fieldset", "title": "UniFi Controller Settings", "items": [ "unifi.controller", "unifi.apiKey", "unifi.site", "unifi.secure" ] }, { "type": "fieldset", "title": "Site Manager API (Optional)", "description": "For cloud-hosted controllers only", "items": [ "unifi.useSiteManagerApi", "unifi.hostId" ] }, { "type": "fieldset", "title": "General Settings", "items": [ "interval", "globalPresenceSensor" ] }, { "type": "fieldset", "title": "Residents", "description": "People whose devices to track for presence detection", "items": [ { "key": "residents", "type": "array", "items": [ "residents[].name", { "key": "residents[].devices", "type": "array", "items": [ "residents[].devices[].name", { "type": "fieldset", "title": "Device Identification (at least one required)", "items": [ "residents[].devices[].mac", "residents[].devices[].ip", "residents[].devices[].hostname" ] }, "residents[].devices[].minTrafficAmount" ] } ] } ] }, { "type": "fieldset", "title": "WiFi Points (Optional)", "description": "Create room-specific presence sensors", "items": [ { "key": "wifiPoints", "type": "array", "items": [ "wifiPoints[].name", { "type": "fieldset", "title": "Access Point Identification (at least one required)", "items": [ "wifiPoints[].mac", "wifiPoints[].ip" ] } ] } ] } ] }