UNPKG

@homebridge-plugins/homebridge-aladdin-connect

Version:
76 lines 3.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GenieAladdinConnectHomebridgePlatform = void 0; const settings_1 = require("./settings"); const platformAccessory_1 = require("./platformAccessory"); const aladdinConnect_1 = require("./aladdinConnect"); class GenieAladdinConnectHomebridgePlatform { log; config; api; Service; Characteristic; accessories = []; aladdinConnect; constructor(log, config, api) { this.log = log; this.config = config; this.api = api; this.Service = this.api.hap.Service; this.Characteristic = this.api.hap.Characteristic; this.aladdinConnect = new aladdinConnect_1.AladdinConnect(log, config); this.api.on("didFinishLaunching" /* APIEvent.DID_FINISH_LAUNCHING */, async () => this.discoverDevices()); } configureAccessory(accessory) { this.log.info('Loading accessory from cache:', accessory.displayName); this.accessories.push(accessory); } async discoverDevices() { let doors; try { doors = await this.aladdinConnect.getAllDoors(); } catch (error) { this.log.error('Failed to load doors from account; retrying in 5 minutes'); setTimeout(this.discoverDevices.bind(this), 5 * 60 * 1000); return; } const discoveredUUIDs = new Set(); for (const door of doors) { if (Array.isArray(this.config.ignoreDevices) && this.config.ignoreDevices.includes(door.id)) { this.log.info('Skipping ignored accessory: %s (id: %s)', door.name, door.id); continue; } if (door.ownership === 'owned' || this.config.showShared === true) { const uuid = this.api.hap.uuid.generate(`${door.deviceId}:${door.index}`); discoveredUUIDs.add(uuid); let accessory = this.accessories.find((accessory) => accessory.UUID === uuid); const existingAccessory = !!accessory; accessory = accessory ?? new this.api.platformAccessory(door.name, uuid); // Update the accessory context with the door. accessory.context = { door, }; if (existingAccessory) { this.log.info('Restoring existing accessory from cache: %s (id: %s)', accessory.displayName, door.id); this.api.updatePlatformAccessories([accessory]); } else { this.log.info('Adding new accessory: %s (id: %s)', door.name, door.id); this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]); } new platformAccessory_1.GenieAladdinConnectGarageDoorAccessory(this, accessory); } else { this.log.info('Not adding door:', door.name, ' because it is not owned by this account.'); } } const orphanedAccessories = this.accessories.filter((accessory) => !discoveredUUIDs.has(accessory.UUID)); if (orphanedAccessories.length > 0) { this.log.debug('Removing orphaned accessories from cache: ', orphanedAccessories.map(({ displayName }) => displayName).join(', ')); this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, orphanedAccessories); } } } exports.GenieAladdinConnectHomebridgePlatform = GenieAladdinConnectHomebridgePlatform; //# sourceMappingURL=platform.js.map