Modifying to publish new external accessory to fix remote problem (untested)

This commit is contained in:
watsonb8 2019-07-26 13:07:50 -04:00
parent f0eb57e4dc
commit 7638644935
2 changed files with 32 additions and 9 deletions

View File

@ -35,6 +35,7 @@ export interface IControlUnitProps {
api: any, api: any,
log: any, log: any,
homebridge: any, homebridge: any,
isExternal: boolean,
} }
/** /**
@ -47,6 +48,7 @@ export class ControlUnit implements IAccessory {
//fields //fields
private log: any = {}; private log: any = {};
private displayName: string = ""; private displayName: string = "";
private isExternal: boolean = false;
//Service fields //Service fields
private televisionService: HAPNodeJS.Service | undefined; private televisionService: HAPNodeJS.Service | undefined;
@ -72,6 +74,7 @@ export class ControlUnit implements IAccessory {
Characteristic = props.api.hap.Characteristic; Characteristic = props.api.hap.Characteristic;
this.displayName = props.displayName; this.displayName = props.displayName;
this.name = this.displayName; this.name = this.displayName;
this.isExternal = props.isExternal;
this.activities = props.activities; this.activities = props.activities;
@ -142,19 +145,21 @@ export class ControlUnit implements IAccessory {
* Event handler for SET active characteristic * Event handler for SET active characteristic
*/ */
private onSetAccessoryActive = async (value: any) => { private onSetAccessoryActive = async (value: any) => {
if (!this.isExternal) {
switch (value) { switch (value) {
case 0: this.dataProvider.powerOff(this.name); break; case 0: this.dataProvider.powerOff(this.name); break;
//Turn on with first activity //Turn on with first activity
case 1: this.dataProvider.powerOn(this.name, this.activities[0]); break; case 1: this.dataProvider.powerOn(this.name, this.activities[0]); break;
} }
} }
}
/** /**
* Event handler for GET active characteristic * Event handler for GET active characteristic
*/ */
private onGetAccessoryActive = async () => { private onGetAccessoryActive = async () => {
//@ts-ignore //@ts-ignore
return this.dataProvider.getIsActive ? Characteristic.Active.Active : Characteristic.Active.Inactive return this.dataProvider.getIsActive() ? Characteristic.Active.Active : Characteristic.Active.Inactive
} }
/** /**

View File

@ -27,6 +27,7 @@ class HarmonyMatrixPlatform {
config: any = {}; config: any = {};
api: any; api: any;
externalAccessories: Array<any> = []; externalAccessories: Array<any> = [];
dataProvider: HarmonyDataProvider | null;
constructor(log: any, config: any, api: any) { constructor(log: any, config: any, api: any) {
this.log = log; this.log = log;
@ -34,10 +35,13 @@ class HarmonyMatrixPlatform {
this.api = api; this.api = api;
this.log('INFO - Registering Harmony Matrix Platform'); this.log('INFO - Registering Harmony Matrix Platform');
this.api.on('didFinishLaunching', this.didFinishLaunching.bind(this)); this.api.on('didFinishLaunching', this.didFinishLaunching.bind(this));
this.dataProvider = null;
} }
/** /**
* Handler for didFinishLaunching * Handler for didFinishLaunching
* Happens after constructor
*/ */
didFinishLaunching() { didFinishLaunching() {
this.log(`Publishing external accessories`); this.log(`Publishing external accessories`);
@ -96,7 +100,7 @@ class HarmonyMatrixPlatform {
}); });
//construct data provider //construct data provider
let dataProvider = new HarmonyDataProvider({ this.dataProvider = new HarmonyDataProvider({
hubAddress: hubIp, hubAddress: hubIp,
matrix: matrix, matrix: matrix,
log: this.log log: this.log
@ -135,23 +139,37 @@ class HarmonyMatrixPlatform {
}); });
let controlUnit: ControlUnit = new ControlUnit({ let controlUnit: ControlUnit = new ControlUnit({
dataProvider: dataProvider, dataProvider: this.dataProvider!,
displayName: configControlUnit["DisplayName"], displayName: configControlUnit["DisplayName"],
api: this.api, api: this.api,
log: this.log, log: this.log,
activities: activities, 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 //@ts-ignore
let accessory = controlUnit as homebridge.platformAccessory; let accessory = controlUnit as homebridge.platformAccessory;
//@ts-ignore
let externalAccessory = controlUnitExternal as homebridge.platformAccessory;
//Add control unit //Add control unit
controlUnits.push(accessory); controlUnits.push(accessory);
//Add to list of remotes
this.externalAccessories.push(externalAccessory);
this.log(`INFO - Added ControlUnit`); this.log(`INFO - Added ControlUnit`);
}); });
this.externalAccessories = controlUnits;
callback(controlUnits); callback(controlUnits);
} }
} }