diff --git a/src/Accessories/ControlUnit.ts b/src/Accessories/ControlUnit.ts index 2bcd7f4..2ee8e13 100644 --- a/src/Accessories/ControlUnit.ts +++ b/src/Accessories/ControlUnit.ts @@ -35,6 +35,7 @@ export interface IControlUnitProps { api: any, log: any, homebridge: any, + isExternal: boolean, } /** @@ -47,6 +48,7 @@ export class ControlUnit implements IAccessory { //fields private log: any = {}; private displayName: string = ""; + private isExternal: boolean = false; //Service fields private televisionService: HAPNodeJS.Service | undefined; @@ -72,6 +74,7 @@ export class ControlUnit implements IAccessory { Characteristic = props.api.hap.Characteristic; this.displayName = props.displayName; this.name = this.displayName; + this.isExternal = props.isExternal; this.activities = props.activities; @@ -142,10 +145,12 @@ export class ControlUnit implements IAccessory { * Event handler for SET active characteristic */ private onSetAccessoryActive = async (value: any) => { - switch (value) { - case 0: this.dataProvider.powerOff(this.name); break; - //Turn on with first activity - case 1: this.dataProvider.powerOn(this.name, this.activities[0]); break; + if (!this.isExternal) { + switch (value) { + case 0: this.dataProvider.powerOff(this.name); break; + //Turn on with first activity + case 1: this.dataProvider.powerOn(this.name, this.activities[0]); break; + } } } @@ -154,7 +159,7 @@ export class ControlUnit implements IAccessory { */ private onGetAccessoryActive = async () => { //@ts-ignore - return this.dataProvider.getIsActive ? Characteristic.Active.Active : Characteristic.Active.Inactive + return this.dataProvider.getIsActive() ? Characteristic.Active.Active : Characteristic.Active.Inactive } /** diff --git a/src/index.ts b/src/index.ts index cb21140..bb63c41 100644 --- a/src/index.ts +++ b/src/index.ts @@ -27,6 +27,7 @@ class HarmonyMatrixPlatform { config: any = {}; api: any; externalAccessories: Array = []; + dataProvider: HarmonyDataProvider | null; constructor(log: any, config: any, api: any) { this.log = log; @@ -34,10 +35,13 @@ class HarmonyMatrixPlatform { this.api = api; this.log('INFO - Registering Harmony Matrix Platform'); this.api.on('didFinishLaunching', this.didFinishLaunching.bind(this)); + + this.dataProvider = null; } /** * Handler for didFinishLaunching + * Happens after constructor */ didFinishLaunching() { this.log(`Publishing external accessories`); @@ -96,7 +100,7 @@ class HarmonyMatrixPlatform { }); //construct data provider - let dataProvider = new HarmonyDataProvider({ + this.dataProvider = new HarmonyDataProvider({ hubAddress: hubIp, matrix: matrix, log: this.log @@ -135,23 +139,37 @@ class HarmonyMatrixPlatform { }); let controlUnit: ControlUnit = new ControlUnit({ - dataProvider: dataProvider, + dataProvider: this.dataProvider!, displayName: configControlUnit["DisplayName"], api: this.api, log: this.log, activities: activities, - homebridge: Homebridge + homebridge: Homebridge, + isExternal: false + }); + + let controlUnitExternal: ControlUnit = new ControlUnit({ + dataProvider: this.dataProvider!, + displayName: `${configControlUnit["DisplayName"]}-Remote`, + api: this.api, + log: this.log, + activities: activities, + homebridge: Homebridge, + isExternal: true }); //@ts-ignore let accessory = controlUnit as homebridge.platformAccessory; + //@ts-ignore + let externalAccessory = controlUnitExternal as homebridge.platformAccessory; //Add control unit controlUnits.push(accessory); + //Add to list of remotes + this.externalAccessories.push(externalAccessory); this.log(`INFO - Added ControlUnit`); }); - this.externalAccessories = controlUnits; callback(controlUnits); } } \ No newline at end of file