Simplified config parsing

This commit is contained in:
watsonb8
2020-01-01 00:17:37 -05:00
parent fb260c5532
commit 80ac6423e5
7 changed files with 91 additions and 265 deletions

View File

@@ -1,8 +1,9 @@
import { ControlUnit } from "./Accessories/ControlUnit";
import { Activity } from "./Models/Activity";
import { DeviceSetupItem } from "./Models/DeviceSetupItem";
import { Input, Output, Matrix } from "./Models/Matrix";
import { IActivity } from "./Models/Activity";
import { IDeviceSetupItem } from "./Models/DeviceSetupItem";
import { IInput, IOutput, IMatrix } from "./Models/Matrix";
import HarmonyDataProvider from "./DataProviders/HarmonyDataProvider";
import { IConfig, IControlUnit } from "./Models/IConfig";
let Accessory: any;
let Homebridge: any;
@@ -24,7 +25,7 @@ export default function (homebridge: any) {
class HarmonyMatrixPlatform {
log: any = {};
config: any = {};
config: IConfig;
api: any;
dataProvider: HarmonyDataProvider | null;
controlUnits: Array<ControlUnit> = [];
@@ -37,7 +38,6 @@ class HarmonyMatrixPlatform {
this.api.on('didFinishLaunching', this.didFinishLaunching.bind(this));
this.dataProvider = null;
this.log("This is new");
}
/**
@@ -51,7 +51,6 @@ class HarmonyMatrixPlatform {
this.controlUnits.forEach((accessory: ControlUnit) => {
this.api.publishExternalAccessories("HarmonyMatrixPlatform", [accessory.platformAccessory]);
})
}
/**
@@ -59,103 +58,22 @@ class HarmonyMatrixPlatform {
* @param callback
*/
accessories(callback: (accessories: Array<ControlUnit>) => void) {
//Parse ip
let hubIp: string = this.config["hubIp"];
//Parse matrix
let configInputs: any = this.config["Matrix"]["Inputs"];
let configOutputs: any = this.config["Matrix"]["Outputs"];
let matrixName: string = this.config["Matrix"]["DeviceName"];
let inputs: Array<Input> = [];
let outputs: Array<Output> = [];
configInputs.forEach((configInput: any) => {
let inputDevice: string = configInput["InputDevice"];
let inputNumber: string = configInput["InputNumber"];
this.log(`INFO - Added input to matrix '${inputDevice}'`);
inputs.push({
inputDevice: inputDevice,
inputNumber: inputNumber
});
});
configOutputs.forEach((configOutput: any) => {
let outputDevice: string = configOutput["OutputDevice"];
let outputLetter: string = configOutput["OutputLetter"];
this.log(`INFO - Added output to matrix '${outputDevice}'`);
outputs.push({
outputDevice: outputDevice,
outputLetter: outputLetter
});
});
let matrix = new Matrix({
inputs: inputs,
outputs: outputs,
deviceName: matrixName,
});
//construct data provider
this.dataProvider = new HarmonyDataProvider({
hubAddress: hubIp,
matrix: matrix,
hubAddress: this.config.hubIp,
matrix: this.config.Matrix,
log: this.log
});
//Parse control units
let configControlUnits: any = this.config["ControlUnits"];
configControlUnits.forEach((configControlUnit: any) => {
//Parse activities list
let configActivities: any = configControlUnit["Activities"];
let activities: Array<Activity> = [];
configActivities.forEach((configActivity: any) => {
//parse devices
let configDevices: any = configActivity["DeviceSetupList"];
let devices: Array<DeviceSetupItem> = [];
configDevices.forEach((configDevice: any) => {
//Add device
devices.push(new DeviceSetupItem({
deviceName: configDevice["DeviceName"],
input: configDevice["Input"]
}));
this.log(`INFO - Added device '${configDevice["DeviceName"]}' for activity '${configActivity["DisplayName"]}'`);
});
//Add activity
activities.push(new Activity({
volumeDeviceId: configActivity["VolumeDevice"],
controlDeviceId: configActivity["ControlDevice"],
outputDeviceId: configActivity["OutputDevice"],
displayName: configActivity["DisplayName"],
useMatrix: configActivity["UseMatrix"] === "true" ? true : false,
deviceList: devices
}));
this.log(`INFO - Added activity '${configActivity["DisplayName"]}'`);
});
let controlUnit: ControlUnit = new ControlUnit({
this.config.ControlUnits.forEach((unit: IControlUnit) => {
this.controlUnits.push(new ControlUnit({
dataProvider: this.dataProvider!,
displayName: configControlUnit["DisplayName"],
displayName: unit.DisplayName,
api: this.api,
log: this.log,
activities: activities,
activities: unit.Activities,
homebridge: Homebridge,
});
//@ts-ignore
let accessory = controlUnit as homebridge.platformAccessory;
//@ts-ignore
//Add control unit
this.controlUnits.push(accessory);
this.log(`INFO - Added ControlUnit`);
}));
});
callback(this.controlUnits);
}