Merge branch 'feature/neeo_control'

This commit is contained in:
watsonb8 2019-07-26 15:44:53 -04:00
commit 9b48614dd1
3 changed files with 48 additions and 13 deletions

View File

@ -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;
@ -70,15 +72,16 @@ export class ControlUnit implements IAccessory {
Api = props.api;
Service = props.api.hap.Service;
Characteristic = props.api.hap.Characteristic;
this.displayName = props.displayName;
this.name = this.displayName;
this.name = props.displayName;
this.displayName = props.isExternal ? `${props.displayName}-Remote` : props.displayName;
this.isExternal = props.isExternal;
this.activities = props.activities;
this.dataProvider = props.dataProvider;
homebridge = props.homebridge;
this.platformAccessory = new homebridge.platformAccessory(this.name, this.generateUUID(), homebridge.hap.Accessory.Categories.TELEVISION);
this.platformAccessory = new homebridge.platformAccessory(this.displayName, this.generateUUID(), homebridge.hap.Accessory.Categories.TELEVISION);
//Configure services
this.configureTvService();
@ -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,13 +159,21 @@ 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
}
/**
* Event handler for SET remote key
*/
private onSetRemoteKey = async (key: any) => {
//Set the active identifier with every key press
let currentActivity: Activity = this.dataProvider.getIsActive(this.name)!;
let identifier: number = 0;
if (currentActivity) {
identifier = this.activities.findIndex(e => e.displayName === currentActivity.displayName);
}
this.televisionService!.setCharacteristic(Characteristic.ActiveIdentifier, identifier);
this.dataProvider.sendKeyPress(this.name, key);
}
@ -168,7 +181,9 @@ export class ControlUnit implements IAccessory {
* Event handler for SET active identifier characteristic
*/
private onSetActiveIdentifier = async (identifier: any) => {
this.dataProvider.startActivity(this.name, this.activities[identifier]);
if (!this.isExternal) {
this.dataProvider.startActivity(this.name, this.activities[identifier]);
}
}
/**

View File

@ -221,6 +221,7 @@ class HarmonyDataProvider {
public sendKeyPress = async (controlUnitName: string, key: any) => {
if (this.states[controlUnitName]) {
let commandName: string = "";
let device: IDevice = this.getDeviceFromName(this.states[controlUnitName]!.currentActivity.controlDeviceId);
switch (key) {
case RemoteKey.ARROW_UP: {

View File

@ -27,6 +27,7 @@ class HarmonyMatrixPlatform {
config: any = {};
api: any;
externalAccessories: Array<any> = [];
dataProvider: HarmonyDataProvider | null;
constructor(log: any, config: any, api: any) {
this.log = log;
@ -34,10 +35,14 @@ class HarmonyMatrixPlatform {
this.api = api;
this.log('INFO - Registering Harmony Matrix Platform');
this.api.on('didFinishLaunching', this.didFinishLaunching.bind(this));
this.dataProvider = null;
this.log("This is new");
}
/**
* Handler for didFinishLaunching
* Happens after constructor
*/
didFinishLaunching() {
this.log(`Publishing external accessories`);
@ -96,7 +101,7 @@ class HarmonyMatrixPlatform {
});
//construct data provider
let dataProvider = new HarmonyDataProvider({
this.dataProvider = new HarmonyDataProvider({
hubAddress: hubIp,
matrix: matrix,
log: this.log
@ -135,23 +140,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"]}`,
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);
}
}