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