UNPKG

@ronniepettersson/homebridge-dummy

Version:

Create Homebridge accessories to help with automation and control — scheduling, delays, sensors, commands, webhooks, and more

107 lines 5.09 kB
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js'; import { DummyAccessory } from '../accessory/base.js'; import { GroupAccessory } from '../accessory/group.js'; import { createDummyAccessory } from '../accessory/helpers.js'; import { setLanguage, strings } from '../i18n/i18n.js'; import { migrateAccessories } from '../tools/configMigration.js'; import { Log } from '../tools/log.js'; import getVersion from '../tools/version.js'; import { WebhookManager } from '../model/webhook.js'; import { Storage } from '../tools/storage.js'; export class HomebridgeDummyPlatform { config; api; Service; Characteristic; log; platformAccessories = new Map(); dummyAccessories = []; webhookManager; constructor(logger, config, api) { this.config = config; this.api = api; const userLang = Intl.DateTimeFormat().resolvedOptions().locale.split('-')[0]; setLanguage(userLang); this.Service = api.hap.Service; this.Characteristic = api.hap.Characteristic; this.log = new Log(logger, config.verbose === true); this.webhookManager = new WebhookManager(this.Characteristic, this.log, config.webhookPort); this.log.always('v%s | System %s | Node %s | HB v%s | HAPNodeJS v%s', getVersion(), process.platform, process.version, api.serverVersion, api.hap.HAPLibraryVersion()); api.on('didFinishLaunching', () => { this.setup(); }); api.on('shutdown', () => { this.teardown(); }); } configureAccessory(accessory) { this.log.always(strings.startup.restoringAccessory, accessory.displayName); this.platformAccessories.set(accessory.context.identifier, accessory); } teardown() { this.dummyAccessories.forEach(accessory => { accessory.teardown(); }); } async setup() { await Storage.init(this.api.user.persistPath()); const keepIdentifiers = new Set(); const accessories = this.config.accessories || []; if (this.config.migrationNeeded) { const migratedAccessories = await migrateAccessories(this.log, this.api.user.configPath()) ?? []; accessories.push(...migratedAccessories); } const groupAccessories = new Map(); for (const accessoryConfig of accessories) { if (accessoryConfig.groupName?.length) { const groupConfig = groupAccessories.get(accessoryConfig.groupName) || { accessories: [] }; groupConfig.accessories.push(accessoryConfig); groupAccessories.set(accessoryConfig.groupName, groupConfig); continue; } const id = DummyAccessory.identifier(accessoryConfig); keepIdentifiers.add(id); const accessory = this.platformAccessories.get(id) ?? this.createPlatformAccessory(id, accessoryConfig.name); const dummyAccessory = createDummyAccessory(this.Service, this.Characteristic, accessory, accessoryConfig, this.log); if (!dummyAccessory) { continue; } if (accessoryConfig.enableWebook) { this.webhookManager.registerAccessory(dummyAccessory); } this.dummyAccessories.push(dummyAccessory); } ; for (const groupName of groupAccessories.keys()) { const groupConfig = groupAccessories.get(groupName); const id = GroupAccessory.identifier(groupName); keepIdentifiers.add(id); const accessory = this.platformAccessories.get(id) ?? this.createPlatformAccessory(id, groupName); const groupAccessory = new GroupAccessory(this.Service, this.Characteristic, accessory, groupConfig, this.log, this.webhookManager); this.dummyAccessories.push(groupAccessory); } this.platformAccessories.forEach(accessory => { if (!keepIdentifiers.has(accessory.context.identifier)) { this.removeCachedAccessory(accessory); } }); this.webhookManager.startServer(); const randIndex = Math.floor(Math.random() * strings.startup.welcome.length); this.log.always(`${strings.startup.setupComplete}\n${strings.startup.welcome[randIndex]}`); } createPlatformAccessory(id, name) { this.log.always(strings.startup.newAccessory, name); const uuid = this.api.hap.uuid.generate(id); const accessory = new this.api.platformAccessory(name, uuid); accessory.context.identifier = id; this.platformAccessories.set(id, accessory); this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]); return accessory; } removeCachedAccessory(accessory) { this.log.always(strings.startup.removeAccessory, accessory.displayName); this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]); this.platformAccessories.delete(accessory.context.identifier); } } //# sourceMappingURL=platform.js.map