homebridge-pjlink
Version:
Homebridge accessory for PJLink supported projectors
63 lines • 2.99 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PJLinkPlatform = void 0;
const PJLinkPlatformAccessory_1 = require("./PJLinkPlatformAccessory");
const settings_1 = require("./settings");
class PJLinkPlatform {
constructor(log, config, api) {
this.log = log;
this.config = config;
this.api = api;
this.accessories = [];
this.api.on("didFinishLaunching" /* DID_FINISH_LAUNCHING */, () => {
this.log.debug('Load PJLink accessories');
this.discoverDevices();
});
}
configureAccessory(accessory) {
this.accessories.push(accessory);
}
discoverDevices() {
const c = this.config;
const retiredAccessories = this.accessories.slice();
const devices = c.devices;
if (devices) {
devices.forEach((device) => {
const name = device.name;
const ip = device.ip;
const port = device.port || 4352;
// use identifier or generate based on ip+port
const id = device.id || `pjlink://${ip}:${port}`;
const uuid = this.api.hap.uuid.generate(id);
const existingAccessory = this.accessories.find(accesory => accesory.UUID === uuid);
if (existingAccessory) {
this.log.info('Restoring existing accessory from cache:', existingAccessory.displayName, uuid);
new PJLinkPlatformAccessory_1.PJLinkPlatformAccessory(this.log, this.api, device, this, existingAccessory);
this.api.updatePlatformAccessories([existingAccessory]);
// remove from retired devices
const retiredIndex = retiredAccessories.indexOf(existingAccessory);
if (retiredIndex > -1) {
retiredAccessories.splice(retiredIndex, 1);
}
}
else {
// console.log('new accessory', name, uuid);
if (!name || name === '') {
this.log.error('PJLink device must be created with a non-empty name');
}
else {
const accessory = new this.api.platformAccessory(name, uuid);
accessory.context.device = device;
new PJLinkPlatformAccessory_1.PJLinkPlatformAccessory(this.log, this.api, device, this, accessory);
this.api.publishExternalAccessories(settings_1.PLUGIN_NAME, [accessory]);
}
}
});
}
// clean up unused accessories
this.log.info('removing retired accessories:', retiredAccessories);
this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, retiredAccessories);
}
}
exports.PJLinkPlatform = PJLinkPlatform;
//# sourceMappingURL=PJLinkPlatform.js.map