homebridge-unifi-access 1.9.2 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ import type { PlatformAccessory } from "homebridge";
1
2
  import { AccessApi, type AccessControllerConfig, type AccessDeviceConfig } from "unifi-access";
2
3
  import { type HomebridgePluginLogging, MqttClient, type Nullable } from "homebridge-plugin-utils";
3
4
  import type { AccessControllerOptions } from "./access-options.js";
@@ -9,10 +10,9 @@ export declare class AccessController {
9
10
  config: AccessControllerOptions;
10
11
  private deviceRemovalQueue;
11
12
  readonly configuredDevices: {
12
- [index: string]: AccessDevice;
13
+ [index: string]: AccessDevice | undefined;
13
14
  };
14
15
  events: AccessEvents;
15
- private isEnabled;
16
16
  private hap;
17
17
  logApiErrors: boolean;
18
18
  readonly log: HomebridgePluginLogging;
@@ -28,15 +28,16 @@ export declare class AccessController {
28
28
  private configureController;
29
29
  private addAccessDevice;
30
30
  private discoverDevices;
31
- addHomeKitDevice(device: AccessDeviceConfig): AccessDevice | null;
31
+ addHomeKitDevice(device: AccessDeviceConfig): boolean;
32
32
  private discoverAndSyncAccessories;
33
33
  private cleanupDevices;
34
- removeHomeKitDevice(accessDevice: AccessDevice): void;
35
- private removeHomeKitAccessories;
34
+ private resolveDeviceName;
35
+ private resolveDeviceModel;
36
+ removeHomeKitDevice(accessory: PlatformAccessory, noRemovalDelay?: boolean): void;
36
37
  resetControllerConnection(): Promise<void>;
37
38
  deviceLookup(deviceId: string): AccessDevice | null;
38
39
  getFeatureFloat(option: string): Nullable<number | undefined>;
39
40
  getFeatureNumber(option: string): Nullable<number | undefined>;
40
- hasFeature(option: string, deviceId?: string | undefined): boolean;
41
+ hasFeature(option: string, device?: AccessControllerConfig | AccessDeviceConfig): boolean;
41
42
  get id(): string | undefined;
42
43
  }
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { ACCESS_CONTROLLER_REFRESH_INTERVAL, ACCESS_CONTROLLER_RETRY_INTERVAL, PLATFORM_NAME, PLUGIN_NAME } from "./settings.js";
6
6
  import { AccessApi } from "unifi-access";
7
- import { MqttClient, retry, sleep, validateName } from "homebridge-plugin-utils";
7
+ import { MqttClient, retry, sanitizeName, sleep } from "homebridge-plugin-utils";
8
8
  import { AccessEvents } from "./access-events.js";
9
9
  import { AccessHub } from "./access-hub.js";
10
10
  import util from "node:util";
@@ -14,7 +14,6 @@ export class AccessController {
14
14
  deviceRemovalQueue;
15
15
  configuredDevices;
16
16
  events;
17
- isEnabled;
18
17
  hap;
19
18
  logApiErrors;
20
19
  log;
@@ -29,7 +28,6 @@ export class AccessController {
29
28
  this.config = accessOptions;
30
29
  this.configuredDevices = {};
31
30
  this.deviceRemovalQueue = {};
32
- this.isEnabled = false;
33
31
  this.hap = this.api.hap;
34
32
  this.logApiErrors = true;
35
33
  this.mqtt = null;
@@ -39,10 +37,10 @@ export class AccessController {
39
37
  this.unsupportedDevices = {};
40
38
  // Configure our logging.
41
39
  this.log = {
42
- debug: (message, ...parameters) => this.platform.debug(util.format((this.udaApi?.name ?? this.name) + ": " + message, ...parameters)),
43
- error: (message, ...parameters) => this.platform.log.error(util.format((this.udaApi?.name ?? this.name) + ": " + message, ...parameters)),
44
- info: (message, ...parameters) => this.platform.log.info(util.format((this.udaApi?.name ?? this.name) + ": " + message, ...parameters)),
45
- warn: (message, ...parameters) => this.platform.log.warn(util.format((this.udaApi?.name ?? this.name) + ": " + message, ...parameters))
40
+ debug: (message, ...parameters) => this.platform.debug(util.format(this.name + ": " + message, ...parameters)),
41
+ error: (message, ...parameters) => this.platform.log.error(util.format(this.name + ": " + message, ...parameters)),
42
+ info: (message, ...parameters) => this.platform.log.info(util.format(this.name + ": " + message, ...parameters)),
43
+ warn: (message, ...parameters) => this.platform.log.warn(util.format(this.name + ": " + message, ...parameters))
46
44
  };
47
45
  // Validate our controller address and login information.
48
46
  if (!accessOptions.address || !accessOptions.username || !accessOptions.password) {
@@ -82,13 +80,11 @@ export class AccessController {
82
80
  // Set our Access configuration from the controller.
83
81
  this.uda = this.udaApi.controller;
84
82
  // Assign our name if the user hasn't explicitly specified a preference.
85
- this.name = this.config.name ?? (this.uda.host.hostname ?? this.uda.host.device_type);
83
+ this.name = this.config.name ?? this.udaApi.name;
86
84
  // We successfully logged in.
87
85
  this.log.info("Connected to %s (UniFi Access %s running on UniFi OS %s).", this.config.address, this.uda.version, this.uda.host.firmware_version);
88
- // Mark this NVR as enabled or disabled.
89
- this.isEnabled = this.hasFeature("Device");
90
- // If the Access controller is disabled, we're done.
91
- if (!this.isEnabled) {
86
+ // Now that we know the Access controller configuration, check to see if we've disabled it.
87
+ if (!this.hasFeature("Device")) {
92
88
  this.udaApi.logout();
93
89
  this.log.info("Disabling this UniFi Access controller in HomeKit.");
94
90
  // Let's sleep for thirty seconds to give all the accessories a chance to load before disabling everything. Homebridge doesn't have a good mechanism to notify us
@@ -96,7 +92,7 @@ export class AccessController {
96
92
  await sleep(30);
97
93
  // Unregister all the accessories for this controller from Homebridge that may have been restored already. Any additional ones will be automatically caught when
98
94
  // they are restored.
99
- this.removeHomeKitAccessories(this.platform.accessories.filter(x => x.context.controller === this.uda.host.mac));
95
+ this.platform.accessories.filter(accessory => accessory.context.controller === this.uda.host.mac).map(accessory => this.removeHomeKitDevice(accessory, true));
100
96
  return;
101
97
  }
102
98
  // Initialize our UniFi Access events handler.
@@ -114,9 +110,14 @@ export class AccessController {
114
110
  if (!device.is_managed) {
115
111
  continue;
116
112
  }
117
- this.log.info("Discovered %s: %s.", device.display_model ?? device.model, this.udaApi.getDeviceName(device, (device.alias?.length ? device.alias : device.name) ?? device.display_model ?? device.model, true));
113
+ this.log.info("Discovered %s: %s.", this.resolveDeviceModel(device), this.udaApi.getDeviceName(device, this.resolveDeviceName(device), true));
118
114
  }
119
115
  }
116
+ // Bootstrap refresh loop.
117
+ const bootstrapRefresh = () => {
118
+ // Sleep until it's time to bootstrap again.
119
+ setTimeout(() => void this.bootstrapController(), ACCESS_CONTROLLER_REFRESH_INTERVAL * 1000);
120
+ };
120
121
  // Sync the Access controller's devices with HomeKit.
121
122
  const syncUdaHomeKit = () => {
122
123
  // Sync status and check for any new or removed accessories.
@@ -126,11 +127,6 @@ export class AccessController {
126
127
  };
127
128
  // Initialize our Access controller device sync.
128
129
  syncUdaHomeKit();
129
- // Bootstrap refresh loop.
130
- const bootstrapRefresh = () => {
131
- // Sleep until it's time to bootstrap again.
132
- setTimeout(() => void this.bootstrapController(), ACCESS_CONTROLLER_REFRESH_INTERVAL * 1000);
133
- };
134
130
  // Let's set a listener to wait for bootstrap events to occur so we can keep ourselves in sync with the Access controller.
135
131
  this.udaApi.on("bootstrap", () => {
136
132
  // Sync our device view.
@@ -147,22 +143,15 @@ export class AccessController {
147
143
  }
148
144
  // Create instances of Access device types in our plugin.
149
145
  addAccessDevice(accessory, device) {
150
- if (!accessory || !device) {
151
- return false;
152
- }
153
- switch (device.device_type) {
154
- case "UA-Hub-Door-Mini":
155
- case "UA-ULTRA":
156
- case "UAH":
157
- case "UAH-DOOR":
158
- case "UAH-Ent":
159
- // We have a UniFi Access hub.
160
- this.configuredDevices[accessory.UUID] = new AccessHub(this, device, accessory);
161
- return true;
162
- default:
163
- this.log.error("Unknown device class %s detected for %s.", device.device_type, device.alias ?? device.display_model);
164
- return false;
146
+ // Access hubs.
147
+ if (["is_hub", "is_reader"].some(capability => device.capabilities.includes(capability))) {
148
+ // We have a UniFi Access hub or reader.
149
+ this.configuredDevices[accessory.UUID] = new AccessHub(this, device, accessory);
150
+ return true;
165
151
  }
152
+ // Default to an unknown device type.
153
+ this.log.error("Unknown device class %s detected for %s.", device.device_type, this.resolveDeviceName(device));
154
+ return false;
166
155
  }
167
156
  // Discover UniFi Access devices that may have been added to the controller since we last checked.
168
157
  discoverDevices(devices) {
@@ -175,45 +164,49 @@ export class AccessController {
175
164
  // Add a newly detected Access device to HomeKit.
176
165
  addHomeKitDevice(device) {
177
166
  // If we have no MAC address, name, or this device isn't being managed by this Access controller, we're done.
178
- if (!this.uda?.host.mac || !device || !device.mac || !device.is_managed) {
179
- return null;
167
+ if (!this.uda.host.mac || !device.mac || !device.is_managed) {
168
+ return false;
180
169
  }
181
170
  // We only support certain device capabilities.
182
- if (!device.capabilities.includes("is_hub")) {
171
+ if (!["is_hub", "is_reader"].some(capability => device.capabilities.includes(capability))) {
183
172
  // If we've already informed the user about this one, we're done.
184
173
  if (this.unsupportedDevices[device.mac]) {
185
- return null;
174
+ return false;
186
175
  }
187
176
  // Notify the user we see this device, but we aren't adding it to HomeKit.
188
177
  this.unsupportedDevices[device.mac] = true;
189
178
  this.log.info("UniFi Access device type '%s' is not currently supported, ignoring: %s.", device.device_type, this.udaApi.getDeviceName(device));
190
- return null;
191
- }
192
- // Exclude or include certain devices based on configuration parameters.
193
- if (!this.hasFeature("Device", device.mac.replace(/:/g, ""))) {
194
- return null;
179
+ return false;
195
180
  }
196
181
  // Generate this device's unique identifier. For devices like the EAH, we can't rely on just the MAC address since they contain multiple doors.
197
182
  const uuid = this.hap.uuid.generate(device.mac + ((device.device_type === "UAH-Ent") ? "-" + device.source_id.toUpperCase() : ""));
198
- let accessory;
199
- // See if we already know about this accessory or if it's truly new. If it is new, add it to HomeKit.
200
- if ((accessory = this.platform.accessories.find(x => x.UUID === uuid)) === undefined) {
201
- accessory = new this.api.platformAccessory(validateName(device.alias ?? device.display_model), uuid);
183
+ // See if we already know about this accessory.
184
+ let accessory = this.platform.accessories.find(x => x.UUID === uuid);
185
+ // Enable or disable certain devices based on configuration parameters.
186
+ if (!this.hasFeature("Device", device)) {
187
+ if (accessory) {
188
+ this.removeHomeKitDevice(accessory, true);
189
+ }
190
+ return false;
191
+ }
192
+ // We've got a new device, let's add it to HomeKit.
193
+ if (!accessory) {
194
+ accessory = new this.api.platformAccessory(sanitizeName(this.resolveDeviceName(device)), uuid);
202
195
  this.log.info("%s: Adding %s to HomeKit.", this.udaApi.getFullName(device), device.display_model);
203
196
  // Register this accessory with homebridge and add it to the accessory array so we can track it.
204
197
  this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
205
198
  this.platform.accessories.push(accessory);
206
199
  this.api.updatePlatformAccessories(this.platform.accessories);
207
200
  }
208
- // Link the accessory to it's device object and it's hosting NVR.
209
- accessory.context.controller = this.uda.host.mac;
210
- // Locate our existing Access device instance, if we have one.
211
- const accessDevice = this.configuredDevices[accessory.UUID];
212
- // Setup the Access device if it hasn't been configured yet.
213
- if (!accessDevice) {
201
+ // Setup the accessory as a new Access device in HBUA if we haven't configured it yet.
202
+ if (!this.configuredDevices[accessory.UUID]) {
214
203
  this.addAccessDevice(accessory, device);
204
+ return true;
215
205
  }
216
- return accessDevice;
206
+ // Update the configuration on an existing Access device.
207
+ // eslint-disable-next-line camelcase
208
+ this.events.emit("access.data.device.update", { data: device, event: "access.data.device.update", event_object_id: device.unique_id });
209
+ return true;
217
210
  }
218
211
  // Discover and sync UniFi Access devices between HomeKit and the Access controller.
219
212
  discoverAndSyncAccessories() {
@@ -226,47 +219,22 @@ export class AccessController {
226
219
  // Remove Access devices that are no longer found on this Access controller, but we still have in HomeKit.
227
220
  this.cleanupDevices();
228
221
  // Update our device information.
229
- Object.keys(this.configuredDevices).map(x => this.configuredDevices[x].configureInfo());
222
+ Object.keys(this.configuredDevices).map(x => this.configuredDevices[x]?.configureInfo());
230
223
  return true;
231
224
  }
232
225
  // Cleanup removed Access devices from HomeKit.
233
226
  cleanupDevices() {
227
+ // Process the device removal queue before we do anything else.
228
+ this.platform.accessories.filter(accessory => Object.keys(this.deviceRemovalQueue).includes(accessory.UUID)).map(accessory =>
229
+ // eslint-disable-next-line @stylistic/implicit-arrow-linebreak
230
+ this.removeHomeKitDevice(accessory, !this.platform.featureOptions.test("Device", (accessory.getService(this.hap.Service.AccessoryInformation)?.getCharacteristic(this.hap.Characteristic.SerialNumber).value ?? ""), this.id)));
234
231
  for (const accessory of this.platform.accessories) {
235
232
  const accessDevice = this.configuredDevices[accessory.UUID];
236
233
  // Check to see if we have an orphan - where we haven't configured this in the plugin, but the accessory still exists in HomeKit. One example of when this might
237
234
  // happen is when Homebridge might be shutdown and a device is then removed. When we start back up, the device still exists in HomeKit but not in Access. We
238
235
  // catch those orphan devices here.
239
236
  if (!accessDevice) {
240
- // We only remove devices if they're on the Access controller we're interested in.
241
- if (("controller" in accessory.context) && (accessory.context.controller !== this.uda.host.mac)) {
242
- continue;
243
- }
244
- // We only store MAC addresses on devices that exist on the Access controller. Any other accessories created are ones we created ourselves and are managed
245
- // elsewhere.
246
- if (!("mac" in accessory.context)) {
247
- continue;
248
- }
249
- // For certain use cases, we may want to defer removal of an Access device for a brief period of time.
250
- const delayInterval = this.getFeatureNumber("Controller.DelayDeviceRemoval") ?? undefined;
251
- if ((delayInterval !== undefined) && (delayInterval > 0)) {
252
- // Have we seen this device queued for removal previously? If not, let's add it to the queue and come back after our specified delay.
253
- if (!this.deviceRemovalQueue[accessory.UUID]) {
254
- this.deviceRemovalQueue[accessory.UUID] = Date.now();
255
- this.log.info("%s: Delaying device removal for at least %s second%s.", accessory.displayName, delayInterval, delayInterval > 1 ? "s" : "");
256
- continue;
257
- }
258
- // Is it time to process this device removal?
259
- if ((delayInterval * 1000) > (Date.now() - this.deviceRemovalQueue[accessory.UUID])) {
260
- continue;
261
- }
262
- // Cleanup after ourselves.
263
- delete this.deviceRemovalQueue[accessory.UUID];
264
- }
265
- this.log.info("%s: Removing device from HomeKit.", accessory.displayName);
266
- // Unregister the accessory and delete it's remnants from HomeKit.
267
- this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
268
- this.platform.accessories.splice(this.platform.accessories.indexOf(accessory), 1);
269
- this.api.updatePlatformAccessories(this.platform.accessories);
237
+ this.removeHomeKitDevice(accessory, !this.platform.featureOptions.test("Device", (accessory.getService(this.hap.Service.AccessoryInformation)?.getCharacteristic(this.hap.Characteristic.SerialNumber).value ?? "")));
270
238
  continue;
271
239
  }
272
240
  // If we don't have the Access bootstrap JSON available, we're done. We need to know what's on the Access controller in order to determine what to do with
@@ -275,64 +243,65 @@ export class AccessController {
275
243
  continue;
276
244
  }
277
245
  // Check to see if the device still exists on the Access controller and the user has not chosen to hide it.
278
- if (accessDevice.uda.capabilities.includes("is_hub") &&
279
- this.udaApi.devices?.some((x) => x.mac.toLowerCase() === accessDevice.uda.mac.toLowerCase()) &&
280
- accessDevice.hasFeature("Device")) {
246
+ if (["is_hub", "is_reader"].some(capability => accessDevice.uda.capabilities.includes(capability)) &&
247
+ this.udaApi.devices?.some((x) => x.mac.toLowerCase() === accessDevice.uda.mac.toLowerCase())) {
281
248
  // In case we have previously queued a device for deletion, let's remove it from the queue since it's reappeared.
282
249
  delete this.deviceRemovalQueue[accessDevice.accessory.UUID];
283
250
  continue;
284
251
  }
285
252
  // Process the device removal.
286
- this.removeHomeKitDevice(this.configuredDevices[accessory.UUID]);
253
+ this.removeHomeKitDevice(accessory, !this.hasFeature("Device", accessDevice.uda));
287
254
  }
288
255
  }
256
+ // Utility to retrieve a reasonable device name for an Access device.
257
+ resolveDeviceName(device) {
258
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
259
+ return (device.alias?.length ? device.alias : device.name) ?? device.display_model ?? device.model ?? device.device_type ?? "Access Device";
260
+ }
261
+ // Utility to retrieve a reasonable device model for an Access device.
262
+ resolveDeviceModel(device) {
263
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
264
+ return device.display_model ?? device.model ?? device.device_type ?? "Unknown Model";
265
+ }
289
266
  // Remove an individual Access device from HomeKit.
290
- removeHomeKitDevice(accessDevice) {
291
- // Sanity check.
292
- if (!accessDevice) {
267
+ removeHomeKitDevice(accessory, noRemovalDelay = false) {
268
+ // Ensure that this accessory hasn't already been removed.
269
+ if (!this.platform.accessories.some(x => x.UUID === accessory.UUID)) {
293
270
  return;
294
271
  }
295
272
  // We only remove devices if they're on the Access controller we're interested in.
296
- if (accessDevice.accessory.context.controller !== this.uda.host.mac) {
273
+ if (accessory.context.controller !== this.uda.host.mac) {
297
274
  return;
298
275
  }
299
- // For certain use cases, we may want to defer removal of an Access device.
300
- const delayInterval = this.getFeatureNumber("Controller.DelayDeviceRemoval") ?? undefined;
301
- if ((delayInterval !== undefined) && (delayInterval > 0)) {
276
+ const delayInterval = this.getFeatureNumber("Controller.DelayDeviceRemoval") ?? 0;
277
+ // For certain use cases, we may want to defer removal of an Access device where Access may lose track of devices for a brief period of time. This prevents a
278
+ // potential back-and-forth where devices are removed momentarily only to be readded later.
279
+ if (!noRemovalDelay && delayInterval) {
302
280
  // Have we seen this device queued for removal previously? If not, let's add it to the queue and come back after our specified delay.
303
- if (!this.deviceRemovalQueue[accessDevice.accessory.UUID]) {
304
- this.deviceRemovalQueue[accessDevice.accessory.UUID] = Date.now();
305
- this.log.info("%s: Delaying device removal for %s second%s.", accessDevice.uda.alias ? this.udaApi.getDeviceName(accessDevice.uda) : accessDevice.accessoryName, delayInterval, delayInterval > 1 ? "s" : "");
281
+ if (!this.deviceRemovalQueue[accessory.UUID]) {
282
+ this.deviceRemovalQueue[accessory.UUID] = Date.now();
283
+ this.log.info("%s: Delaying device removal for at least %s second%s.", accessory.displayName, delayInterval, delayInterval > 1 ? "s" : "");
306
284
  return;
307
285
  }
308
286
  // Is it time to process this device removal?
309
- if ((delayInterval * 1000) > (Date.now() - this.deviceRemovalQueue[accessDevice.accessory.UUID])) {
287
+ if ((delayInterval * 1000) > (Date.now() - this.deviceRemovalQueue[accessory.UUID])) {
310
288
  return;
311
289
  }
312
- // Cleanup after ourselves.
313
- delete this.deviceRemovalQueue[accessDevice.accessory.UUID];
314
290
  }
315
- // Remove this device.
316
- this.log.info("%s: Removing %s from HomeKit.", accessDevice.uda.alias ? this.udaApi.getDeviceName(accessDevice.uda) : accessDevice.accessoryName, accessDevice.uda.display_model ? accessDevice.uda.display_model : "device");
317
- const deletingAccessories = [accessDevice.accessory];
318
- // Cleanup our event handlers.
319
- accessDevice.cleanup();
291
+ // Cleanup after ourselves.
292
+ delete this.deviceRemovalQueue[accessory.UUID];
293
+ // Grab our instance of the Access device, if it exists.
294
+ const accessDevice = this.configuredDevices[accessory.UUID];
295
+ // See if we can pull the device's configuration details from our Access device instance or the controller.
296
+ const device = accessDevice?.uda ?? this.udaApi.devices?.find(dev => dev.unique_id === accessory.context.mac.toLowerCase()) ?? null;
297
+ this.log.info("%s: Removing %s from HomeKit.", device ? this.udaApi.getDeviceName(device) : accessDevice?.accessoryName ?? accessory.displayName, device?.display_model ?? "device");
298
+ // Cleanup our device instance.
299
+ accessDevice?.cleanup();
300
+ // Finally, remove it from our list of configured devices and HomeKit.
301
+ delete this.configuredDevices[accessory.UUID];
320
302
  // Unregister the accessory and delete it's remnants from HomeKit and the plugin.
321
- delete this.configuredDevices[accessDevice.accessory.UUID];
322
- this.removeHomeKitAccessories(deletingAccessories);
323
- }
324
- // Remove accessories from HomeKit and Homebridge.
325
- removeHomeKitAccessories(deletingAccessories) {
326
- // Sanity check.
327
- if (!deletingAccessories || (deletingAccessories.length <= 0)) {
328
- return;
329
- }
330
- // Unregister the accessories from Homebridge and HomeKit.
331
- this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, deletingAccessories);
332
- // Update our internal list of all the accessories we know about.
333
- for (const accessory of deletingAccessories) {
334
- this.platform.accessories.splice(this.platform.accessories.indexOf(accessory), 1);
335
- }
303
+ this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
304
+ this.platform.accessories.splice(this.platform.accessories.indexOf(accessory), 1);
336
305
  // Tell Homebridge to save the updated list of accessories.
337
306
  this.api.updatePlatformAccessories(this.platform.accessories);
338
307
  }
@@ -346,7 +315,7 @@ export class AccessController {
346
315
  // Lookup a device by it's identifier and return it if it exists.
347
316
  deviceLookup(deviceId) {
348
317
  // Find the device.
349
- const foundDevice = Object.keys(this.configuredDevices).find(x => this.configuredDevices[x].uda.unique_id === deviceId);
318
+ const foundDevice = Object.keys(this.configuredDevices).find(x => this.configuredDevices[x]?.uda.unique_id === deviceId);
350
319
  return foundDevice ? this.configuredDevices[foundDevice] : null;
351
320
  }
352
321
  // Utility function to return a floating point configuration parameter on a device.
@@ -357,12 +326,13 @@ export class AccessController {
357
326
  getFeatureNumber(option) {
358
327
  return this.platform.featureOptions.getInteger(option, this.id);
359
328
  }
360
- // Utility for checking feature options on the NVR.
361
- hasFeature(option, deviceId = this.id) {
362
- return this.platform.featureOptions.test(option, deviceId, this.id);
329
+ // Utility for checking feature options on the controller.
330
+ hasFeature(option, device) {
331
+ return this.platform.featureOptions.test(option, (device?.unique_id ?? this.id), this.id);
363
332
  }
364
333
  // Return a unique identifier for an Access controller.
365
334
  get id() {
335
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
366
336
  return this.uda.host?.mac?.replace(/:/g, "");
367
337
  }
368
338
  }
@@ -1 +1 @@
1
- {"version":3,"file":"access-controller.js","sourceRoot":"","sources":["../src/access-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"access-controller.js","sourceRoot":"","sources":["../src/access-controller.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,26 @@ import { type HomebridgePluginLogging, type Nullable } from "homebridge-plugin-u
4
4
  import type { AccessController } from "./access-controller.js";
5
5
  import type { AccessPlatform } from "./access-platform.js";
6
6
  export interface AccessHints {
7
- hasDps: boolean;
7
+ enabled: boolean;
8
+ hasMethodFace: boolean;
9
+ hasMethodHand: boolean;
10
+ hasMethodMobile: boolean;
11
+ hasMethodNfc: boolean;
12
+ hasMethodPin: boolean;
13
+ hasMethodQr: boolean;
14
+ hasMethodTwoStep: boolean;
15
+ hasWiringDps: boolean;
16
+ hasWiringRel: boolean;
17
+ hasWiringRen: boolean;
18
+ hasWiringRex: boolean;
8
19
  ledStatus: boolean;
9
20
  logDoorbell: boolean;
10
21
  logDps: boolean;
11
22
  logLock: boolean;
12
23
  logMotion: boolean;
24
+ logRel: boolean;
25
+ logRen: boolean;
26
+ logRex: boolean;
13
27
  motionDuration: number;
14
28
  occupancyDuration: number;
15
29
  syncName: boolean;